控件自绘

如何实现控件自绘?
情况一:WTL下的控件自绘
WTL下,有现成的CButton、CEdit等控件,定义新的控件类时,只需要有选择的继承自它们,然后在新控件类的WM_PAINT中做绘制处理即可。例如:
 
  1. class CButtonImpl :
  2.  public CWindowImpl<COwnerDrawBtnImpl, CButton>
  3. {
  4. public:
  5.  CButtonImpl(void) { }
  6.  ~CButtonImpl(void) { }
  7.  BEGIN_MSG_MAP(CButtonImpl)
  8.     MESSAGE_HANDLER(WM_PAINT, OnPaint)
  9.   DEFAULT_REFLECTION_HANDLER()
  10.  END_MSG_MAP()
  11.    LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled)
  12.     {
  13.             ……
  14.     }
  15. };
情况二:Win32下的控件自绘
在Win32下,没有现成的控件(实际上WTL是对Win32进行了封装),如果需要绘制控件,需要先进行子类化。例如现在要对一个按钮IDC_BUTTON进行自绘。

 

  1. WNDPROC preProc;
  2. preProc= (WNDPROC)SetWindowLong(GetDlgItem(hWnd, IDC_BUTTON), GWL_WNDPROC, (LONG)ButtonPro); 
  3. LRESULT CALLBACK ButtonPro(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
  4. HDC hdc; 
  5. PAINTSTRUCT ps; 
  6. HPEN hPen, hOldPen; 
  7. hPen = NULL; 
  8. hOldPen = NULL; 
  9. switch(message) 
  10.     case WM_PAINT: 
  11.     { 
  12.             ……//绘制处理 
  13.     }
  14.     break;
  15.     ……
  16. }
  17.     return CallWindowProc(preProc, hWnd, message, wParam, lParam);     //其他的交给默认的窗口过程处理 
  18. }

这样就能实现控件自绘了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值