| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1513 人关注过本帖
标题:[求助]关于控件变量的调用(添加了一些个人观点)
只看楼主 加入收藏
jbwang
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-5-22
收藏
 问题点数:0 回复次数:7 
[求助]关于控件变量的调用(添加了一些个人观点)
if(IDOK==dlg.DoModal())
{
UpdateData();
CString art[5];
for(int j=0;j<5;j++)
if(i<dlg.m_artlist.GetCount())
{
dlg.m_artlist.GetText(1,art[j]);
}
else
art[j]=_T("");
}
不好意思,我说错了。问题是这样的:我自定义对话框类CMacthInfo dlg; 而m_artlist是该对话框类的CListBox的控件变量。我在CView类中调用该类,在执行时发现上面代码中的m_artlist时,总是出错,但是编译时没有报错。我用单步跟踪,发现上面代码中的dlg.m_artlist是空的,但是dlg的其他值变量都是我输入的值。根据错误指示我在include中找出这个语句:
_AFXWIN_INLINE int CListBox::GetCount() const
{ ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, LB_GETCOUNT, 0, 0); }

[此贴子已经被作者于2007-11-16 10:54:25编辑过]

搜索更多相关主题的帖子: 变量 控件 观点 
2007-11-15 23:20
jbwang
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-5-22
收藏
得分:0 

今天突然有个想法,大家看看是否准确。

IDOK==dlg.DoModal()这一句,是显示对话框,当用户更改完对话框内容,并点击“确定”后,对话框就关闭了,并且更新对话框中变量的值。所以值变量的值被更新并保留(因为对话框的实例没有销毁,所以值变量继续存在),但是对于控件变量,因为对话框已经关闭,所以对话框的句柄已经都是空了,当然控件变量也不存在了,无法对对话框中的控件进行操作了。

是不是这样的,大家看看!

2007-11-16 10:53
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
m_artlist是否已赋初值了

=×&D o I p R e E n C g T l X&×=
2007-11-16 11:37
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
应该不会这样吧,只是窗口关闭了,并没有销毁,所有窗口中控件应该是在对话框销毁时才释放吧。。。。
DoModal返回的对话框我认为相当于ShowWindow(SW_HIDE),不过我没具体测试过,到底怎么样就看楼主测试才能知道了

2007-11-16 11:43
zzj233
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2007-6-14
收藏
得分:0 
{
UpdateData();
for(int j=0;j<5;j++)
if(j<dlg.m_artlist.GetCount())
{
dlg.m_artlist.GetText(1,art[j]);
}
else
art[j]=_T("");
}
将这段代码放入CMacthInfo::OnOK()中,并且CString art[5]要定义成全局变量

我不是个随便的人
2007-11-16 22:52
jbwang
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-5-22
收藏
得分:0 

我不知道DoModal()自身是怎么实现的。但是MSDN上说:
If the user clicks one of the pushbuttons in the dialog box, such as OK or Cancel, a message-handler member function, such as OnOK or OnCancel, is called to attempt to close the dialog box. The default OnOK member function will validate and update the dialog-box data and close the dialog box with result IDOK, and the default OnCancel member function will close the dialog box with result IDCANCEL without validating or updating the dialog-box data. You can override these message-handler functions to alter their behavior.
调用DoModal()是要关闭窗体。所以我就改成zzj233说的那样,把代码放在CMacthInfo::OnOK()中了。

但是还是想得到这些控件变量,所以想改成非模式的对话框,现在不知道在填写完对话框后,对话框类怎么通知另一个类自己已经填写完成了?
可以发送消息吗?

2007-11-16 23:12
zzj233
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2007-6-14
收藏
得分:0 

将CMacthInfo类该为非模式对话框,改变OK按纽的ID,如改为IDC_BUTTON_OK,在该按纽上加代码

this->ShowWindow(SW_HIDE);

这样窗口只是被隐藏,控件变量的窗口句柄仍然有效,可正常使用


我不是个随便的人
2007-11-16 23:34
jbwang
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2007-5-22
收藏
得分:0 

嗯,好!我试试。谢谢你的解答。

2007-11-16 23:55
快速回复:[求助]关于控件变量的调用(添加了一些个人观点)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022149 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved