将控件与Control类的变量关联时要注意的一个问题

void CpropView::OnPropertysheet()
{
	// TODO: 在此添加命令处理程序代码
	CPropSheet propSheet(_T("属性表单"));
	propSheet.SetWizardMode();
//	propSheet.DoModal();
	if((ID_WIZFINISH == propSheet.DoModal()))
	{

		m_iOccupation = propSheet.m_prop3.m_occupation;
		m_strWorkAddr = propSheet.m_prop3.m_wrkaddr ;
		m_bLike[0] = propSheet.m_prop2.m_football.GetCheck();
		m_bLike[1] = propSheet.m_prop2.m_volyball.GetCheck();
		m_bLike[2] = propSheet.m_prop2.m_swim.GetCheck();
		m_bLike[3] = propSheet.m_prop2.m_basketball.GetCheck();
		Invalidate();
	}
}

昨天将 控件中添加的成员变量value和control的区别 好好研究了一番,差不多搞清楚怎么区分了。今天就遇到一个奇怪的问题。

前提是做了一个属性表单,包括三个属性页。在获取了用户的输入后,要在点属性页的“完成”之后将这些输入在屏幕上显示出来。

当属性表单是以wizard向导的形式创建时,DoModal会返回I D_WIZFINISH 或者 IDCANCEL,因此要检测到返回I D_WIZFINISH之后可以输出内容了。

其中

		/*m_bLike[0] = propSheet.m_prop2.m_football.GetCheck();
		m_bLike[1] = propSheet.m_prop2.m_volyball.GetCheck();
		m_bLike[2] = propSheet.m_prop2.m_swim.GetCheck();
		m_bLike[3] = propSheet.m_prop2.m_basketball.GetCheck();*/
m_football,m_volyball,m_swim,m_basketball是与复选框相关联的Control类CButton类型的变量,简单说说Control和Value的区别:
<span style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 25px;">control型变量可以获得控件的实例,通过这个变量,你可以操纵控件</span><span style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 25px;">,无须通过额外调用</span><span style="font-family: 微软雅黑; font-size: 14px; line-height: 25px; color: rgb(255, 0, 0);">UpdateData(TRUE)获得用户输入的更新</span><span style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 25px;"> ,而value型变量仅仅可以获得该控件的public型变量。 </span>
<span style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 25px;">因此可以通过Control类变量调用该控件类的函数比如getcheck去得到选择情况。此时点完成之后,会终止运行:</span>
<span style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 25px;"><img src="https://img-blog.csdn.net/20150124173326171" alt="" />
</span>
<span style="font-family: 微软雅黑; font-size: 14px; line-height: 25px;"><span style="color:#333333;">分析知,点完成,DoModal函数返回后,属性表单窗口就被销毁了,当然表单上的控件也就销毁了,与之关联的等同于该控件的Control类</span></span><pre name="code" class="html" style="font-weight: bold;"><span style="color:#333333;">m_football的地址就是无效的了,</span><span style="color:#ff0000;">注意,属性表单对象的生命周期并没有结束,他们不是同一个事物</span><span style="color:#333333;">。断点看看它此时的地址(为了区别,名字改成了m_ctlFootball)。</span>
<img src="https://img-blog.csdn.net/20150124174004507" alt="" />
此时m_ctlFootball的地址是0x0000000,hWnd也是0.这就是出错的原因。
然后再来对比下,在窗口和控件都存在的时候捕捉下Control变量。
<img src="https://img-blog.csdn.net/20150124174313704" alt="" />
。最后我将Control类的变量改成Value类了。问题解决。

 
</pre><pre name="code" class="html">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值