- 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中断挂接方式一层层处理
未完,待续。
如有错误请指正