教程:http://www.cnblogs.com/Alberl/p/3343610.html
邓学彬博客导航帖:http://blog.csdn.net/cometnet/article/details/12448339
这一节的重点:
①要处理控件的通告消息,需调用 m_PaintManager.AddNotifier(this); 为当前的窗口添加通告消息处理。
②CControlUI是所有空间的super类。
③控件用name来区别,在 Notify 函数中可以通过 msg.pSender->GetName() 取到空间名称。
④Notify中可通过 msg.sType 取到 通告消息类型。
未搞明白的地方是我加了两个空间,但是后面一个把前面一个盖住了,得继续往下学习。
test2.cpp:
// test2.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "test2.h"
class CDuiFrameWnd : public CWindowWnd, public INotifyUI
{
public:
virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); }
virtual void Notify(TNotifyUI& msg)
{
if (msg.sType == _T("click"))
{
if (msg.pSender->GetName()==_T("btn1"))
{
::MessageBox(NULL,_T("Button1"),_T("btn1"),MB_OK);
}
if (msg.pSender->GetName()==_T("btn2"))
{
::MessageBox(NULL,_T("Button2"),_T("btn2"),MB_OK);
}
}
}
virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LRESULT lRes = 0;
if( uMsg == WM_CREATE )
{
CControlUI *pWnd = new CButtonUI;
pWnd->SetName(_T("btn1"));
pWnd->SetText(_T("Button1")); // 设置文字
pWnd->SetBkColor(0xFF00FF00); // 设置背景色
CControlUI *pWnd2=new CButtonUI;
pWnd2->SetName(_T("btn2"));
pWnd2->SetText(_T("Button2"));
pWnd2->SetBkColor(0XFFFFFF00);
m_PaintManager.Init(m_hWnd);
m_PaintManager.AttachDialog(pWnd);
m_PaintManager.AttachDialog(pWnd2);
m_PaintManager.AddNotifier(this);
return lRes;
}
if( m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes) )
{
return lRes;
}
return __super::HandleMessage(uMsg, wParam, lParam);
}
protected:
CPaintManagerUI m_PaintManager;
};
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
CPaintManagerUI::SetInstance(hInstance);
CDuiFrameWnd duiFrame;
duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
duiFrame.ShowModal();
return 0;
}
效果图: