您的位置:首页 > 其它

MFC 按钮的自绘

2016-02-28 21:29 357 查看


主要就是在风格中选择所有者自绘

重载


DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 函数实现

下面是一个简单例子

void CZButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)


{


ASSERT(lpDrawItemStruct->CtlType==ODT_BUTTON);
//控件类型


CDC dc;


dc.Attach(lpDrawItemStruct->hDC);
//获取hdc句柄


ASSERT(dc.GetSafeHdc()!=NULL);


RECT rect=lpDrawItemStruct->rcItem;//获取绘图范围,超过将不会显示


if(lpDrawItemStruct->itemState&ODS_SELECTED)//鼠标按下状态


{


dc.Draw3dRect(&rect,RGB(0,0,0),RGB(255,255,255));//绘制边框


}


else


{


dc.Draw3dRect(&rect,RGB(255,255,255),RGB(0,0,0));


}


dc.SetBkMode(TRANSPARENT);

HBITMAP m_bmp=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));//加载位图

BITMAP bmpinfo;

GetObject(m_bmp,sizeof(bmpinfo),&bmpinfo);//获取位图信息

CDC memDC;
memDC.CreateCompatibleDC(dc);
memDC.SelectObject(m_bmp);
dc->StretchBlt(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,
&memDC,0,0,bmpinfo.bmWidth,bmpinfo.bmHeight,SRCCOPY);
dc->SetBkMode(TRANSPARENT);//绘制位图


CString str;


GetWindowText(str);
//获取标签

dc->DrawText(str,&rect,DT_SINGLELINE|DT_VCENTER|DT_CENTER);//绘制文字


dc.DeleteDC();//释放hdc


return;


}


绘制位图和文字时都是在一个矩形内绘制,通过对矩形大小位置的改变,可以实现文字在图片上方或下等各种样式,根据鼠标进行变化

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: