感谢大家的关注
我在网上找了很久,虽然没找到三态按钮的自绘模板,但是我找到了二态的
程序代码:
CDC buttonDC;
CBitmap bitmapTrans;
BITMAP bmp;
CDC mem;
CRect rc;
buttonDC.Attach(lpDrawItemStruct->hDC);//得到用于绘制按钮的DC
mem.CreateCompatibleDC(&buttonDC);//准备向按钮区域传输图形
if (lpDrawItemStruct->CtlID == IDC_BUTTON1) {
rc = lpDrawItemStruct->rcItem;//获取按钮所占的矩形大小
UINT state = lpDrawItemStruct->itemState;//获取按钮当前的状态,不同状态绘制不同的按钮
if (state & ODS_FOCUS) { //如果按钮已经取得焦点,绘制选中状态下的按钮
bitmapTrans.LoadBitmap(IDB_BITMAP2);
bitmapTrans.GetBitmap(&bmp);
CBitmap * old = mem.SelectObject(&bitmapTrans);
//向按钮传输位图,使用stretcnblt可以使图片随按钮大小而改变
buttonDC.StretchBlt(rc.left, rc.top, rc.right, rc.bottom, &mem, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
mem.SelectObject(old);
bitmapTrans.DeleteObject();
} else { //如果按钮已经取得焦点,绘制选中状态下的按钮
bitmapTrans.LoadBitmap(IDB_BITMAP3);
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);
mem.SelectObject(old2);
bitmapTrans.DeleteObject();
}
}