我在最近一个PROFECT中负责做界面,我本想做一个象《金山毒霸2003》那样的图形按钮,可是我在贴完背景图片后,用一个buttonST的按钮类设置位图按钮时,该按钮区域透过背景位图而显示出了通常对话框那难看的灰色背景,其他的贴图,图标都很正常,我实在没有什么办法了,希望哪位高手帮帮我,谢谢!!!

解决方案 »

  1.   

    CbuttonST吗? 在它的
      SetDefaultInactiveBgColor();
      SetDefaultInactiveFgColor();
      SetDefaultActiveBgColor();
      SetDefaultActiveFgColor();
    里面有设置背景颜色,你注意看一下,在DrawItem里面有一个
     pDC->FillRect(&itemRect, &br);
    就是它对你的按钮进行了重绘,只需要改成,
    获取你当前按钮的区域部分,
    然后计算你的背景图那个按钮覆盖的区域部分, 把图型句屏传给按钮,
    按钮把自己覆盖背景图的部分再重画一遍就可以了
      

  2.   

    你在 对话框的 OnCtrlColor 里 捕捉到 CTL_BUTTON,然后将该CDC 对象选入一个空刷子(NULL_BRUSH).
      

  3.   

    大青蛙先生,我发现在CButtonST里,用的是在ON_WM_SETFOCUS()的消息响应函数中调用void CButtonST::DrawTransparent(BOOL bRepaint)这个函数,使按钮区域的背景透明的:(
    你们都有CButtonST的源文件吗,可以到http://www.vccode.com/vcfile/show.php?id=14中找到并下载它,非常牛的一个按钮类,希望大家研究后,和我共同讨论,谢谢!!!
      

  4.   

    我有CButtonST源码啊, 我去看了看,版本比我目前有的新的多, 这个新类的实现很简单: 在初始化对话框OnInitDialog()里面加上个
    比如说: m_Btn 就是CButtonST的一个实例: 则调用
    m_Btn.DrawTransparent(TRUE);就可以了.
      

  5.   

    那太好了,可以将你实现Transparent effect那一页的效果的源码给我吗?
    最好贴上,谢谢
      

  6.   

    太简单了啊, DrawTransparent是CButtonST本身的成员函数!! 它已经体贴的为你考虑了这些,所以不用我写了:)
    直接在OnInitDialog()里面调用它就可以了, 如果你实在还是不知道怎么办, 把你E-mail留下, 我写个例子发给你...
      

  7.   

    真是太感谢了,我的Email:[email protected]
    不过我需要在背景有图的情况下的按钮实例,就像Transparent effect那一页的效果一样,它好象是在必须在ON_WM_SETFOCUS()的消息响应函数中调用才行,望大青蛙三思啊……(我是按照它的例子一步一步搞的,但就是不行,代码都一样)