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是删除的),这个循环叫消息循环,目的是为了避免界面停止响应。你可以试一下,去除这个循环,界面就没有反映了。