VC弹出对话框内容显示的问题(MFC)
建立一个基于对话框的MFC应用程序,主对话框A上有一个菜单,实现弹出一个新对话框B的功能,对话框B上有一个combobox控件,但在对话框B的类中初始化函数对combob...
建立一个基于对话框的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 function overrides
//{{AFX_VIRTUAL(CCHOOSEDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CCHOOSEDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_CHOOSEDLG_H__46077809_3A06_454E_AD6C_A6086F6DC0E0__INCLUDED_)
对话框B类的内容:
// CHOOSEDlg.cpp : implementation file
//
#include "stdafx.h"
#include "V3.h"
#include "CHOOSEDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCHOOSEDlg dialog
CCHOOSEDlg::CCHOOSEDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCHOOSEDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCHOOSEDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CCHOOSEDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCHOOSEDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
DDX_Control(pDX, IDC_COMBO1, m_combobox);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCHOOSEDlg, CDialog)
//{{AFX_MSG_MAP(CCHOOSEDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCHOOSEDlg message handlers
BOOL CCHOOSEDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_combobox.AddString("test1");
m_combobox.AddString("test2");
m_combobox.SetCurSel(0);
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
combobox控件中不显示“test1”、“test2”两行。
对话框A菜单中实现弹出对话框B命令为:
void CV3Dlg::OnStatusStart()
{
// TODO: Add your command handler code here
CDialog start(IDD_START_CHOOSE);
start.DoModal();
}
直接在对话框A中添加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 function overrides
//{{AFX_VIRTUAL(CCHOOSEDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CCHOOSEDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_CHOOSEDLG_H__46077809_3A06_454E_AD6C_A6086F6DC0E0__INCLUDED_)
对话框B类的内容:
// CHOOSEDlg.cpp : implementation file
//
#include "stdafx.h"
#include "V3.h"
#include "CHOOSEDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCHOOSEDlg dialog
CCHOOSEDlg::CCHOOSEDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCHOOSEDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCHOOSEDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CCHOOSEDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCHOOSEDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
DDX_Control(pDX, IDC_COMBO1, m_combobox);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCHOOSEDlg, CDialog)
//{{AFX_MSG_MAP(CCHOOSEDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCHOOSEDlg message handlers
BOOL CCHOOSEDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_combobox.AddString("test1");
m_combobox.AddString("test2");
m_combobox.SetCurSel(0);
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
combobox控件中不显示“test1”、“test2”两行。
对话框A菜单中实现弹出对话框B命令为:
void CV3Dlg::OnStatusStart()
{
// TODO: Add your command handler code here
CDialog start(IDD_START_CHOOSE);
start.DoModal();
}
直接在对话框A中添加combobox控件,初始化添加信息可以显示。 展开
4个回答
展开全部
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
}
{
// 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
}
CBDlg dlg;
if(dlg.DoModal()==IDOK)
{
//do what you want
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
菜单中对话框的弹出调用有问题,要弹出的对话框是CCHOOSEDlg类,你加入的初始化代码是在父类CCHOOSEDlg中完成的,在调用时用的却是它的基类CDialog,这样虽然不会有编译错误,但实现不了预期的目标。应该是这样:
CCHOOSEDlg start;
start.DoModal();
CCHOOSEDlg start;
start.DoModal();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
菜单下的调用函数是这样的吗?
B dlg;
dlg.domodal();
要是这样的话,你的代码没问题,应该能显示的.
另外菜单最好跟APP类关联起来.
B dlg;
dlg.domodal();
要是这样的话,你的代码没问题,应该能显示的.
另外菜单最好跟APP类关联起来.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询