动态创建的按钮不会显示在mfc中

时间:2013-11-24 17:45:15

标签: mfc cbutton

所以我有这个代码

CButton details;
details.Create(_T("details"),WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_PUSHBUTTON,CRect(120,100,100,30), this, 15000);

但它没有做任何事情(创建后创建的按钮不可见)。我错过了什么?

编辑:代码位于基于对话框的应用程序的OnInitDialog函数中。它应该做的是显示按钮。

4 个答案:

答案 0 :(得分:3)

您的CButton是使用自动存储持续时间创建的。所以它在OnInitDialog返回时被销毁。 (在对话框可见之前。)将CButton改为成员变量。

答案 1 :(得分:0)

您提供的CRect下的值不正确,必须为CRect(120, 100, 220, 130)

答案 2 :(得分:0)

这取决于声明CButton details;! 您必须将CButton details;声明为一般实例(不是本地实例)

将您的CButton details;实例定义为常规,因此您的问题将会解决! 波纹管代码工作100%:

#define BBB 10000
CButton c;
void CThreadsDlg::OnBnClickedButton1()
{
    bool a = c.Create(_T("new button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(100, 100, 220, 230), this, BBB);
}

如果创建了c按钮,则a变量将为true

答案 3 :(得分:0)

我的经验:如果你的对话框是从CDHtmlDialog继承而没有显示,但是对于普通的CDialog工作正常。因此,更改OnInitDialog()

中的第一行

//CDHtmlDialog::OnInitDialog();
CDialog::OnInitDialog();

当然,按钮变量应该是全局或类成员,而不是本地成员。