1 //按钮重绘函数
2 void CWeather091001Dlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) {
3 CDC buttonDC;
4 CBitmap bitmapTrans;
5 BITMAP bmp;
6 CDC mem;
7 CRect rc;
8 buttonDC.Attach(lpDrawItemStruct->hDC);
9 //得到用于绘制按钮的DC
10 mem.CreateCompatibleDC(&buttonDC);
11 //准备向按钮区域传输图形
12 if(lpDrawItemStruct->CtlID == IDC_CLOSE)//重绘按钮的资源ID
13 {
14 rc = lpDrawItemStruct->rcItem;
15 //获取按钮所占的矩形大小
16 UINT state = lpDrawItemStruct->itemState;
17 //获取按钮当前的状态,不同状态绘制不同的按钮
18 if (state & ODS_FOCUS)//如果按钮已经取得焦点,绘制选中状态下的按钮
19 {
20 bitmapTrans.LoadBitmap(IDB_CLOSE3);
21 } else {
22 bitmapTrans.LoadBitmap(IDB_CLOSE1);
23 }
24 bitmapTrans.GetBitmap(&bmp);
25 CBitmap * old = mem.SelectObject(&bitmapTrans);
26 //向按钮传输位图,使用stretcnblt可以使图片随按钮大小而改变 buttonDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); mem.SelectObject(old); bitmapTrans.DeleteObject();
27 }
28 CDialogEx::OnDrawItem(nIDCtl, lpDrawItemStruct);
29 }