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

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

4

1 回答 1

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;
    }
};
于 2013-05-22T00:07:47.263 回答