VC弹出对话框内容显示的问题(MFC)

来源:百度知道 编辑:UC知道 时间:2024/06/21 16:54:18
建立一个基于对话框的MFC应用程序,主对话框A上有一个菜单,实现弹出一个新对话框B的功能,对话框B上有一个combobox控件,但在对话框B的类中初始化函数对combobox控件内容添加不显示。
注:不是combobox控件下拉长度不够的问题。且对主对话框A进行相同操作,内容可以显示。

对话框B类的定义信息:
#if !defined(AFX_CHOOSEDLG_H__46077809_3A06_454E_AD6C_A6086F6DC0E0__INCLUDED_)
#define AFX_CHOOSEDLG_H__46077809_3A06_454E_AD6C_A6086F6DC0E0__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// CHOOSEDlg.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CCHOOSEDlg dialog

class CCHOOSEDlg : public CDialog
{
// Construction
public:
CCHOOSEDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data
//{{AFX_DATA(CCHOOSEDlg)
enum { IDD = IDD_START_CHOOSE };
CComboBox m_combobox;
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA

// Overrides
// ClassWizard generated virtual functi

void CV3Dlg::OnStatusStart()
{
// TODO: Add your command handler code here
CDialog start(IDD_START_CHOOSE);
start.DoModal();
}
你这里有问题。你把
IDD_START_CHOOSE绑定到了CDialog类的对象。而你的初始化在
BOOL CCHOOSEDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_combobox.AddString("test1");
m_combobox.AddString("test2");
m_combobox.SetCurSel(0);

也就是说,你要是用CDialog start(IDD_START_CHOOSE);
这句,你的下拉例表控件跟本就没有初始化。明白?要用楼上几位说的方法才能显示出来控件。希望你明白我说的话了。
例如一楼说的:
CBDlg dlg;
if(dlg.DoModal()==IDOK)
{
//do what you want
}

你在对话框A中怎么创建B对话框的,我试过了没你所说的情况,可以正常显示
CBDlg dlg;
if(dlg.DoModal()==IDOK)
{
//do what you want
}

菜单中对话框的弹出调用有问题,要弹出的对话框是CCHOOSEDlg类,你加入的初始化代码是在父类CCHOOSEDlg中完成的,在调用时用的却是它的基类CDialog,这样虽然不会有编译错误,但实现不了预期的目标。应该是这样:
CCHOOSEDlg start;
start.DoModal();

菜单下的调用函数是这样的吗?
B dlg;
dlg.domodal();
要是这样的话,你