VC++对话框程序问题
VC++新建一CDialog类A,这类(即A类)中有CComboBox类成员,如何初始呢?(必须使用SetCurSel()函数)且在(VC++对话框程序(相对于单文档和多...
VC++新建一CDialog类A,这类(即A类)中有CComboBox类成员,如何初始呢?(必须使用SetCurSel()函数)且在(VC++对话框程序(相对于单文档和多文档程序))的(那个默认生成的对话框类B)中使用一个Button,当点击这个Button时,使用DoModal()函数调用A类对话框,当点击A类中的OK时,B类使用A类更新的数据,点cancel时,B类使用没有更新的数据(哇塞娆死我了)并且在下一次点击Button是A类的CComboBox成员是上次设置的值.试过很多办法,就是初始化不成功,(即不管怎样修改CComboBox的数据,数据总是初始化的值)怎么办啊,谢谢
有些问题用程序说明更好一些:
BOOL CDialog1::OnInitDialog() //CDialog1传说中的A类
{
CDialog::OnInitDialog();
m_c_CMB_1.SetCurSel(2);(m_c_CMB_1就是我要初始化的CMB类的控件)
return TRUE;
}
void CDlgDomodulTestDlg::OnButton1()
//CDlgDomodulTestDlg传说中的B类
{
static CDialog1 dlg1;
if(IDOK==dlg1.DoModal())
{
CString str;
str.Format("i1=%d",dlg1.i1);
MessageBox(str);
}
}
//当点击Button1时,修改值保存
谢谢 展开
有些问题用程序说明更好一些:
BOOL CDialog1::OnInitDialog() //CDialog1传说中的A类
{
CDialog::OnInitDialog();
m_c_CMB_1.SetCurSel(2);(m_c_CMB_1就是我要初始化的CMB类的控件)
return TRUE;
}
void CDlgDomodulTestDlg::OnButton1()
//CDlgDomodulTestDlg传说中的B类
{
static CDialog1 dlg1;
if(IDOK==dlg1.DoModal())
{
CString str;
str.Format("i1=%d",dlg1.i1);
MessageBox(str);
}
}
//当点击Button1时,修改值保存
谢谢 展开
展开全部
你的问题其实很简单的,几乎没有难度可言!
我觉得你连这样的问题都想不出个解决办法,或没有什么思路,只能说明你看的代码太少了,对C++(你的问题不能算是MFC的问题)还不熟悉。
给个问题思考逻辑吧:
static CDialog1 dlg1这行,明显定义了个局部类,既然局部类最终会被销毁,因此由局部类所创建的那个窗口(不管是不是对话框,什么模态不模态都一样)做的任何修改都不应该在局部类里的成员变量里保存起来,因为类都消失了,哪来的成员变量。因此下次再重新定义个局部类,窗口初始化代码里(OnInitDialog里响应),不可能用成员变量对窗口进行初始化(也就是无法显示上次该对话框里任何控件所做的任何设置),上次做的修改你保存在哪里呢,成员变量已经重新被初始化了呀。
因此,上次做的修改只能保存在其它地方,譬如创建这个局部类的那个类(B类里),可以在局部类返回时,立刻将局部类做的设置赋值给B类的成员变量,然后下次再创建这个局部类时,再把B类成员变量保存的值再传给这个局部类,然后再调用DoModal创建窗口。
局部类做的设置外传给B类,以及B类再重新回传给局部类,这样的编程技巧应该会吧!?可以在局部类里定义个成员变量,这个变量就是用来与B类进行通信的,但建议不要用PUBLIC定义这个成员变量,而应该在局部类里定义一对PUBLIC成员函数,一个是BOOL SetInitValue(xxx),一个是xxx GetModifiedValue(),这两个函数是给B类调用的,以便能方便与局部类通信。
最后在局部类使用DoModal的时候必要调用InitDialog函数,这个时候因为这个局部类里有个成员变量已经被B类给设置过了,因此在InitDialog里可以轻松地为窗口做上次调用的各种设置。
思路应该很简单吧,你没想到,只是因为你的C++没学好。至于那个static我明白你的意思,不让那个变量消失嘛!但,一般做程序的,好像都不会立刻想到用static的,因为像你这样的场合,熟练的程序员可能考虑都不用考虑什么static。而且,解决初始化的问题还有好多好多办法呢!多阅读别人的代码,会有提高的,只是时间问题,坚持下来你就是高手!!
我觉得你连这样的问题都想不出个解决办法,或没有什么思路,只能说明你看的代码太少了,对C++(你的问题不能算是MFC的问题)还不熟悉。
给个问题思考逻辑吧:
static CDialog1 dlg1这行,明显定义了个局部类,既然局部类最终会被销毁,因此由局部类所创建的那个窗口(不管是不是对话框,什么模态不模态都一样)做的任何修改都不应该在局部类里的成员变量里保存起来,因为类都消失了,哪来的成员变量。因此下次再重新定义个局部类,窗口初始化代码里(OnInitDialog里响应),不可能用成员变量对窗口进行初始化(也就是无法显示上次该对话框里任何控件所做的任何设置),上次做的修改你保存在哪里呢,成员变量已经重新被初始化了呀。
因此,上次做的修改只能保存在其它地方,譬如创建这个局部类的那个类(B类里),可以在局部类返回时,立刻将局部类做的设置赋值给B类的成员变量,然后下次再创建这个局部类时,再把B类成员变量保存的值再传给这个局部类,然后再调用DoModal创建窗口。
局部类做的设置外传给B类,以及B类再重新回传给局部类,这样的编程技巧应该会吧!?可以在局部类里定义个成员变量,这个变量就是用来与B类进行通信的,但建议不要用PUBLIC定义这个成员变量,而应该在局部类里定义一对PUBLIC成员函数,一个是BOOL SetInitValue(xxx),一个是xxx GetModifiedValue(),这两个函数是给B类调用的,以便能方便与局部类通信。
最后在局部类使用DoModal的时候必要调用InitDialog函数,这个时候因为这个局部类里有个成员变量已经被B类给设置过了,因此在InitDialog里可以轻松地为窗口做上次调用的各种设置。
思路应该很简单吧,你没想到,只是因为你的C++没学好。至于那个static我明白你的意思,不让那个变量消失嘛!但,一般做程序的,好像都不会立刻想到用static的,因为像你这样的场合,熟练的程序员可能考虑都不用考虑什么static。而且,解决初始化的问题还有好多好多办法呢!多阅读别人的代码,会有提高的,只是时间问题,坚持下来你就是高手!!
展开全部
请你注意,对于控件的初始化是不能在构造方法中执行的,因为这个时候窗口都没有生成,初始化控件其实没有意义。
你应当在CDialog的OnInitDialog中使用SetCurSel之类的函数
void CDlgDomodulTestDlg::OnButton1()函数中static CDialog1 dlg1;
去掉static以后也许能解决问题
你应当在CDialog的OnInitDialog中使用SetCurSel之类的函数
void CDlgDomodulTestDlg::OnButton1()函数中static CDialog1 dlg1;
去掉static以后也许能解决问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不清楚
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询