按钮右键-->Styles-->Owner draw
2、在程序中定义一个CBitmapButton成员变量。
注意:不能使用ClassWizard为按钮映射一个CButton变量,然后改为CBitmapButton,
这么做并不能将按钮直接映射为CBitmapButton类的对象,反而会出现初始化错误
3、使用CBitmapButton::LoadBitmaps装载各种状态的图片,
使用CBitmapButton::SubclassDlgItem关联到想要的按钮,
使用CBitmapButton::SizeToContent函数使按钮适合图片大小。
注意Loadbitmaps一定要在关联到按钮之前进行!
附:添加资源Bitmap的方法:Insert菜单-->Resource -->Resource type:Bitmap-->Import,
之后选择所需的图片就可以了
实例化:选中按钮的owner Draw属性,在资源中加载两副*.bmp格式的位图,
首先你的CBitmap控件要有BS_BITMAP样式
((CButton*)GetDlgItem(IDC_BUTTON_TEST))->ModifyStyle(0, BS_BITMAP)
其次,你的m_bmp不能随意销毁,默认情况下CBitmap的父类CGdiObj析构的时候会删除它所持有的HGDIOBJ对象。用Detach将GDI对象和CGdiObj对象分离
HBITMAP hBitmap = (HBITMAP)m_bmp.Detach()
合起来就是
CBitmap m_bmp
m_bmp.LoadBitmap(IDB_BITMAP1)
HBITMAP hBitmap = (HBITMAP)m_bmp.Detach()
((CButton*)GetDlgItem(IDC_BUTTON_TEST))->ModifyStyle(0, BS_BITMAP)
((CButton*)GetDlgItem(IDC_BUTTON_TEST))->SetBitmap(hBitmap)
注意:这样的话你的这个hBitmap对象如果没有注意自己释放,就发生内存泄漏了。如果这个图片在整个程序中都要用到,那么这样写没问题,只要你不要每次要用到的时候都来一次LoadBitmap就好。每次都来LoadBitmap会不会发生泄漏、泄漏会有多严重,我就不知道了。目测会泄漏而且挺严重
1.事先准备好位图。一定要位图。位图。2.在对话框中添加picture控件,设置type为bitmap,将其ID改为IDC_STATIC1(不改不行)。然后为picture添加控制变量PT1。
3.在.cpp中找到onpaint()函数加入如下代码。
CDC dcMemory1
CBitmap wtj_bitmap1
BITMAP bmInfo1
CDC *pDC=PT1.GetDC()
PT2.SetWindowPos(0,-400,112,53,20, SWP_NOZORDER | SWP_NOACTIVATE)
GetDlgItem(IDC_STATIC1)->GetWindowRect(rect)//创建一个CRect对象rect,矩形结构类,此对象用来指定要拉伸变为的大小
wtj_bitmap1.LoadBitmap(IDB_BITMAP15)
wtj_bitmap1.GetObject(sizeof(bmInfo1),&bmInfo1)
dcMemory1.CreateCompatibleDC(pDC)
dcMemory1.SelectObject(&wtj_bitmap1)
//pDC->SetStretchBltMode(COLORONCOLOR)
pDC->SetStretchBltMode(HALFTONE)
pDC->StretchBlt(0,0,1000,rect.Height()-13,&dcMemory1,0,0,bmInfo1.bmWidth,bmInfo1.bmHeight, SRCCOPY)//利用StretchBlt()贴图实现自动拉伸
ReleaseDC(pDC)
4.setwindowspos函数和stretchblt函数参数百度就可以查到了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)