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

Pla*_*oks 0 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

窗户拒绝打开.如果我删除了添加字符串,它工作正常.有任何想法吗?

Sco*_*nes 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;
    }
};
Run Code Online (Sandbox Code Playgroud)