当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > VC > 实例分析类 > 正文

Visual C++对话框控件属性的修改

http://www.zk168.com.cn  招考学习网 2006-4-16 22:19:23
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--

【作者按】本文主要针对初学者在使用对话框赋值时的一些问题而写。如果你对对话框的使用已经很熟练,请跳过本文。

【针对现象】许多初学者,常常写出这样的程序来修改对话框中某个按钮的标题:






CMyDialog dlg;
dlg.m_Btn.SetWindowText("MyButton");


  其中m_Btn的定义为CButton m_Btn;

  这段程序运行后会报错,debug一下,错误会指向一个断言语句ASSERT(::IsWindow(m_hWnd));报告窗口指针为空。看一下m_hWnd,等于0x00000000.其实就是m_Btn这个CButton对象的句柄为空。

  【原因分析】出现这种错误的原因,显然是m_Btn这个窗口对象还没有创建造成的。我们看一下CMyDialog dlg这个构造函数,看一看MSDN对CDialog构造函数的说明。其实它只是简单的创建了一个对话框实例。这里我这样理解,就是对话框是一个容器,而对话框上的各个控件是容器中包含的对象。对话框的构造函数只是构造了一个容器,而并没有创建容器中的各个对象。我想这里大家就应该明白为什么m_Btn的句柄为空了。

  那对话框中的控件在什么时候被创建的呢?我个人没有仔细的研究过,但从个人使用的经验看,应该在DoModal函数和对话框的Create函数中创建的。因为使用一个模式对话框时,m_Btn.SetWindowText("MyButton")语句在OnInitDialog函数中执行没有问题。所以应该在DoModal中创建的。至于DoModal中是如何创建的,欢迎各位高手给与讲解。而对于非模式对话框,以下的程序运行没有问题:


CMyDialog dlg;
dlg.Create(IDD_MYDIALOG,this);
dlg.m_Btn.SetWindowText("MyButton");

  可见控件的创建应该在Create函数中。

  [解决办法]那么,如果非要实现这样的功能怎么办呢?笔者的解决办法是在对话框类中增加成员变量,比如m_sBtnTitle。数据的传递有以下三种方法:

  1。增加Set函数,比如SetBtnTitle(CString str);


CMyDialog::SetBtnTitle(CString str)
{
    m_sBtnTitle = str;
}

  调用程序如下:


CMyDialog dlg;
dlg.SetBtnTitle("MyButton");

  2。将m_sBtnTitle定义成公有类型。

  那么dlg.m_sBtnTitle = "MyButton";就可以了。

  3。修改或者重载一个新的构造函数,比如:


CMyDialog::CMyDialog(CString str)
{
    m_sBtnTitle = str;
}

    最后,在对话框类的初始化函数增加m_Btn.SetWindowText(m_sBtnTitle);即可。

  还有一些网友提供的方法是定义全局变量。当然,首先肯定全局变量是可以完成此功能的。不过笔者并不赞同用全局变量的方法。对于面向对象的编程和设计来说,全局变量应该尽量少使用,因为全局变量将增加模块之间的耦合度,与面向对象的思想是有违背的。正如goto语句,好用但尽量少用。在这里笔者并不是反对用全局变量,而是要看情况而用。笔者曾经开发过一个日本项目,粗略计算一下,全局变量不下于1000个,这样的程序的维护难度可想而知。

  希望此文能够帮助初学者在VC之路上少走一些歪路,尽快融入VC开发大军。

-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·人力资源发展:性质、时代的挑战、意义和趋势
·环保企业人力资源开发与管理的实证研究————巨龙公
·21世纪以煤和天然气为原料的C1化学
·燃气锅炉的发展与经济性比较
·重油制气污水处理系统(A/O)技术改造
·论审计的防护性和建设性
·论重要性原则与会计报表真实性审计
·谨慎性原则在《企业会计准则—非货币性交易》中
·中美《非货币性交易会计准则》差异浅析
·西方非货币性交易的会计处理简介
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>