子窗口与父窗口的消息传递

昨天碰到一个问题,如果一个dialog上有一个Edit控件,这时候对Edit输入文字是Edit先得到的按键消息还是父窗口先得到?

如果要拦截一个Edit的回车消息,在没有为Edit派生新的类的情况下,网上大部分的做法是重载父窗口的PreTranlateMessage(),在这里对按键消息进行拦截,但是大部分对这个都没有说明原因。

找了下资料大致的情况就是子窗口与父窗口共用一个消息队列。在按键的时候,GetMessage() 中msg里的hwnd指向的是子窗口,在下面的代码中看到(MFC消息循环),在消息从队列中取出后,在没有分发前,先调用了AfxPreTranslateMessage,在这里面会调到各窗口的PreTranslateMessage(),如果返回TRUE则不分发,如果返回FALSE则交由相应的消息处理函数。(描述粗燥,仅做记录)

 BOOL CWinThread::PumpMessage() 
 { 
  _AFX_THREAD_STATE *pState = AfxGetThreadState(); 
   
  ::GetMessage(&(pState->m_msgCur), NULL, NULL, NULL)) 
   
  if (!AfxPreTranslateMessage(&(pState->m_msgCur))) 
  { 
  	::TranslateMessage(&(pState->m_msgCur)); 
  	::DispatchMessage(&(pState->m_msgCur)); 
  } 
  return TRUE; 
 } 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值