【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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开发(自定义消息)相关推荐

  1. GCC for Win32开发环境介绍

    GCC for Win32开发环境介绍(1) 第一章 在视窗操作系统下的GCC 第一节GCC家族概览 GCC是一个原本用于Unix-like系统下编程的编译器.不过,现在GCC也有了许多Win32下的 ...

  2. win32开发(对话框启动)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 有过mfc开发经验的朋友都知道,在mfc下面有三种app开发的方式,它分别是mdi开发.sdi开 ...

  3. win32开发(画笔、刷子、字体)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 因为win32开发基本上都是和windows打交道,这些api其他的os也用不到,所以建议大家在 ...

  4. win32开发(调试)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 很多同学都喜欢看代码,但是不喜欢调试代码.其实,在我看来,调试代码本身也是一项重要的能力.一份代 ...

  5. 跟我一起玩Win32开发

    跟我一起玩Win32开发(1):关于C++的几个要点 我不知道各位,一提起 C++ ,第一感觉是什么?而据俺的观察,许多人几乎成了 " 谈 C 色变 " .不管是 C 还是 C++ ...

  6. 跟我一起玩Win32开发(4):创建菜单

    跟我一起玩Win32开发(4):创建菜单 也不知道发生什么事情,CSDN把我的文章弄到首页,结果有不少说我在误人子弟,是啊,我去年就说过了,如果你要成为砖家级人物,请远离我的博客,我这个人没什么特长, ...

  7. 跟我一起玩Win32开发(5):具有单选标记的菜单

    跟我一起玩Win32开发(5):具有单选标记的菜单 帅哥们,美女们,下午好,我又来误人子弟,请做好准备. 今天,我们的目的是,想要实现下图中的这种菜单效果. 就是一种类似单选按钮的菜单,多个菜单项中, ...

  8. 跟我一起玩Win32开发(25):监视剪贴板

    跟我一起玩Win32开发(25):监视剪贴板 自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种"门前冷落鞍马稀"的感觉.于是,老邪就拿出<九阴真经>认真阅读,同时用 ...

  9. win32开发(窗口类和窗口)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 之前虽然也编写win32代码,比如使用visual studio自动生成的win32框架.但是对 ...

最新文章

  1. C#学习小记12实现一个接口
  2. 中继器 集线器 网桥 交换机 路由器 网关之间的区别
  3. 自己在UWP程序上调用usb转串口的路程
  4. java用栈处理四则运算_Java 用栈处理四则运算
  5. C# JsonHelper
  6. 学员使用移动端进行自学的视频动画html,Html5移动端获奖无缝滚动动画实现
  7. redis使用lua脚本
  8. Identify ksusetxn DID:An Deadlock ID
  9. oracle 移动数据文件(装)
  10. scala求集合相邻元素差值的最小值
  11. python arduino 蓝牙_树莓和Arduino之间的蓝牙通讯
  12. istio入门与实战 pdf 下载_Istio实战指南 PDF 下载
  13. 热度php代码,爬取知乎热度搜索标题并数据分析及可视化(示例代码)
  14. 安装release版本的apk
  15. Deep drug-target binding affinity prediction with multiple attention blocks论文解读(二)2021SC@SDUSC
  16. 更便捷的二维码报修系统
  17. python制作购物秒杀脚本,以淘宝秒杀脚本为例!
  18. Mockito3.8 如何mock静态方法 (如何mock PageHelper)
  19. ABAP BTE增强举例
  20. The requested resource (Servlet action is not available) is not available.这个问题让我通宵了一个晚上

热门文章

  1. 编程语言发展史上有哪些趣事?
  2. Android的手机震动
  3. 将android中如何调整Toast位置?
  4. DevExpress.XtraGrid 导出文本的bug
  5. Pixel Bender 之 Flex 特效使用
  6. 两个整数集合的交集 ———— 腾讯2014软件开发笔试题目
  7. P3185 [HNOI2007]分裂游戏
  8. Java 学习路线之四个阶段
  9. SDN期末作业——负载均衡
  10. unity游戏教程 space shooter (游戏控制器)