Windows API一日一练(17-18)DialogBox DialogBoxParam EndDialog函数
主目录传送门
https://blog.csdn.net/zb774095236/article/details/108291755
本次学习的源码模板下载:
1、百度云:https://pan.baidu.com/s/1LTCURLnRitaHPKbZxbugbw 提取码:j3fl
学习目标:
在上期的基础源码版本上 本次我们将通过自定义的快捷键方式 (ALT+/)再次打开一个窗口
学习内容:
新增函数解释 DialogBox DialogBoxParam EndDialog
3.https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enddialog Microsoft官方函数文档
4. https://docs.microsoft.com/en-us/windows/win32/dlgbox/using-dialog-boxes Microsoft创建快捷键文档
5. https://blog.csdn.net/caimouse/article/details/1710834 大牛的Win32系列
6.https://blog.csdn.net/caimouse/article/details/1716140 大牛的Win32系列
7.将ID:IDD_DIALOG1修改为ID:IDD_ABOUTBOX
//库文件
#include "Windows.h"
#include "tchar.h"#include "resource.h"#define New_Add 0x01 //后续将采用宏定义的方式来标记新增代码段#if New_Add
HINSTANCE g_hInstance;LRESULT CALLBACK ABOUTBOX_Proc(HWND hwnd, // handle to window UINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam) // second message parameter
{switch (uMsg){case WM_COMMAND:switch (LOWORD(wParam)){case IDOK:// Fall through. case IDCANCEL:EndDialog(hwnd, wParam);//结束对话框return TRUE;}}return FALSE;
}#endifLRESULT CALLBACK MainWndProc(HWND hwnd, // handle to window UINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam) // second message parameter
{PAINTSTRUCT ps;HDC hdc;int wmId = (int)(wParam & 0xFFFF);//实验发现 wParam会有问题 这里做出来对应的修改switch (uMsg){case WM_COMMAND:switch (wmId){case ID_ABOUT:MessageBox(hwnd, _T("ALT+?"), _T("你使用了快捷键"), MB_OK);break;case ID_EXIT://MessageBox(hwnd, _T("ALT+/"), _T("你使用了快捷键"), MB_OK);#if New_Add#define DialogBoxTest_1 //想要调试那个自己改一下后面的参数
#if defined(DialogBoxTest_1)if (DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_ABOUTBOX),hwnd,(DLGPROC)ABOUTBOX_Proc) == IDOK)
#elif defined(DialogBoxTest_2)if(DialogBoxParam(g_hInstance,MAKEINTRESOURCE(IDD_ABOUTBOX),NULL, (DLGPROC)ABOUTBOX_Proc,0) == IDOK)
#endif{MessageBox(hwnd, _T("确定"), _T("你使用了按钮"), MB_OK);}else{MessageBox(hwnd, _T("取消"), _T("你使用了按钮"), MB_OK);}#endif break;default:break;}return 0;case WM_CREATE:// Initialize the window.return 0;case WM_PAINT:// Paint the window's client area. hdc = BeginPaint(hwnd, &ps);TextOut(hdc, 0, 0, _T("Hello, Windows!"), 15);EndPaint(hwnd, &ps);return 0;case WM_SIZE:// Set the size and position of the window. return 0;case WM_DESTROY:// Clean up window-specific data objects. PostQuitMessage(0);return 0;// // Process other messages. // default:return DefWindowProc(hwnd, uMsg, wParam, lParam);//系统的默认消息处理函数}return 0;
}//定义WinMain的入口
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
{//没有这些参数也不会发生警告//UNREFERENCED_PARAMETER(hInstance);UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);//UNREFERENCED_PARAMETER(nCmdShow);HACCEL hAccelTable;WNDCLASS wc; //创建窗口类对象//对窗口类的各属性进行初始化wc.style = CS_HREDRAW | CS_VREDRAW; /*窗口类的风格,CS前缀,C表示Class,S表示Style,这里使用了水平和垂直风格*/wc.lpfnWndProc = MainWndProc; /*这里将回到函数的名字赋值用以windows后面回调*/wc.cbClsExtra = 0; //附加参数,通常情况下为0wc.cbWndExtra = 0; //附加参数,通常情况下为0wc.hInstance = hInstance; //窗口句柄,这里将WinMain中的hInstance句柄赋值就可wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /*窗口图标,LoadIcon()是加载图标,这里是加载一个系统资源图标,LoadIcon()的原型是HICON LoadIcon(HINSTANCE, LPCSTR);*/wc.hCursor = LoadCursor(NULL, IDC_ARROW); /*加载鼠标,同上相似*/wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); /*窗口画刷,这里是使用的白色画刷,所以创建出来的窗口的背景颜色则是白色的*/wc.lpszMenuName = _T("MainMenu"); //窗口菜单名称,这里没有菜单,设为NULLwc.lpszClassName = _T("MainWindowClass"); //窗口类名称,这个窗口类名称可作为这个窗口的唯一标识/*注册窗口类*/if (!RegisterClass(&wc)){//注册窗口类失败时,弹出提示MessageBox(NULL, TEXT("This program requires Window NT!"), _T("MainWindowClass"), MB_ICONERROR);return FALSE;}/*创建窗口HWND CreateWindow(LPCTSTR lpClassName, //窗口类名LPCTSTR lpWindowName, //窗口标题DWORD dwStyle, //窗口风格,WS开头int x, //窗口左上角x坐标int y, //窗口左上角y坐标int nWidth, //窗口宽度int nHeight, //窗口高度HWND hWndParent, //父窗口句柄HMENU hMenu, //菜单句柄HANDLE hlnstance, //窗口句柄LPVOID lpParam); //改值会传递给窗口WM_CREATE消息的一个参数*/HWND hwnd; //创建窗口函数CreateWindow()会返回一个HWND句柄,这里定义下,用来接收这个句柄hwnd = CreateWindow(_T("MainWindowClass"), //窗口类名TEXT(" Hello Win32API"), //窗口标题,会在窗口的左上角标题栏显示WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL, //窗口风格CW_USEDEFAULT, //窗口左上角x位置,这里使用的系统默认值,可自定义CW_USEDEFAULT, //窗口左上角y位置CW_USEDEFAULT, //窗口的宽度CW_USEDEFAULT, //窗口的高度NULL, //该窗口的父窗口或所有者窗口的句柄,这里用不到,设为NULLNULL, //窗口菜单句柄,这里没有菜单,设置为NULLhInstance, //窗口句柄NULL //传递给窗口WM_CREATE消息的一个参数,这里不用,设置为NULL);/*显示窗口,显示方式使用WinMain的参数*/ShowWindow(hwnd, nCmdShow);/*更新窗口*/UpdateWindow(hwnd);hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_TESTWIN));//自己定义的快捷键表#if New_Addg_hInstance = hInstance;//得到全局窗口的句柄#endifMSG msg;// 主消息循环:while (GetMessage(&msg, nullptr, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))//用来处理快捷键{TranslateMessage(&msg);//把虚键消息翻译成字符消息(WM_CHAR)//再把WM_CHAR消息放到消息队列中去DispatchMessage(&msg);//指示操作系统把这条消息发到窗口//过程MainWndProc 进行处理}}return 0;}
项目下载地址:
1.百度云:https://pan.baidu.com/s/1XqTLTQ2Noa72VgHeYQtUQw 提取码:6lzt
留在最后
我对代码没有过多的解释 我提供了简单的注释 和官方文档 希望以这种方式加强实战能力
Windows API一日一练(17-18)DialogBox DialogBoxParam EndDialog函数相关推荐
- Windows API一日一练(28-29)CreateFont SetRect SelectObject DeleteObject函数-用各种不同的字体并进行文字绘制并注意释放
主目录传送门 https://blog.csdn.net/zb774095236/article/details/108291755 本次学习的源码模板下载: 1.百度云:https://pan.ba ...
- Windows API一日一练(一)第一个应用程序 使用应用程序句柄 使用命令行参数 MessageBox函数 RegisterClass和RegisterClassEx函数
要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们.现在就来编写一个最简单的 ...
- Windows API一日一练(20)LoadIcon和LoadCursor函数-程序图标设置和鼠标的样式
主目录传送门 https://blog.csdn.net/zb774095236/article/details/108291755 本次学习的源码模板下载: 1.百度云:https://pan.ba ...
- Windows API一日一练(1)第一个应用程序
要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们.现在就来编写一个最简单的 ...
- Windows API一日一练(2)使用应用程序句柄
从上面这段程序就可以看到,_tWinMain是应用程序的入口函数,这里是使用它的宏,定义在tchar.h头文件里,为什么要这样作宏定义的呢?由于Windows的应用程序要适应UNICODE和以前单字符 ...
- Windows API一日一练(86)GetClipboardData函数
前面介绍怎么样把数据放到剪贴板里面,那么又是怎么样从剪贴板里面获取数据出来呢?当然还是需要使用其它的API函数来获取剪贴板里的数据.获取剪贴板里的数据时,是不知道当前剪贴板里是否有数据的,也不知道剪贴 ...
- Windows API一日一练 59 CreateFileMapping和MapViewOfFile函数
在开发软件过程里,也经常碰到进程间共享数据的需求.比如 A 进程创建计算数据, B 进程进行显示数据的图形.这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开 ...
- Windows API一日一练(59)CreateFileMapping和MapViewOfFile函数
在开发软件过程里,也经常碰到进程间共享数据的需求.比如 A 进程创建计算数据, B 进程进行显示数据的图形.这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开 ...
- Windows API一日一练(10-12)GetMessage TranslateMessage DispatchMessage函数
主目录传送门 https://blog.csdn.net/zb774095236/article/details/108291755 本次学习的源码模板下载: 1.https://pan.baidu. ...
- Windows API一日一练(70)GetSystemTime和GetLocalTime函数
时间是一个非常重要的信息,比如写LOG时,就需要把时间输出来,跟踪程序是什么时候出错的.或者当你开发一个银行交易系统时,就要记录当前交易的时间,以便后面可以输出报表,打印给信用卡用户.根据不同的需求, ...
最新文章
- jquery调用click事件的三种方式
- 请人安装linux系统,我想安装linux操作系统,请指导一下
- 【Android APT】编译时技术 ( 开发编译时注解 )
- npm常用命令:ini他、install、remove及编译运行工程、使用淘宝npm镜像
- camuda流程引擎如此简单(一)
- 【转】无法登陆SQL server 服务器的解决办法
- java中挂起和恢复,应用程序“未能及时恢复”并挂起
- 信息奥赛一本通(1413:确定进制)
- 《高级无线网络—4G技术》——2.3 正交频分复用
- html <font>中英文常用字体和颜色总结
- 由膳食纤维选择性促进的肠道细菌缓解二型糖尿病
- 2018-2019-2 20175216张雪原 实验四《Android程序设计》实验报告
- html 分页样式首页下一页,css中分页样式怎么设置
- NOIP模拟赛20191024 T1 嘟嘟噜【约瑟夫问题的mlogn解法】
- ​如何成为一个成功的自由程序员?
- win10鼠标右键问题,导致桌面刷新重启,资源管理器explorer重启,文件夹闪退,应用管理员模式无法运行等等
- python1300_相机选型器 : PYTHON 1300-NOIP1SN1300A-QDI
- 冒泡排序、冒泡排序动画、冒泡排序代码、冒泡排序教程
- 光敏二极管血氧仪方案设计研发
- 安卓开发笔记-UI设计的概念
热门文章
- Ubuntu下QT的安装配置
- python写数据到hive_Python数据篇之Pyhive
- win10官方原版iso镜像 下载地址
- python建模_python建模实例详解
- 用Python进行数学建模(一)
- 如何将原生PDF转为纯图像Word?
- WINDOWS10系统出现耳机插入没有声音,怎么解决?
- jsp java语法_JSP 语法 | 菜鸟教程
- 目标规划运筹学例题doc_第八章 运筹学 目标规划 案例.doc
- linux rman备份与恢复,RMAN备份与恢复 —— 完全恢复与不完全恢复