怎样在CBitmapButton中加载外部指定路径的BMP图片??
我想用让一个按钮有三态的功能,呵呵
于是准备使用 CBitmapButton
可是我只会使用 CBitmapButton的LoadBitmaps函数,其参数为 已经加入资源中的BMP图片的ID
而现在不想把很多的BMP图片都加入到资源中,想在程序中指定BMP图片的路径,让CBitmapButton加载
不知如何实现,多谢啊
问题点数:100、回复次数:4Top
1 楼laiyiling(陌生人[MVP])回复于 2005-12-22 10:07:29 得分 40
用其他的位图按钮类
http://www.vckbase.com/english/code/buttonctrl/index.htmlTop
2 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-12-22 10:27:25 得分 20
自己处理DrawItem方法写一个,网上有很多例子
例如
http://www.codeguru.com/cpp/controls/buttonctrl/article.php/c2069/Top
3 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-12-22 10:30:05 得分 30
由文件名获得HBITMAP可以用
LoadImage(NULL,szBmp, IMAGE_BITMAP,0,0,LR_LOADFROMFILE);Top
4 楼shicaohuli(食草狐狸)回复于 2006-01-05 18:37:11 得分 10
void CUIButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CDC ButtonDC;
BITMAP bmp;
CDC mem;
CRect rc;
ButtonDC.Attach(lpDrawItemStruct->hDC);
mem.CreateCompatibleDC(&ButtonDC);
rc = lpDrawItemStruct->rcItem;
UINT state = lpDrawItemStruct->itemState;
if ((state & ODS_SELECTED) == ODS_SELECTED)
{
HBITMAP hbmp;
hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), "D:\\预览\\4_49.bmp",IMAGE_BITMAP,0,0, LR_LOADFROMFILE);
CBitmap* bitmapTrans = CBitmap::FromHandle(hbmp);
int iRet = bitmapTrans->GetBitmap(&bmp);
CBitmap *old = mem.SelectObject(bitmapTrans);
BOOL bRet = ButtonDC.StretchBlt(rc.left, rc.top, rc.right, rc.bottom, &mem, 0, 0,
bmp.bmWidth, bmp.bmHeight, SRCCOPY);
mem.SelectObject(old);
bRet = bitmapTrans->DeleteObject();
iRet = ButtonDC.SetBkMode(TRANSPARENT);
TCHAR sCap[MAX_PATH];
iRet = ::GetDlgItemText(GetParent()->m_hWnd, lpDrawItemStruct->CtlID, sCap, MAX_PATH);
CFont text_font;
text_font.CreatePointFont(120, _T("Times New Roman"));
CFont* old_font = ButtonDC.SelectObject(&text_font);
ButtonDC.SetTextColor(0xffffff);
iRet = ButtonDC.DrawText(sCap, &rc, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
ButtonDC.SelectObject(old_font);
text_font.DeleteObject();
}Top




