我用MFC框架做了一个多文档的程序,工具栏上的图是我用贴图(bmp图片)贴上去的,是加在MainFrame中的,我用了从网上下的一个封装了工具栏贴图的类CTrueColorToolBar ,贴图这部分应该没有问题,因为我把这部分程序拿出来做了测试,没有出现散开的现象。再补充一点,我的程序用了CSplitterWnd,用的是静态分割的方法,也不知道和这个有没有关系。工具栏贴图正确时的效果:
http://p.blog.csdn.net/images/p_blog_csdn_net/queshangxintou/376113/o_2.JPG
工具栏贴图错误时的效果:
http://p.blog.csdn.net/images/p_blog_csdn_net/queshangxintou/376113/o_1.JPG出错的原因:
程序出错情况1:程序运行普通的运行都没有问题,当程序处于闲置状态时(程序仍在运行),windows的屏保会出现,当鼠标或键盘激活windows桌面时,程序中的工具栏就会出现上面出错时的情况,但是这种错误出现的几率大约是40%左右。
程序出错情况2:首先运行我的程序,然后打开windows的设置屏幕保护程序属性页,然后选择不同的屏幕保护程序,点击应用或确定,我的工具栏图标就会散开,如上图的效果,这种情况下散开的几率是100%。请各位大侠帮忙给分析一下,出错的原因会在那,分不够可再加,在此先谢过了,在线等侯中~~~~~~~~~

解决方案 »

  1.   

    你的程序是否动用了WM_SETTINGCHANGE之类的系统消息。
      

  2.   

    to:LBPeking
    已经测试过了没有问题 
      

  3.   

    这问题除非自己遇到过否则不看代码没法分析。LZ有没有简单的可以体现出问题的代码,发一份看看。我的邮箱:[email protected]
      

  4.   


    顶。    看看你的工具栏类在刷新绘制的时候,取了什么硬件信息没有?如DPI及上面提到的分辨率!因为有些屏保程序可能会对这些做更改。如果是DPI问题的话,解决起来比较麻烦。
      

  5.   

    你可以试一种方法来查问题:重载CToolBar类的WindowProc,判断TB_SETBUTTONSIZE、TB_SETBUTTONWIDTH等相关消息,在收到这些消息的时候设置断点,根据调用栈来查找是由哪里的代码引起的。
      

  6.   

    问题解决了 可能是编译器的问题 
    具体出错在那也没有找到,我解决的方法是按照我程序的需求,新建了一个类似的工程,然后替换掉原来的MainFrm.cpp和应用程序类的cpp文件
    上述的现象就不会出现了。
    另外多谢以上各位的帮助,虽然没有找到问题的最终原因,但仍然感谢你们的支持
    分仍然送上