新建一个位图按钮类,添加一个这样的函数。
void DrawImage()
{
CPaintDC dc(this);
CBitmap myBitmap;
myBitmap.LoadBitmap(IDB_BITMAP1);
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap *pOldBitmap=MemDC.SelectObject (&myBitmap);
dc.StretchBlt(0,0,20,20,&MemDC,0,0,16,16,SRCCOPY; MemDC.SelectObject ( pOldBitmap );
} Create一个对象,并显示出按钮,在另外一个按钮的单击事件中 调用DrawImage();这个按钮是不会显示图片的,怎么回事?代码有错?在代码里面加入
Invalidate(TRUE);InvalidateRect..ReDrawWindow都是无效的,在OnDrawItem里面加入上面代码也是无效的,我应该怎么解决?
void DrawImage()
{
CPaintDC dc(this);
CBitmap myBitmap;
myBitmap.LoadBitmap(IDB_BITMAP1);
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap *pOldBitmap=MemDC.SelectObject (&myBitmap);
dc.StretchBlt(0,0,20,20,&MemDC,0,0,16,16,SRCCOPY; MemDC.SelectObject ( pOldBitmap );
} Create一个对象,并显示出按钮,在另外一个按钮的单击事件中 调用DrawImage();这个按钮是不会显示图片的,怎么回事?代码有错?在代码里面加入
Invalidate(TRUE);InvalidateRect..ReDrawWindow都是无效的,在OnDrawItem里面加入上面代码也是无效的,我应该怎么解决?
建议换
pDC->DrawState
试一下。
现在更怪了。我重载DrawItem,把上面代码加进去。重载PreSubClassWindow,把 ModifyStyle(0,BS_OWNERDRAW); 加进去。
现在CImageButton *pBt;
pBt=new CImageButton();
pBt->Create("O",WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,rect,this,IDC_IMAGEBUTTON);
pBt->ShowWindow(TRUE);
结果产生的按钮看不见了。但这个按钮还可以响应信息。
HBITMAP hBitmap,hBitmapOld;hBitmap=NULL;
SetBkMode(hdc, TRANSPARENT);hBitmap = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_PREPARE_2));//-1hBMDC = CreateCompatibleDC(hdc);
hBitmapOld=(HBITMAP)SelectObject(hBMDC,hBitmap);
StretchBlt(hdc,0,0,PIC_PREPARE_WIDTH,PIC_PREPARE_HEIGHT,hBMDC,0,0,
PIC_PREPARE_WIDTH,PIC_PREPARE_HEIGHT,SRCCOPY);
SelectObject(hBMDC,hBitmapOld);
DeleteDC(hBMDC);
DeleteObject(hBitmap);
lygfqy(风清扬) ( 发送消息会出现xxx错误。所以我放弃那种方式。
一般要显示三个位图,即缺省时,鼠标选中时和鼠标按下时。
需要用到的消息有主窗体的 WM_DRAWITEM 消息,按钮的 WM_MOUSEMOVE、WM_MOUSELEAVE。如果用 MFC, 只是简单的显示位图,在按钮的属性中选择 Owner draw,在自定义按钮类的 OnPaint 中进行绘制,并且重载 DrawItem 方法即可。