正文

【原】按钮的自绘2008-01-30 16:55:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/32498.html

分享到:

OnDrawItem

注意如果在CButton基础上有虚函数

在类内直接通过该消息修改外观

有了hDC,CDC也有了,CDC有了,自绘还会远吗?

void CTestDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
 CDC ButtonDC;
 CBitmap bitmapTrans;
 BITMAP bmp;
 CRect rc;
 CDC mem;

 ButtonDC.Attach(lpDrawItemStruct->hDC);
 mem.CreateCompatibleDC(&ButtonDC);
 rc=lpDrawItemStruct->rcItem;
 UINT state = lpDrawItemStruct->itemState;
 if(state & ODS_FOCUS)
 {
  bitmapTrans.LoadBitmap(IDB_GETFOCUS);
  bitmapTrans.GetBitmap(&bmp);
  CBitmap  * old=mem.SelectObject(&bitmapTrans);
  ButtonDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
  mem.SelectObject(old);
  bitmapTrans.DeleteObject();
  ButtonDC.SetBkMode(TRANSPARENT);
  ButtonDC.DrawText("已选中",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
  
 }
 else
 {
  bitmapTrans.LoadBitmap(IDB_GETFOCUS);
  CBitmap *old2 =mem.SelectObject(&bitmapTrans);
  bitmapTrans.GetBitmap(&bmp);
  CBitmap *old=mem.SelectObject(&bitmapTrans);
  ButtonDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
  ButtonDC.SetBkMode(TRANSPARENT);
  ButtonDC.DrawText("未选中",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
  mem.SelectObject(old2);
  bitmapTrans.DeleteObject();
 }

 CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

阅读(2417) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册