WTL中如何子类化控件(转帖)
来源:互联网 发布:上海行知教育 英语培训 编辑:程序博客网 时间:2024/06/08 10:35
文章分类:C++编程
在开发中,大部分情况控件是直接通过rc文件创建的,但也有时候需要在程序中通过CreateWindow来创建控件,下面以Button控件为例说明子类化控件的两种方法。
方法一:使用DDX
方法二:使用SubclassWindow
- class CButtonImpl : public CWindowImpl<CButtonImpl, CButton>
- {
- public:
- CButtonImpl(void)
- {
- }
- ~CButtonImpl(void)
- {
- }
- BEGIN_MSG_MAP(CButtonImpl)
- MESSAGE_HANDLER(WM_GETDLGCODE, OnGetDlgCode)
- DEFAULT_REFLECTION_HANDLER()
- END_MSG_MAP()
- ……
- };
方法一:使用DDX
- class CTestDlg : public CDialogImpl<CTestDlg>, public CWinDataExchange<CTestDlg>
- {
- BEGIN_MSG_MAP(CTestDlg)
- MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
- END_MSG_MAP()
- BEGIN_DDX_MAP(CTestDlg)
- DDX_CONTROL(IDC_BUTTON, m_button)
- END_DDX_MAP()
- ……
- CButtonImpl m_button;
- }
- LRESULT CTestDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
- {
- DoDataExchange(FALSE);
- return bHandled = FALSE;
- }
方法二:使用SubclassWindow
- class CTestDlg : public CDialogImpl<CTestDlg>
- {
- BEGIN_MSG_MAP(CTestDlg)
- MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
- END_MSG_MAP()
- ……
- CButtonImpl m_button;
- }
- LRESULT CTestDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
- {
- // 程序中创建Button
- HWND hButton = CreateWindow(TEXT("BUTTON"), _T("test"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 0, 0, 0, 0, m_hWnd, (HMENU)0, hInst, 0);
- // 子类化
- m_button.SubclassWindow(hButton );
- }
- WTL中如何子类化控件(转帖)
- WTL下如何子类化控件
- WTL下如何子类化控件
- WTL的窗口子类化与超类化
- 在WTL中实现Spin control控件(使用SetBuddy)
- 在WTL中实现Spin control控件(使用SetBuddy)
- WTL中封装的控件类
- wtl对话框中嵌入ie控件
- 控件子类化
- 子类化控件
- MFC-- 子类化控件
- MFC子类化控件
- WTL-窗口超类化(superclassing),窗口子类化(subclassing)
- VC控件-子类化控件
- 子类化实现DialogBox中Edit控件的WM_CHAR消息
- WTL如何在工程中使用bkwin
- WTL中CStatic如何接收鼠标事件
- WTL入门(4)--- 对话框和控件
- 求助!!!!!!!!!
- c#_虚方法和重写
- Linux下 /proc/maps 文件分析
- ASP里连接ORACLE找不到驱动的问题
- 2011-3-9
- WTL中如何子类化控件(转帖)
- 佛曰:放下
- 工具栏 放在任意位置,且不能移动(如有分割条则不行)
- Move another blog here
- matlab里删除矩阵一些列的函数
- WebConfig(数据库连接)
- linux read() 函数
- 11款有用的Web开发在线工具
- 作为软件开发人员应该知道的问题