在运行时从 MFC 中的派生类中添加控件

Posted

技术标签:

【中文标题】在运行时从 MFC 中的派生类中添加控件【英文标题】:Adding controls at runtime in from derived class in MFC 【发布时间】:2013-06-13 05:27:07 【问题描述】:

我有两节课。 DialogBase 类继承自 CDialog DialogDerived 类继承自 DialogBase。

BOOL DialodDervied::OnInitDialog()

     CDialogBase::OnInitDialog();
     //Add Dynamic Control to Main Dialog from here

我想在通过派生类调用对话框(CDialogBase)时动态添加一个复选框。是否可以?如果是,怎么做?

【问题讨论】:

【参考方案1】:

声明一个成员变量CButton m_ctrl_chk,覆盖DialodDervied::OnCreate()并添加类似代码

int DialodDervied::OnCreate(LPCREATESTRUCT lpCreateStruct)
    if (CDialogEx::OnCreate(lpCreateStruct) == -1)
        return -1;

    m_ctrl_chk.Create(_T("Checkmate"), WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_AUTOCHECKBOX,
        CRect(5, 5, 100, 20), this, 1234); // the 1234 value is the ID of the control

    return 0;

使用类似的类(CEditCStaticCButton、...)以相同的方式创建其他类型的控件。

【讨论】:

以上是关于在运行时从 MFC 中的派生类中添加控件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CWinThread 派生类中正确创建 CDialog 框

如何知道 CDialog 派生类中的焦点何时更改

MFC自己派生的CButton类如何添加鼠标单击事件响应函数

焦点不会改变嵌套 CWnd 派生类中的制表键

C ++ - 在运行时从基类指针识别派生类

MFC:在派生的 CEdit 中没有收到 EN_CHANGE 消息