CButton控件 我在CButton控件下派生了一个类,扩充了消息,如何在该控件上绘图???我用了DRAWITEM(),但不响应,图画在了按扭底下????? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先设置你的按钮为 OwnerDraw 类型然后在DrawItem(...)中绘图。void CThumbnailButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); ......}没问题的!^o^ void CDatabaseLogin::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC buttomDC; CBitmap bitmapTrans; BITMAP bmp; CDC mem; CRect rc; buttomDC.Attach(lpDrawItemStruct->hDC); mem.CreateCompatibleDC(&buttomDC); rc=lpDrawItemStruct->rcItem; UINT state = lpDrawItemStruct->itemState; if(state & ODS_FOCUS) { bitmapTrans.LoadBitmap(IDB_BTN_DOWN); bitmapTrans.GetBitmap(&bmp); CBitmap* old=mem.SelectObject(&bitmapTrans); buttomDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem, 0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); mem.SelectObject(old); bitmapTrans.DeleteObject(); buttomDC.SetBkMode(TRANSPARENT); if(nIDCtl == IDC_ODBC_SQL_SAVE){ buttomDC.DrawText("保存",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE); } else buttomDC.DrawText("保存",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE); } else { bitmapTrans.LoadBitmap(IDB_GETFOCUS); bitmapTrans.GetBitmap(&bmp); CBitmap* old2=mem.SelectObject(&bitmapTrans); buttomDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem, 0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); mem.SelectObject(old2); bitmapTrans.DeleteObject(); buttomDC.SetBkMode(TRANSPARENT); if(nIDCtl == IDC_ODBC_SQL_SAVE){ buttomDC.DrawText("保存",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE); } else buttomDC.DrawText("保存",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE); } CFormView::OnDrawItem(nIDCtl, lpDrawItemStruct);} 设置你的按钮为 OwnerDraw 类型 锁定ie窗口大小及位置 我的程序莫名其妙最小化了,帮我分析下 如何实现窗口的全屏 vc中,如何打印bitmap图标呢? 系统托盘的问题 有人做过PDA编程吗 ATL编程中遇到的问题 怎样在CBitmap中透明地输出文字? 控制台程序用到CString,为何出错 VC6.0编译数据库是出现Microsoft OLE DB Service Components没有注册类 关于OLE拖放:自定义Listbox中的条目既有文件信息也有自定义数据格式,begindrag事件的时候如何判断某个条目应添加到CF_HDROP格式(如果 一个运行时的错误,送分求助
然后在DrawItem(...)中绘图。void CThumbnailButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
......
}没问题的!^o^
{
CDC buttomDC;
CBitmap bitmapTrans;
BITMAP bmp;
CDC mem;
CRect rc;
buttomDC.Attach(lpDrawItemStruct->hDC);
mem.CreateCompatibleDC(&buttomDC);
rc=lpDrawItemStruct->rcItem;
UINT state = lpDrawItemStruct->itemState;
if(state & ODS_FOCUS)
{
bitmapTrans.LoadBitmap(IDB_BTN_DOWN);
bitmapTrans.GetBitmap(&bmp);
CBitmap* old=mem.SelectObject(&bitmapTrans);
buttomDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem,
0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
mem.SelectObject(old);
bitmapTrans.DeleteObject();
buttomDC.SetBkMode(TRANSPARENT);
if(nIDCtl == IDC_ODBC_SQL_SAVE){
buttomDC.DrawText("保存",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}
else
buttomDC.DrawText("保存",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}
else
{
bitmapTrans.LoadBitmap(IDB_GETFOCUS);
bitmapTrans.GetBitmap(&bmp);
CBitmap* old2=mem.SelectObject(&bitmapTrans);
buttomDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem,
0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
mem.SelectObject(old2);
bitmapTrans.DeleteObject();
buttomDC.SetBkMode(TRANSPARENT);
if(nIDCtl == IDC_ODBC_SQL_SAVE){
buttomDC.DrawText("保存",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}
else
buttomDC.DrawText("保存",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}
CFormView::OnDrawItem(nIDCtl, lpDrawItemStruct);
}