随笔 - 15  文章 - 5  trackbacks - 0
<2011年9月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

  • 1. re: 2011年9月26日[未登录]
  • 我不是吹嘘,为什么1,2,3,4,5,7,9,10,11,12我都知道一点????
    看来我估计可以过电面啊~_~
  • --ZJ
  • 2. re: 2011年9月26日
  • 有计划的人生会很精彩。。
  • --Cheap glueless lace front wigs
  • 3. re: 2011年9月26日
  • (14)举个例子说明你学习能力比较强,
    牛!

    那个腾讯就是做QQ的吧,QQ里面还内嵌个木马,有事没事的扫描下用户磁盘,唉,公司技术就这鸟水平,还对应聘者提那么多要求。
  • --Chipset
  • 4. re: 2011年9月26日
  • 问这么多问题,要求不低啊,呵呵,要回答好需要很扎实的基础
  • --LoveBeyond
  • 5. re: 2011年9月26日
  • 这些问题我十有八九答不上来...惭愧啊
  • --pezy

阅读排行榜

评论排行榜

消息处理过程:
1消息定义:
消息简单的说就是指通过输入设备向程序发出指令要执行某个操作。具体的某个操作就是已经写好的代码,成为消息处理函数。
为何要引进消息映射。一个程序往往拥有多个窗体,主窗口就算一个,其他菜单工具栏等等子窗口,那需要写多少个switchcase语句,所以MFC采用了消息映射机制,利用一个数组,将窗口消息和相对应的消息处理函数进行映射,可以理解成这个是一个表,该机制叫消息映射
AFX_MSGMAP可以得到基类的消息映射入口地址和得到本身的消息映射入口地址。
2消息种类:
(1)windows消息,主要包含WM_开头的消息,WM_COMMAND消息除外,由窗口和视图处理,此类消息带有确定如何处理消息的参数。
(2)控件通知,此类消息包含从控件和其他子窗口发送到其父窗口的WM_COMMAND通知消息,
(3)命令消息,包含了用户界面对象发出的WM_COMMAND通知消息,
其中windows消息和控件通知消息由窗口来处理,CFrameWnd,CMDIFrameWnd,CMDIChildWnd,CView,CDialog
命令消息更广的是对象处理
形式如下:ON_COMMAND(id,memberFxn);
对于通知消息,例如树形控件是ON_CONTROL(EN_CHANGE,id,memberFxn);
3消息处理过程
MFC消息处理过程如下:
(1)_AfxCbtFilterHook()截获消息(这个是一个钩子函数);
(2)_AfxCbtFilterHook()把窗口过程设定为AfxWndProc();
(3)函数AfxWndProc()接收windows操作系统的发送的消息。
(4)函数AfxWndProc()调用函数AfxCallWndProc()进行消息处理;
(5)函数AfxCallWndProc()调用CWnd类的方法WindowProc进行消息处理。
4添加用户自定义消息处理函数
第一步,定义消息,#define WM_MYMESSAGE (WM_USER+100)
第二步,实现消息处理函数,该函数使用WPRAM和LPARAM参数,并返回LPRESULT
LPRESULT CMainFrame::OnMyMessage(WPARAM wParam,LPARAM lParam)
{
 return 0;
}
第三步:在类头文件中的FX_MSG块中说明消息处理函数
形式如下
afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam)
第四步。在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。
ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
可以看出来,用户定义的消息和通过classwizard添加的消息一样。
5windows消息循环机制
windows消息函数
从消息队列中取出消息
在MSDN中PeekMessage的定义
BOOL PeekMessage
The PeekMessage function checks a thread message queue for a message and places the message (if any) in the specified structure.

BOOL PeekMessage(
  LPMSG lpMsg,         // pointer to structure for message
  HWND hWnd,           // handle to window
  UINT wMsgFilterMin,  // first message
  UINT wMsgFilterMax,  // last message
  UINT wRemoveMsg      // removal flags
);
从线程消息队列中取出一个消息
GetMessage
The GetMessage function retrieves a message from the calling thread's message queue and places it in the specified structure. This function can retrieve both messages associated with a specified window and thread messages posted via the PostThreadMessage function. The function retrieves messages that lie within a specified range of message values. GetMessage does not retrieve messages for windows that belong to other threads or applications.

BOOL GetMessage(
  LPMSG lpMsg,         // address of structure with message
  HWND hWnd,           // handle of window
  UINT wMsgFilterMin,  // first message
  UINT wMsgFilterMax   // last message
);

如果把2,3,4设置为null或者0,表示接受本程序的所有消息
还要注意上面两者的区别,
都是比较基础的东西,

posted on 2011-09-25 10:43 mengkai 阅读(298) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理