MFC中修改窗口背景颜色和使用位图

可以捕获WM_CTLCOLOR消息来做,这里的WM_CTLCOLOR消息是一个16位Windows下的消息,到了32位下,系统就将各个控件的消息分开来了。可以对号入座:

  • WM_CTLCOLORBTN
  • WM_CTLCOLOREDIT
  • WM_CTLCOLORDLG
  • WM_CTLCOLORLISTBOX
  • WM_CTLCOLORSCROLLBAR
  • WM_CTLCOLORSTATIC

参数如下:

hwnd

Handle to destination window.

wParam

Handle to a display context (DC).

lParam

Handle to a child window (control).

处理这类消息需要传一个Brush句柄,并且应用程序需要自己来维护这个Brush(在不需要的时候销毁)

 

另外对于如果想用一张位图来作为窗口的背景的话,可以使用这样的方法——截获WM_ERASEBKGND消息:

BOOL   OnEraseBkgnd(   CDC*   pDC   )
{
  CPaintDC   dc(this);  
  CBitmap   bmp;  
  CBitmap*   pOldBmp;  
  BITMAP   b;  
  CRect   rect;  
  CDC   memDC;  
   
  GetClientRect(rect);  
  memDC.CreateCompatibleDC(&dc);  
  bmp.LoadBitmap(IDB_BITMAP1);  
  bmp.GetBitmap(&b);  
   
  pOldBmp=(CBitmap*)memDC.SelectObject(&bmp);  
   
  dc.StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,b.bmWidth,b.bmHeight,SRCCOPY);  
  memDC.SelectObject(pOldBmp);  
return false;//如果前面什么都不写,只返回true或者false,那么对话框变成透明的。
}

以上这段转自
http://zhangstar.spaces.live.com/Blog/cns!82837E375AFF0BA9!531.entry

By Lu Jun

80后男,就职于软件行业。习于F*** GFW。人生48%时间陪同电子设备和互联网,美剧迷,高清视频狂热者,游戏菜鸟,长期谷粉,临时果粉,略知摄影。

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.