WIN32 API/WTL 學習筆記(訊息傳遞過程)

來源:互聯網
上載者:User
  • 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中斷掛接方式一層層處理

未完,待續。

如有錯誤請指正

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.