[MFC]消息机制

[MFC]消息机制

ID:38282486

大小:29.50 KB

页数:4页

时间:2019-06-07

[MFC]消息机制_第1页
[MFC]消息机制_第2页
[MFC]消息机制_第3页
[MFC]消息机制_第4页
资源描述:

《[MFC]消息机制》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、[MFC]消息机制首先,让我们看一下MFC的消息循环部分:(程序取自MFC源程序,由于篇幅,我删去了一些非重要的部分。)MFC的WinMain函数:[c]extern"C"intWINAPI_tWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,intnCmdShow){//callshared/exportedWinMainreturnAfxWinMain(hInstance,hPrevInstance,lpCmdLine,nCmdShow);}intAFXAPIAfxWinM

2、ain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,intnCmdShow){intnReturnCode=-1;CWinApp*pApp=AfxGetApp();//……//Performspecificinitializationsif(!pApp->InitInstance()){//……//初始化实例不成功,通常一个DialogBasedMFC程序必须返回FALSE//这样就可以跳过消息循环。nReturnCode=pApp->ExitInstance();gotoInitFai

3、lure;}nReturnCode=pApp->Run();//进入消息循环部分InitFailure://……//程序结束AfxWinTerm();returnnReturnCode;}intCWinApp::Run(){//……returnCWinThread::Run();//消息循环被封装在CWinThread类里。}intCWinThread::Run(){BOOLbIdle=TRUE;LONGlIdleCount=0;//死循环,只有收到WM_QUIT消息后才会退出。for(;;){while(bIdle&&!::PeekMessage(&m_m

4、sgCur,NULL,NULL,NULL,PM_NOREMOVE)){if(!OnIdle(lIdleCount++))bIdle=FALSE;}//如果消息队列中没有消息,那么就调用OnIdle函数//否则,发送消息do{if(!PumpMessage())//PumpMessage函数仅在收到WM_QUIT消息才返回FALSEreturnExitInstance();//退出死循环if(IsIdleMessage(&m_msgCur)){bIdle=TRUE;lIdleCount=0;}}while(::PeekMessage(&m_msgCur,NUL

5、L,NULL,NULL,PM_NOREMOVE));//这段程序不仅完成了消息的发送,还实现了Idle功能。//GetMessage函数在消息队列中没有消息时,将不会返回,//而是将控制权交给操作系统,直到消息队列中有消息为止。//这段程序在一开始就调用PeekMessage函数来检测消息队列中//是否有消息存在,如果存在就发送消息,//否则就意味着空闲,那么就调用OnIdle函数,//这样做,控制权永远不会交给操作系统。//由于Windows95,NT都是抢占式的操作系统,//系统会自动进行任务切换。//所以不用担心别的程序不会被运行。}}BOOLCWin

6、Thread::PumpMessage(){if(!::GetMessage(&m_msgCur,NULL,NULL,NULL)){//收到WM_QUIT消息,就返回FALSE。returnFALSE;}//否则就发送消息if(m_msgCur.message!=WM_KICKIDLE&&!PreTranslateMessage(&m_msgCur)){::TranslateMessage(&m_msgCur);::DispatchMessage(&m_msgCur);}returnTRUE;}[/c]主程序的流程:[text](程序开始)

7、

8、vWinMai

9、n

10、

11、vAfxWinMain

12、

13、vFALSECWinApp::InitInstance——->退出程序

14、

15、TRUE

16、vCWinApp::Run

17、

18、vCWinThread::Run

19、

20、<—————————-+vFALSE

21、PeekMessage——->OnIdle——–+

22、TRUE

23、

24、<————————-+

25、v

26、

27、GetMessage

28、

29、

30、

31、

32、

33、

34、

35、YESv

36、

37、+—–WM_QUIT消息?

38、

39、

40、

41、

42、

43、

44、

45、NO

46、

47、

48、v

49、

50、

51、TranslateMessage

52、

53、

54、

55、

56、

57、

58、

59、

60、

61、

62、v

63、

64、

65、DispatchMessage

66、

67、

68、

69、

70、

71、

72、

73、

74、

75、

76、vTRUE

77、

78、

79、PeekMe

80、ssage——————>+

81、

82、

83、

84、

85、

86、FALSE

87、

88、

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。