如何使用CBitmapButton,直接从文件读取位图

yan_zg 2006-12-07 03:02:44
CBitmapButton,可以读取BMP资源, 并显示为按钮的四个状态, 有没有办法直接将位图文件显示到按钮, 即如何将位图文件转换为BMP资源, 等待
...全文
431 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
covsno 2007-01-05
  • 打赏
  • 举报
回复
楼主给点分
covsno 2007-01-05
  • 打赏
  • 举报
回复
class BitmapButton1 : public CBitmapButton

BOOL BitmapButton1::LoadBitmaps(LPCTSTR lpszBitmapResource,
LPCTSTR lpszBitmapResourceSel ,
LPCTSTR lpszBitmapResourceFocus ,
LPCTSTR lpszBitmapResourceDisabled)
{
if(lpszBitmapResource==NULL)
return FALSE;
HBITMAP hbitmap=(HBITMAP)LoadImage(NULL,lpszBitmapResource,
IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
if(hbitmap==NULL)return FALSE;
if (m_bitmap.m_hObject)
m_bitmap.Detach();
m_bitmap.Attach(hbitmap);
::CloseHandle(hbitmap);
hbitmap=NULL;

hbitmap=(HBITMAP)LoadImage(NULL,lpszBitmapResourceSel,
IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
if(hbitmap!=NULL)
{
if (m_bitmapSel.m_hObject)
m_bitmapSel.Detach();
m_bitmapSel.Attach(hbitmap);
::CloseHandle(hbitmap);
hbitmap=NULL;
}

hbitmap=(HBITMAP)LoadImage(NULL,lpszBitmapResourceFocus,
IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
if(hbitmap!=NULL)
{
if (m_bitmapFocus.m_hObject)
m_bitmapFocus.Detach();
m_bitmapFocus.Attach(hbitmap);
::CloseHandle(hbitmap);
hbitmap=NULL;
}

hbitmap=(HBITMAP)LoadImage(NULL,lpszBitmapResourceDisabled,
IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
if(hbitmap!=NULL)
{
if (m_bitmapDisabled.m_hObject)
m_bitmapDisabled.Detach();
m_bitmapDisabled.Attach(hbitmap);
::CloseHandle(hbitmap);
hbitmap=NULL;
}
return TRUE;
}

BOOL BitmapButton1::LoadBitmaps(UINT nIDBitmapResource,
UINT nIDBitmapResourceSel,
UINT nIDBitmapResourceFocus ,
UINT nIDBitmapResourceDisabled )
{
if(nIDBitmapResource==NULL)
return FALSE;
m_bitmap.LoadBitmap(nIDBitmapResource);
if(nIDBitmapResourceSel!=NULL)
m_bitmapSel.LoadBitmap(nIDBitmapResourceSel);
if(nIDBitmapResourceFocus!=NULL)
m_bitmapFocus.LoadBitmap(nIDBitmapResourceFocus);
if(nIDBitmapResourceDisabled!=NULL)
m_bitmapDisabled.LoadBitmap(nIDBitmapResourceDisabled);
return TRUE;
}
covsno 2007-01-05
  • 打赏
  • 举报
回复
...
yan_zg 2006-12-07
  • 打赏
  • 举报
回复
继续关注
xyh2007 2006-12-07
  • 打赏
  • 举报
回复
顶!!!!!!
Stefine 2006-12-07
  • 打赏
  • 举报
回复
提供个思路,看可行不?

仔细看看.rc文件,用notepad打开看

自己模仿实现 用ID与位图关联

也就是RC文件如何实现那个关联功能的,自己去实现
xdlous 2006-12-07
  • 打赏
  • 举报
回复
好像不行,
没有直接调用CBitmap的接口
期待高手
yan_zg 2006-12-07
  • 打赏
  • 举报
回复
本人初衷是, 使用CBitmapButton来完成状态效果, 但不想在资源中引入bmp, 希望直接读取位图文件, 用户可以方便修改, 而CBitmapButton只有一个ResourceID接口, 不知如何是好了
wsb_8224 2006-12-07
  • 打赏
  • 举报
回复
CBitmapButton* mbutton[5];
UINT mID;
mID=0x00ff;
int i;
for(i=0;i<5;i++)
{
mbutton[i]=new CBitmapButton;
mbutton[i]->Create(NULL,WS_CHILD|BS_OWNERDRAW|WS_VISIBLE,CRect(50+48*i,50,50+48*(i+1),98),this,mID+i);
mbutton[i]->LoadBitmaps(IDB_BITMAP1+i); //可以有4幅Bitmap,先在ResourceView中创建好。
mbutton[i]->RedrawWindow();
mbutton[i]->ShowWindow (SW_SHOW);
mbutton[i]->GetDlgCtrlID();//获得控件的ID。

}

/*RECT rect[5];
int i;
for(i=0;i<5;i++)
{
mbutton[i]->GetWindowRect(&rect[i]);
ScreenToClient(&rect[i]);

}*/可以得到这5个按钮的RECT。

yan_zg 2006-12-07
  • 打赏
  • 举报
回复
感谢几位, 如果能用上CBitmapButton::LoadBitmaps(), 就更好了
aa3000 2006-12-07
  • 打赏
  • 举报
回复
进来接分
xuzheng318 2006-12-07
  • 打赏
  • 举报
回复
hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),"d:\\check.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE ¦LR_CREATEDIBSECTION);
wsb_8224 2006-12-07
  • 打赏
  • 举报
回复
HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL, 文件名, IMAGE_BITMAP, 0,0,LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
((CButton*)GetDlgItem(CButton控件ID))->SetBitmap(hBitmap);
mynamelj 2006-12-07
  • 打赏
  • 举报
回复
HBITMAP hBmp = (HBITMAP)::LoadImage(NULL, "c:\\aa.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧