所以我有这个代码
CButton details;
details.Create(_T("details"),WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_PUSHBUTTON,CRect(120,100,100,30), this, 15000);
但它什么也没做(创建的按钮在创建后不可见)。我错过了什么?
编辑:代码位于基于对话框的应用程序的 OnInitDialog 函数中。它应该做的是显示按钮。
您的 CButton 是使用自动存储持续时间创建的。所以它在 OnInitDialog 返回时被销毁。(这是在对话框可见之前。)改为将 CButton 设为成员变量。
您提供的值CRect
不正确,它必须是CRect(120, 100, 220, 130)
。
这取决于声明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
.
我的经验:如果您的对话框是从 CDHtmlDialog 继承的,则不会显示任何内容,但可以正常使用普通 CDialog。所以改变 OnInitDialog() 中的第一行
//CDHtmlDialog::OnInitDialog(); CDialog::OnInitDialog();
当然,按钮变量应该是全局或类成员,而不是本地的。