win32开发(自定义消息)
来源:互联网 发布:埃摩森猎头公司 知乎 编辑:程序博客网 时间:2024/06/07 07:37
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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开发(自定义消息)
- win32开发(消息机制)
- win32开发(按键消息)
- win32 用户自定义消息范围
- MFC和win32自定义消息
- (win32)键盘消息
- win32消息映射(1)
- win32消息映射(2)
- Directx(Win32消息机制)
- Win32消息
- win32 消息
- Win32消息
- Win32消息
- win32消息
- win32 消息
- win32开发(调试)
- win32开发(鼠标)
- win32开发(定时器)
- 设计模式之——策略模式
- 中文乱码处理
- 数据结构学习日志--排序算法
- [LC][array][Binary Search] 278. First Bad Version
- [C/C++]OJ练习题:Z字形扫描(Zigzag Scan) 更好的解题思路
- win32开发(自定义消息)
- echarts基础应用
- LINUX-进程间通信(三、共享存储)
- Ubuntu 16.04 配置PHP+Apache2
- SQL反模式(前言)
- VMware下安装CentOs 7(下)
- 2017年编程的开始
- 文件操作(偏移量)
- 在调用API之前,你需要理解的LSTM工作原理