- 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中斷掛接方式一層層處理
未完,待續。
如有錯誤請指正