win32开发(自定义消息)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
一般来说,windows除了提供的普通的消息处理机制之外,还提供了自定义消息的处理方法。这就是说,WndProc不仅可以处理来自于操作系统的消息,还可以处理自定义的消息。这对写程序的coder来说实在是太方便了。
那一般什么时候使用自定义消息呢?情况是这样的,对于那些io操作时间比较长的操作,我们一般会重新起一个thread来处理,比如说网络的操作。因为如果把网络的操作放在WndProc里面,这会产生很多的卡顿非常影响操作者的使用体验。让socket等一些低速操作分开进行之后,可以在thread操作完成后主动给窗口发一个消息,告知相关工作已经结束就可以了,这就克服了操作卡顿的问题。
那windows下面自定义消息的代码一般是什么样子呢?我们这里可以看一段代码,
case (WM_USER+1):hWnd = hWnd;break;case WM_COMMAND:wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections:switch (wmId){case IDM_ABOUT:DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);PostMessage(hWnd, WM_USER+1, 0,0);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}
大家注意这里的消息都是从WM_USER开始定义的,建议大家还是按照windows推荐的macro依次定义本地的app消息。除此之外,这里还用了PostMessage函数。PostMessage和SendMessgae函数差不多,参数都是一样的,唯一的区别就是后者会等待处理结果,而前者是异步处理的。
前面我们说到会独立创建thread来处理低速io操作,那windows一般怎么发送消息给thread呢?其实也简单,只要发送这个函数就可以了,
PostThreadMessage(idThread, Msg, wParam, lParam)
它和SendMessage、PostMessage唯一的区别就是函数的第一个参数变成了idThread,其他都是一样的处理流程。
win32开发(自定义消息)相关推荐
- GCC for Win32开发环境介绍
GCC for Win32开发环境介绍(1) 第一章 在视窗操作系统下的GCC 第一节GCC家族概览 GCC是一个原本用于Unix-like系统下编程的编译器.不过,现在GCC也有了许多Win32下的 ...
- win32开发(对话框启动)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 有过mfc开发经验的朋友都知道,在mfc下面有三种app开发的方式,它分别是mdi开发.sdi开 ...
- win32开发(画笔、刷子、字体)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 因为win32开发基本上都是和windows打交道,这些api其他的os也用不到,所以建议大家在 ...
- win32开发(调试)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 很多同学都喜欢看代码,但是不喜欢调试代码.其实,在我看来,调试代码本身也是一项重要的能力.一份代 ...
- 跟我一起玩Win32开发
跟我一起玩Win32开发(1):关于C++的几个要点 我不知道各位,一提起 C++ ,第一感觉是什么?而据俺的观察,许多人几乎成了 " 谈 C 色变 " .不管是 C 还是 C++ ...
- 跟我一起玩Win32开发(4):创建菜单
跟我一起玩Win32开发(4):创建菜单 也不知道发生什么事情,CSDN把我的文章弄到首页,结果有不少说我在误人子弟,是啊,我去年就说过了,如果你要成为砖家级人物,请远离我的博客,我这个人没什么特长, ...
- 跟我一起玩Win32开发(5):具有单选标记的菜单
跟我一起玩Win32开发(5):具有单选标记的菜单 帅哥们,美女们,下午好,我又来误人子弟,请做好准备. 今天,我们的目的是,想要实现下图中的这种菜单效果. 就是一种类似单选按钮的菜单,多个菜单项中, ...
- 跟我一起玩Win32开发(25):监视剪贴板
跟我一起玩Win32开发(25):监视剪贴板 自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种"门前冷落鞍马稀"的感觉.于是,老邪就拿出<九阴真经>认真阅读,同时用 ...
- win32开发(窗口类和窗口)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 之前虽然也编写win32代码,比如使用visual studio自动生成的win32框架.但是对 ...
最新文章
- C#学习小记12实现一个接口
- 中继器 集线器 网桥 交换机 路由器 网关之间的区别
- 自己在UWP程序上调用usb转串口的路程
- java用栈处理四则运算_Java 用栈处理四则运算
- C# JsonHelper
- 学员使用移动端进行自学的视频动画html,Html5移动端获奖无缝滚动动画实现
- redis使用lua脚本
- Identify ksusetxn DID:An Deadlock ID
- oracle 移动数据文件(装)
- scala求集合相邻元素差值的最小值
- python arduino 蓝牙_树莓和Arduino之间的蓝牙通讯
- istio入门与实战 pdf 下载_Istio实战指南 PDF 下载
- 热度php代码,爬取知乎热度搜索标题并数据分析及可视化(示例代码)
- 安装release版本的apk
- Deep drug-target binding affinity prediction with multiple attention blocks论文解读(二)2021SC@SDUSC
- 更便捷的二维码报修系统
- python制作购物秒杀脚本,以淘宝秒杀脚本为例!
- Mockito3.8 如何mock静态方法 (如何mock PageHelper)
- ABAP BTE增强举例
- The requested resource (Servlet action is not available) is not available.这个问题让我通宵了一个晚上