不好弄,Button上贴图 我这有一张图片,上面有Button的三种状态,是横着连在一起的用CImageList后只有Draw方法,没办法用CBitmapButton很难办有什么好的方法吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是一个整图片上面有三个button不同时期的图片 Button太多,一个Button四五种形态不能切 将三种状态分开,每一种都导入位图,然后用CBitmapButton变量将Button和位图联系起来,既方便,又灵活 用CImageList的Draw方法来绘制不是很方便么? 这是个ButtonCImageList 的Draw不好控制 不好弄,按钮按下去不好调用CImageList的Draw 不知道有没有哪位高手用过BOOL SetImageList( PBUTTON_IMAGELIST pbuttonImagelist);这个好像可以绑定ImageList和Button 做界面的話,這是比較基本的三態位圖按鈕哦。不用ImageList,網上大把的代碼啦。。呵呵,熟悉位圖操作和子類化按鈕的幾個狀態就ok的啦。 为什么非要用CBitmapButton?把按钮设置为OwnerDraw风格,在父窗口中响应WM_DRAWITEM消息,判断控件ID或者控件类型,如果是要处理的按钮,根据按钮状态用CImageList类的Draw函数来画相应的图。一共也就十几行代码就够了。 http://www.vczx.com/article/show.php?id=427看看应该对你有帮助 m_list.Create(16,16,TRUE,2,1); m_list.Add(m_pApp->LoadIcon(IDI_ONE)); m_list.Add(m_pApp->LoadIcon(IDI_TWO)); listctrl.SetImageList(&m_list,LVSIL_SMALL); 如果非要用 CBitmapButton 那就用图像处理软件把图分开自绘 BitBlt 设置好参数就可以了 你那种图片是为自绘而设计的,非要用CBitmapButton就切开吧 用bitblt绘制不同的部分就好了。。 自定义你自己的BItmapButton,那样你想怎么实现画图就怎么实现 http://www.codeproject.com/KB/buttons/cxskinbutton.aspx 好像使用CImageList可以实现的.假设你有3张图片,每张图片Size40*40,整整图片Size40*120;m_Bitmap.LoadBitmap(nBitmapId);m_ImageList.Create(40,40,ILC_COLOR32,3,1);m_ImageList.Add(&m_Bitmap);然后直接画用m_ImageList画就好了,画的时候给出Index. 4种状态时,我用CBitmapButton,LoadBitmap后,我在头地址加对应的,就可以了 inline CBitmap * Nor(){ //normal image (REQUIRED) return (CBitmap *)(PCHAR(btn)+(ULONG)(PCHAR (&m_bitmap)-PCHAR(this)));//not PTCHAR, butPCHAR } inline CBitmap * Sel(){ // selected image (OPTIONAL) return (CBitmap *)(PCHAR(btn)+(ULONG)(PCHAR (&m_bitmapSel)-PCHAR(this)));//not PTCHAR, butPCHAR } inline CBitmap * Foc(){ // focused but not selected (OPTIONAL) return (CBitmap *)(PCHAR(btn)+(ULONG)(PCHAR (&m_bitmapFocus)-PCHAR(this)));//not PTCHAR, butPCHAR } inline CBitmap * Dis(){ // disabled bitmap (OPTIONAL) return (CBitmap *)(PCHAR(btn)+(ULONG)(PCHAR (&m_bitmapDisabled)-PCHAR(this)));//not PTCHAR, butPCHAR }因为CBitmapButton中有4种状态了 参考 skinfeaturehttp://www.skinfeature.com/bbs 判读汉字 为什么增加延时后才能够得到期望的执行结果 GIS数据库的问题:supermap的soRecordset mo的 Recordset 的 底层是如何设计的? 如何关闭通过webbrowser控件打开的doc文档? 一个关于 date time picker 控件的问题,请帮忙看一下. 为什么有时点击关闭按钮,对话框会死掉? Win2000 下用在VC里取显存大小 关于服务注册 地址转化 多线程堆内存分配问题 界面问题-窗口重绘? 如何在VC对话框的标题栏上添加一个按钮,THANKS
上面有三个button不同时期的图片
不能切
CImageList 的Draw不好控制
BOOL SetImageList(
PBUTTON_IMAGELIST pbuttonImagelist
);
这个好像可以绑定ImageList和Button
不用ImageList,網上大把的代碼啦。。呵呵,熟悉位圖操作和子類化按鈕的幾個狀態就ok的啦。
把按钮设置为OwnerDraw风格,在父窗口中响应WM_DRAWITEM消息,判断控件ID或者控件类型,如果是要处理的按钮,根据按钮状态用CImageList类的Draw函数来画相应的图。一共也就十几行代码就够了。
看看应该对你有帮助
m_list.Add(m_pApp->LoadIcon(IDI_ONE));
m_list.Add(m_pApp->LoadIcon(IDI_TWO));
listctrl.SetImageList(&m_list,LVSIL_SMALL);
自绘 BitBlt 设置好参数就可以了
m_ImageList.Create(40,40,ILC_COLOR32,3,1);m_ImageList.Add(&m_Bitmap);然后直接画用m_ImageList画就好了,画的时候给出Index.
inline CBitmap * Nor(){ //normal image (REQUIRED)
return (CBitmap *)(PCHAR(btn)+(ULONG)(PCHAR (&m_bitmap)-PCHAR(this)));//not PTCHAR, butPCHAR
}
inline CBitmap * Sel(){ // selected image (OPTIONAL)
return (CBitmap *)(PCHAR(btn)+(ULONG)(PCHAR (&m_bitmapSel)-PCHAR(this)));//not PTCHAR, butPCHAR
}
inline CBitmap * Foc(){ // focused but not selected (OPTIONAL)
return (CBitmap *)(PCHAR(btn)+(ULONG)(PCHAR (&m_bitmapFocus)-PCHAR(this)));//not PTCHAR, butPCHAR
}
inline CBitmap * Dis(){ // disabled bitmap (OPTIONAL)
return (CBitmap *)(PCHAR(btn)+(ULONG)(PCHAR (&m_bitmapDisabled)-PCHAR(this)));//not PTCHAR, butPCHAR
}
因为CBitmapButton中有4种状态了
http://www.skinfeature.com/bbs