win32消息机制
发布时间:2020-12-14 06:00:33 所属栏目:Windows 来源:网络整理
导读:windows操作系统最大的特殊是良好的用户交互性 消息机制:产生消息,传递消息并处理消息的过程 1.产生消息 不可控 1 typedef struct tagMSG 2 { 3 HWND hwnd; // 窗口句柄 4 UINT message; // 消息id 5 WPARAM wParam; // 消息的辅助参数 6 LPARAM lParam; /
windows操作系统最大的特殊是良好的用户交互性 消息机制:产生消息,传递消息并处理消息的过程 1.产生消息 不可控 1 typedef struct tagMSG 2 { 3 HWND hwnd;//窗口句柄 4 UINT message;//消息id 5 WPARAM wParam;//消息的辅助参数 6 LPARAM lParam;//消息的辅助参数 7 DWORD time;//消息产生的时间 8 POINT pt;//消息产生时鼠标的坐标 9 } MSG; 2.传递消息(分成两个部分,1、系统传递消息给应用程序 不可控;2.应用程序传递消息给应用程序 可控) windows操作系统为每一个正在运行的应用程序维护一个消息队列 3.消息处理 可控 吧消息当成条件 ,如何去拿到这个条件 主消息循环: GetMessage是从消息队列中得到消息 如果消息队列没有消息,消息堵塞 等待消息 如果的带了消息,要判断这个消息是否是WM_QUIT消息如果是返回false 如果不是 函数返回true 1 while (GetMessage(&msg,NULL,0,0))//从消息队列取消息,取出来放在第1个参数,最后两个参数表示消息的过滤,第3个参数表示的id到第4个参数表示的id这个区间表示的消息id才能被得到,给0,表示不过滤 2 { 3 if (!TranslateAccelerator(msg.hwnd,hAccelTable,&msg))//翻译快捷键 4 { 5 TranslateMessage(&msg);//翻译消息,主要做键盘消息的翻译 6 DispatchMessage(&msg);//投递消息 7 } 8 } PeekMessage 从消息队列去取得消息,如果消息队列有消息 返回true 没有返回false 1 ZeroMemory(&msg,sizeof(msg)); 2 while (msg.message != WM_QUIT) 3 { 4 if (PeekMessage(&msg,PM_REMOVE))//最后一个参数表示从消息队列移除消息 5 { 6 if (!TranslateAccelerator(msg.hwnd,&msg))//翻译快捷键 7 { 8 TranslateMessage(&msg);//翻译消息,主要做键盘消息的翻译 9 DispatchMessage(&msg);//投递消息 10 } 11 } 12 //游戏的画面更新 13 //游戏的数据更新 14 } 处理窗口消息中switch内函数 1 case WM_LBUTTONDOWN://鼠标左键点击消息 2 { 3 ////SendMessage 可以理解为插队,理解为递归,直接把消息投递给窗口对应的消息处理函数 4 //SendMessage(hWnd,//发给哪个窗口 5 // WM_KEYDOWN,//发送的消息id 6 // 0,0);//后两个参数表示这个消息id的辅助信息 7 PostMessage(hWnd,WM_KEYDOWN,0);//理解为排队,把消息直接投递给窗口对应的消息队列,以供下一次得到消息时从消息队列取出 8 Sleep(1000); 9 hdc = GetDC(hWnd); 10 TextOut(hdc,_T("button"),6); 11 ReleaseDC(hWnd,hdc); 12 } 13 break; 14 case WM_KEYDOWN://键盘按下消息 15 { 16 Sleep(2000); 17 hdc = GetDC(hWnd); 18 TextOut(hdc,200,_T("keydown"),7); 19 ReleaseDC(hWnd,hdc); 20 } 21 break; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在Windows 7上使用clisp发布quicklisp
- windows-phone-7 – WP7的任意拖放
- ms访问 – 在Microsoft Access“应用程序”中搜索字段引用
- 我的dll代码从一个exe文件中工作,但是无法从Java loadLibra
- windows-phone-7 – Windows Phone 7中MessageBox中的TextB
- windows-8 – Windows RT中的网络资源限制
- Microsoft Windows中的FIPS“单用户模式”要求
- 修复的位置无法在Windows Safari上运行
- windows-phone-7 – Inneractive Ads会导致很多应用程序崩溃
- windows-server-2012 – 无法访问Windows Server 2012(以太
推荐文章
站长推荐
- Windows运行时 – WinRT / Metro是否支持多台显示
- winapi – 如何通过Win32对话框以编程方式更改标
- 未经身份验证的用户如何访问Windows共享?
- windows – 从Win32上的stdin读取二进制数据,并将
- 在发布时,更改Windows通用应用程序Windows Phone
- window系统,GitLab 远程与本地 SSH 认证连接
- windows-server-2012-r2 – 通过WMI关联卷和物理
- vbscript – 关于WMI Win32_WindowsProductActiv
- WebRTC Windows/Linux版构建过程(2018年6月)
- windows – 如何使用Delphi获取与文件扩展名相关
热点阅读