首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

AbortProc中的PeekMessage有什么用处?解决思路

2012-02-16 
AbortProc中的PeekMessage有什么用处?您好!我正在看《windows程序设计》“使用打印机”一章。书中说为了便于用

AbortProc中的PeekMessage有什么用处?
您好!

我正在看《windows程序设计》“使用打印机”一章。书中说为了便于用户随时中止打印,windows提供SetAbortProc   来引出一个AbortProc回调函数。AbortProc返回TRUE表示可继续打印,返回FALSE的话windows就会中止打印。

BOOL   CALLBACK   AbortProc   (HDC   hdcPrn,   int   iCode)              
{          
      MSG       msg   ;
      while   (PeekMessage   (&msg,   NULL,   0,   0,   PM_REMOVE))
      {
          TranslateMessage   (&msg)   ;
               
          DispatchMessage   (&msg)   ;
      }
      return   TRUE   ;
}
不管是这个函数,还是书中后面的一些添加了其它代码的AbortProc,其最终的返回值(TRUE或FALSE)与PeekMessage无关!只不过如果PeekMessage检测到消息后,循环继续,此回调函数不能立即返回。

从MSDN上查,PeekMessage是此函数必需的,我猜想PeekMessage是为windows服为的,程序员必需无条件把PeekMessage写到AbortProc中。不知我想的对不对。

[解决办法]
应该是在打印的过程中Windows会调用你的AbortProc 函数.

[解决办法]
PeekMessage是检查消息队列,但是不从消息队列中删除(GetMessage是删除的),这个循环叫消息循环,目的是为了避免界面停止响应。你可以试一下,去除这个循环,界面就没有反映了。

热点排行