主目录传送门

https://blog.csdn.net/zb774095236/article/details/108291755

本次学习的源码模板下载:

1、百度云:https://pan.baidu.com/s/1LTCURLnRitaHPKbZxbugbw  提取码:j3fl

学习目标:

在上期的基础源码版本上 本次我们将通过自定义的快捷键方式 (ALT+/)再次打开一个窗口


学习内容:

一、 项目参考

新增函数解释 DialogBox DialogBoxParam EndDialog

1. https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadacceleratorsa  Microsoft官方函数文档

2. https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadacceleratorsa Microsoft官方函数文档

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系列

二. 在往期模板上修改和新增的步骤

1.右键Win32API.rc

2.选中Add Resource

3.选中Dialog

4.点击New

5.右键IDD_DIALOG1

6.点击Properties

7.将ID:IDD_DIALOG1修改为ID:IDD_ABOUTBOX

2.代码段

//库文件
#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函数相关推荐

  1. Windows API一日一练(28-29)CreateFont SetRect SelectObject DeleteObject函数-用各种不同的字体并进行文字绘制并注意释放

    主目录传送门 https://blog.csdn.net/zb774095236/article/details/108291755 本次学习的源码模板下载: 1.百度云:https://pan.ba ...

  2. Windows API一日一练(一)第一个应用程序 使用应用程序句柄 使用命令行参数 MessageBox函数 RegisterClass和RegisterClassEx函数

    要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们.现在就来编写一个最简单的 ...

  3. Windows API一日一练(20)LoadIcon和LoadCursor函数-程序图标设置和鼠标的样式

    主目录传送门 https://blog.csdn.net/zb774095236/article/details/108291755 本次学习的源码模板下载: 1.百度云:https://pan.ba ...

  4. Windows API一日一练(1)第一个应用程序

    要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们.现在就来编写一个最简单的 ...

  5. Windows API一日一练(2)使用应用程序句柄

    从上面这段程序就可以看到,_tWinMain是应用程序的入口函数,这里是使用它的宏,定义在tchar.h头文件里,为什么要这样作宏定义的呢?由于Windows的应用程序要适应UNICODE和以前单字符 ...

  6. Windows API一日一练(86)GetClipboardData函数

    前面介绍怎么样把数据放到剪贴板里面,那么又是怎么样从剪贴板里面获取数据出来呢?当然还是需要使用其它的API函数来获取剪贴板里的数据.获取剪贴板里的数据时,是不知道当前剪贴板里是否有数据的,也不知道剪贴 ...

  7. Windows API一日一练 59 CreateFileMapping和MapViewOfFile函数

    在开发软件过程里,也经常碰到进程间共享数据的需求.比如 A 进程创建计算数据, B 进程进行显示数据的图形.这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开 ...

  8. Windows API一日一练(59)CreateFileMapping和MapViewOfFile函数

    在开发软件过程里,也经常碰到进程间共享数据的需求.比如 A 进程创建计算数据, B 进程进行显示数据的图形.这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开 ...

  9. Windows API一日一练(10-12)GetMessage TranslateMessage DispatchMessage函数

    主目录传送门 https://blog.csdn.net/zb774095236/article/details/108291755 本次学习的源码模板下载: 1.https://pan.baidu. ...

  10. Windows API一日一练(70)GetSystemTime和GetLocalTime函数

    时间是一个非常重要的信息,比如写LOG时,就需要把时间输出来,跟踪程序是什么时候出错的.或者当你开发一个银行交易系统时,就要记录当前交易的时间,以便后面可以输出报表,打印给信用卡用户.根据不同的需求, ...

最新文章

  1. jquery调用click事件的三种方式
  2. 请人安装linux系统,我想安装linux操作系统,请指导一下
  3. 【Android APT】编译时技术 ( 开发编译时注解 )
  4. npm常用命令:ini他、install、remove及编译运行工程、使用淘宝npm镜像
  5. camuda流程引擎如此简单(一)
  6. 【转】无法登陆SQL server 服务器的解决办法
  7. java中挂起和恢复,应用程序“未能及时恢复”并挂起
  8. 信息奥赛一本通(1413:确定进制)
  9. 《高级无线网络—4G技术》——2.3 正交频分复用
  10. html <font>中英文常用字体和颜色总结
  11. 由膳食纤维选择性促进的肠道细菌缓解二型糖尿病
  12. 2018-2019-2 20175216张雪原 实验四《Android程序设计》实验报告
  13. html 分页样式首页下一页,css中分页样式怎么设置
  14. NOIP模拟赛20191024 T1 嘟嘟噜【约瑟夫问题的mlogn解法】
  15. ​如何成为一个成功的自由程序员?
  16. win10鼠标右键问题,导致桌面刷新重启,资源管理器explorer重启,文件夹闪退,应用管理员模式无法运行等等
  17. python1300_相机选型器 : PYTHON 1300-NOIP1SN1300A-QDI
  18. 冒泡排序、冒泡排序动画、冒泡排序代码、冒泡排序教程
  19. 光敏二极管血氧仪方案设计研发
  20. 安卓开发笔记-UI设计的概念

热门文章

  1. Ubuntu下QT的安装配置
  2. python写数据到hive_Python数据篇之Pyhive
  3. win10官方原版iso镜像 下载地址
  4. python建模_python建模实例详解
  5. 用Python进行数学建模(一)
  6. 如何将原生PDF转为纯图像Word?
  7. WINDOWS10系统出现耳机插入没有声音,怎么解决?
  8. jsp java语法_JSP 语法 | 菜鸟教程
  9. 目标规划运筹学例题doc_第八章 运筹学 目标规划 案例.doc
  10. linux rman备份与恢复,RMAN备份与恢复 —— 完全恢复与不完全恢复