VC编程Windws消息处理机制、阻塞试验、SetTimer、MessageBox、小心消息响应处理函数多个并存2012_7.pdfVIP

VC编程Windws消息处理机制、阻塞试验、SetTimer、MessageBox、小心消息响应处理函数多个并存2012_7.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC编程Windws消息处理机制、阻塞试验、SetTimer、MessageBox、小心消息响应处理函数多个并存2012_7

VC 编程Windows 消息处理机制、阻塞试验、SetTimer、MessageBox、小心消息响应处理 函数多个并存 wxleasyland@ 2012.7 wxleasyland 试验: VC6 标准WIN32 程序,Windows 消息处理机制: 1.在注册窗口类时,指定了消息处理函数WndProc ()。 2.WinMain ()里有消息循环: while (GetMessage(msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, msg)) { TranslateMessage (msg) ; DispatchMessage(msg) ; } } 3.在WndProc()里,对各个消息进行处理!! l 消息队列是线程所有,并非窗口所有和进程所有。 l 一个线程的所有窗口,比如父窗口 (主窗口)、对话框、 息框等都是使用这 个线程的同一个消息队列!!!! l 窗口有消息循环。窗口里的控件应该就没有消息循环了吧。 试验: 一、MFC 中,用TIMER,发现,在TIMER 响应函数中,用MessageBox(),则会不断 地出现MessageBox。 而且当前响应函数会停止在MessageBox 上,直到MessageBox 返回才继续执行后面 的语句! 用 SendMessage 或 PostMessage 来试消息响应,也是一样:响应函数中有 MessageBox(),则会出现多个MessageBox。 说明MessageBox 阻塞了函数,却没有阻塞消息分发。 二、VC 建 WIN32 程序 (标准HELLO WORLD),试验发现,如果 WndProc ()里有 MessageBox,当前的WndProc()会暂时停止在MessageBox,直到MessageBox 返回才继 续执行后面的语句!! 如果MessageBox 出现,这时一个WM_PAINT 出现了,则会执行一个新的WndProc()。 即WndProc()并行出现了!!线程只有一个, WndProc()可以出现多个! 用ABOUT 对话框代替MessageBox,情况也是一样!ABOUT 对话框出现时,父窗口(即 主程序)点不出来,但父窗口WM_PAINT 能正常运行!!! 即像别的文章说的,对话框和消息框会有自己的消息循环,但线程是同一个线程, 所以线程的所有消息会被分发处理。 三、再试下面程序, void CUnicodewcharDlg::OnButton4() { SendMessage(UM_SOCK); // UM_SOCK 为自定义消息,已经和OnRecv 相关联 } BOOL running=FALSE ; void CUnicodewcharDlg::OnRecv() { if (running==TRUE) {::MessageBox(NULL,ERROR,,MB_OK); return;} running=TRUE ; ::MessageBox(NULL,OK,,MB_OK) ; ::MessageBox(NULL,返回,,MB_OK) ; running=FALSE ; } 发现,按OnButton4 后,先出现一个OK消息框,再点OnButton4,就出现ERROR 消息框。 如果OK消息框关闭了,则不会出现返回消息框,再点 OnButton4,仍是出现 ERROR消息框!!!!!!! 一定要ERROR消息框和OK消息框都关闭了,才会出现返回消息框,再点 OnButton4,才会出现OK消息框!! 说明是: 父窗消息循环,调用消息响应函数生成了第一个消息框,同时父窗调用的消息响应 函数阻塞,父窗消息循环阻塞;第一个消息框开始接手负责消息循环 (是自己有消息循 环还是把父窗的消息循环重入了继续使用?)。 第一个消息框消息循环,调用消息响应函数生成了第二个消息框,同时第一个消息 框调用的消息响应函数阻塞,第一个消息框消息循环阻塞;第二个消息框开始接手负责 消息循环(是自己有消息循环还是把父窗的消息循环重入了继续使用?)。 第二个消息框消息循环。。。 即:父窗阻塞-第一个消息框阻

文档评论(0)

xyl118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档