运新环境:VS2012
测试程序:MFC下创建的多文档程序(默认设置)
附加条件:
1.程序中的button使用自定义的btn类继承并扩展重写了CButton的部分函数(DrawItem、鼠标的经过、按下、按钮正常状态、热点状态处理函数函数),使用btn类定义了五个按钮:btn1、2、3、4、5,放在四个CFormView窗体上(一个窗体上五个按钮)
2.测试是在一个文档的一个child框架(主框架MainFrm下的ChildFrm)下的一个视窗口中进行,视窗口被分为4个片,每片对应一个CFormView类
说明:按钮的性质是自会性质,虽然btn类继承自CButton类,但此处按钮显然是要实现动态的背景切换,已然要使用自绘(或许出现的问题也与此有关)
出现的问题:当编译无错、无警告后,运行程序的Release版本,程序有时会的出现窗口的4个片区的某个片无法显示CFormView上的控件(这种情况的出现是随机的毫无规律)
经调试发现,使用控件的 IsWindowVisible() 函数,可以判断出控件是已成功创建的。
此问题目前无法解决。
初步怀疑:
1.问题出在CFormView的初始化上绘制背景时将以初始化的控件覆盖了(可是我并没有给CFormView使用背景图片啊!!!)
2.另一种可能,在没有添加任何背景图片的情况下,CFormView初始化时默认的画笔绘制的背景覆盖了控件(这种可能和CFormView窗体的结构有关,难道CFormView默认是有分层?背景是一层,控件又是一层?)
3第三种可能,可能是因为我是用了自会按钮(但是我添加了一个系统提供的控件不进行任何自绘,这个控件也照样是不显示啊!!!)
4.第四种可能,程序自身问题,也许是,在写程序时,忘记添加了某种判断机制才导致这种情况。
无论哪种情况,此问题目前无解,留待观察研究!!!