void _LayersDialog::OnBnClickedRenameGroup()
{
    LOG("CLICKED ON RENAME GROUP\n");
    _LayersNameDialog name_dlg;

    CComboBox* pComboBox = (CComboBox*)name_dlg.GetDlgItem(IDC_LAYERRENAME_COMBO);

    pComboBox->AddString("moose");

    // open the rename window
    if (name_dlg.DoModal() == IDOK)
    {
        LOG("HIT OK");
    }
}


窗户拒绝打开。如果我删除addstring,它可以正常工作。有任何想法吗?

最佳答案

我很惊讶您的代码没有崩溃。在调用DoModal之前,该对话框不存在,并且该对话框也不应该有任何子控件。您应该在处理程序中为WM_INITDIALOG(带有基于MFC的对话框的OnInitDialog)初始化子控件。

class _LayersNameDialog : public CDialog
{
    //  See: http://msdn.microsoft.com/en-us/vstudio/fwz35s59(v=vs.110)
    BOOL OnInitDialog() override
    {
        CDialog::OnInitDialog();
        CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_LAYERRENAME_COMBO);
        pComboBox->AddString("moose");
        return TRUE;
    }
};

09-30 00:21