我想用 setclasslong  设置背景颜色或图片  但是不成功  请大家指点我在 主窗体的  WM_CREATE 中创建了一个button  
并且用SetClassLong(buttonQuit,GCL_HBRBACKGROUND,(long)GetStockObject(BLACK_BRUSH));想更改一下button的颜色(其实是想该成图片)但是button  没有任何反应    可是我用SetClassLong(hWnd,GCL_HBRBACKGROUND,(long)GetStockObject(BLACK_BRUSH));(hWnd是主窗体的句柄)  设置主窗体的 hbrBackground   却成功了请问这是为什么 如果我要更改 button 或者 edit  或者其他的控件  应该如何操作呢

解决方案 »

  1.   

    控件有自己的绘制机制,应该响应控件的WM_DRAWITEM或者NM_CUSTOMDRAW消息来绘制。
      

  2.   

    对话框设置有效是因为对话框在画背景时用到了GCL_HBRBACKGROUND,
    而Button与Edit没有使用该属性。
    =========================================================  
    上海勇进软件有限公司 CTO 阙海忠 敬答各位界面爱好者的问题  
    公司网站:http://www.uipower.com
      

  3.   


    我在试试
    如果是这样的话  那我该如何制作一个图片按钮 或者用图片做北京的edit                
      

  4.   

    你可以采用2种方法进行按钮与Edit的图形绘制:
    1、可以采用默认提供的自画功能OwnerDraw;
    2、可以采用Subclass按钮与Edit的方法对WM_PAINT等各种消息进行处理。如果你刚接触VC,那么我建议你采用第一种方法相对比较简单,但有局限性。
    如果你对Windows消息处理比较熟悉,建议采用第二种方法,那种方法相对灵活很多。
    =========================================================  
    上海勇进软件有限公司 CTO 阙海忠 敬答各位界面爱好者的问题  
    公司网站:http://www.uipower.com
      

  5.   

    是在按钮上显示图片吗?
    先在resourceView里把按钮的bitmap和owner draw选上。然后添加一个跟这个按钮关联的CBitmapButton变量m_bmpButton(可以先用classWizard添加一个CButton变量然后手动把她改成CBitmapButton).再在OnInitDialog()里
    m_btn.LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2);应该就可以了。IDB_BITMAP1,IDB_BITMAP2为导入的两个位图,一个是按钮没按时显示的图片一个是按下要显示的
      

  6.   

    上面的2位  说的应该是MFC吧   我对mfc很不熟悉  我上面说的是api
      

  7.   

    我说的方法同样适用于SDK
    1、对于OwnerDraw,可以使用风格BS_OWNERDRAW
    2、对于Subclass,可以使用SetWindowLong,修改WndProc
    ===============================================================================
    阙海忠 (CTO Skin++ 开发成员 http://www.uipower.com 上海勇进软件有限公司)
      

  8.   

    我现在才刚开始接触我是用createwindow  制作的button你说的第一种方法我很不理解第二种方法我在网上看了一下 但是还是不理解 Subclass 的用法和意义不过SetWindowLong,修改WndProc   这个我到是还能理解顺便问一下 就 设置回调函数   setwindowlong  和setclasslong  有什么区别么?请指教
    我还有一个问题没有解决 希望你能指点一下http://topic.csdn.net/u/20080424/00/e3c9b027-2759-45f5-9452-4ffe1aa7f74f.html谢谢
      

  9.   

    关于第一种方法的具体实现可以参考下面的文章,还可以下载到相应的代码,应该对你很有帮助:
    http://www.uipower.com/shownews2.asp?id=269关于SetWindowLong与SetClassLong的区别,可以简单地这样理解为:
    SetWindowLong仅对某个窗口更改WndProc,
    而SetClassLong是对所有用该类创建窗口的WndProc进行更改,
    同时SetClassLong在动态修改WndProc有一些局限性。===============================================================================
    阙海忠 (CTO Skin++ 开发成员 http://www.uipower.com 上海勇进软件有限公司)