C ++ MFC - 将字符串添加到组合框可防止窗口打开

时间:2013-05-21 23:40:45

标签: c++ mfc

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");
    }
}

窗口拒绝打开。如果我删除了添加字符串,它工作正常。有什么想法吗?

1 个答案:

答案 0 :(得分:8)

我很惊讶您的代码没有崩溃。在您调用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;
    }
};