WIN32 API/WTL 学习笔记(消息传递过程)

  • ToolBar 图片背景透明色是75%灰色RGB(192,192,192)
  • 使用派生类控件必须使用SubClassWindow方式
  • 消息传递过程分析(除Modal对话框)

消息泵:

Messageloop::Run

 {
  BOOL bDoIdle = TRUE;
  int nIdleCount = 0;
  BOOL bRet;

  for(;;)
  {
   while(bDoIdle && !::PeekMessage(&m_msg, NULL, 0, 0, PM_NOREMOVE))
   {
    if(!OnIdle(nIdleCount++))
     bDoIdle = FALSE;
   }

   bRet = ::GetMessage(&m_msg, NULL, 0, 0);

   if(bRet == -1)
   {
    ATLTRACE2(atlTraceUI, 0, _T("::GetMessage returned -1 (error)/n"));
    continue;   // error, don't process
   }
   else if(!bRet)
   {
    ATLTRACE2(atlTraceUI, 0, _T("CMessageLoop::Run - exiting/n"));
    break;   // WM_QUIT, exit message loop
   }

   if(!PreTranslateMessage(&m_msg)) //调用从MessageFilter继承且注册到MessageLoop的窗口的pretranslate方法,按顺序
   {
    ::TranslateMessage(&m_msg);//快捷键转换
    ::DispatchMessage(&m_msg);//分发到对应窗口
   }

   if(IsIdleMessage(&m_msg))//空闲处理调用
   {
    bDoIdle = TRUE;
    nIdleCount = 0;
   }
  }

  return (int)m_msg.wParam;
 }

窗口子类化过程分析:

主要是宏

DECLARE_WND_SUPERCLASS(_T("WTL_CheckListView"), GetWndClassName())

声明了父窗口类,在ATL::CWindowImpl<T>::SubClassWindow内部设置defwindowproc为父类

通过类似dos中断挂接方式一层层处理

未完,待续。

如有错误请指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值