3248|4

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

VS2005 Win32 位图控件 [复制链接]


  我现在用VS2005 得移动设备下得Win32编写应用软件。发现在VS2005移动设备下,没有包含CBitmap Button类。
  请问我才能怎么实现位图控件呢?
  谢谢!!!

最新回复

做记号~~慢慢看  详情 回复 发表于 2009-5-23 10:03
点赞 关注

回复
举报

89

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己扩展CButton 贴图,网上有很多代码,codeproject,codeguru.
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
1 在控件中添加普通的button控件,并设置属性——>Owner Draw为True
2 在消息处理中,对该button控件进行重绘,其中iCtrlID为控件的ID


  1. case WM_DRAWITEM:
  2.     DrawImgButton(HWND hDlg,  WPARAM wParam, LPARAM lParam,int iCtrlID,HBITMAP bitmap);
复制代码


3 在自定义的函数DrawImgButton()中,
1)位图输出相关
从lParam参数中取出如下参数,
dc= lpDIS->hDC 设备描述符
itemRectlpDIS->rcItem 绘图区域
创建位图的内存描述符hMemDC并关联
HDC hMemDC = CreateCompatibleDC(dc);

2)button按钮动作相关
从Iparam中取出如下参数
lpDIS->itemAction 控件动作
lpDIS->itemState 控件状态
来判断按钮的按下、释放状态
利用StretchBlt函数来输出位图到按钮所在区域,这样就完成了自绘按钮,示例代码如下:


  1. DrawImgButton(HWND hDlg,  WPARAM wParam, LPARAM lParam,int iCtrlID,HBITMAP bitmap)
  2. {

  3.         LPDRAWITEMSTRUCT lpDIS = (LPDRAWITEMSTRUCT)lParam;
  4.         HDC dc = lpDIS->hDC;
  5.         RECT itemRect = lpDIS->rcItem;

  6.         HDC hMemDC = CreateCompatibleDC(dc);
  7.         SelectObject(hMemDC, bitmap);

  8.         if(lpDIS->CtlID == 0)
  9.         {
  10.                 return (0);
  11.         }   
  12.         else if(lpDIS->CtlID == iCtrlID)
  13.         {
  14.                 if((lpDIS->itemAction & ODA_DRAWENTIRE))//|| ((lpDIS->itemAction | ODA_SELECT) && (lpDIS->itemState == ODS_FOCUS) ) )
  15.                 {
  16.                         UINT uState = DFCS_BUTTONPUSH |
  17.                                 ((bIsPressed) ? DFCS_PUSHED : 0);                  
  18.                        
  19.                         SetStretchBltMode(dc,COLORONCOLOR);
  20.                         StretchBlt(dc,
  21.                                 itemRect.left,itemRect.top, itemRect.right-itemRect.left, itemRect.bottom-itemRect.top,  
  22.                                 hMemDC,
  23.                                 0,0, 70,70,
  24.                                 SRCCOPY);
  25.                        
  26.                 }
  27.                 else if( (lpDIS->itemAction | ODA_SELECT) && (lpDIS->itemState == (ODS_FOCUS | ODS_SELECTED) ) )
  28.                 {
  29.                         SetStretchBltMode(dc,COLORONCOLOR);
  30.                         StretchBlt(dc,
  31.                                 itemRect.left,itemRect.top, itemRect.right-itemRect.left, itemRect.bottom-itemRect.top,
  32.                                 hMemDC,
  33.                                 0,0, 70,70,
  34.                                 SRCCOPY);
  35.                 }       
  36.                 DeleteDC(hMemDC);
  37.         }

  38.         //pDCUnpress->DeleteDC();
  39.         return (INT_PTR)FALSE;
  40. }

复制代码
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

4
 
1 在控件中添加普通的button控件,并设置属性——>Owner Draw为True
2 在消息处理中,对该button控件进行重绘,其中iCtrlID为控件的ID


  1. case WM_DRAWITEM:
  2.     DrawImgButton(HWND hDlg,  WPARAM wParam, LPARAM lParam,int iCtrlID,HBITMAP bitmap);
复制代码


3 在自定义的函数DrawImgButton()中,
1)位图输出相关
从lParam参数中取出如下参数,
dc= lpDIS->hDC 设备描述符
itemRectlpDIS->rcItem 绘图区域
创建位图的内存描述符hMemDC并关联
HDC hMemDC = CreateCompatibleDC(dc);

2)button按钮动作相关
从Iparam中取出如下参数
lpDIS->itemAction 控件动作
lpDIS->itemState 控件状态
来判断按钮的按下、释放状态
利用StretchBlt函数来输出位图到按钮所在区域,这样就完成了自绘按钮,示例代码如下:


  1. DrawImgButton(HWND hDlg,  WPARAM wParam, LPARAM lParam,int iCtrlID,HBITMAP bitmap)
  2. {

  3.         LPDRAWITEMSTRUCT lpDIS = (LPDRAWITEMSTRUCT)lParam;
  4.         HDC dc = lpDIS->hDC;
  5.         RECT itemRect = lpDIS->rcItem;

  6.         HDC hMemDC = CreateCompatibleDC(dc);
  7.         SelectObject(hMemDC, bitmap);

  8.         if(lpDIS->CtlID == 0)
  9.         {
  10.                 return (0);
  11.         }   
  12.         else if(lpDIS->CtlID == iCtrlID)
  13.         {
  14.                 if((lpDIS->itemAction & ODA_DRAWENTIRE))//|| ((lpDIS->itemAction | ODA_SELECT) && (lpDIS->itemState == ODS_FOCUS) ) )
  15.                 {
  16.                         UINT uState = DFCS_BUTTONPUSH |
  17.                                 ((bIsPressed) ? DFCS_PUSHED : 0);                  
  18.                        
  19.                         SetStretchBltMode(dc,COLORONCOLOR);
  20.                         StretchBlt(dc,
  21.                                 itemRect.left,itemRect.top, itemRect.right-itemRect.left, itemRect.bottom-itemRect.top,  
  22.                                 hMemDC,
  23.                                 0,0, 70,70,
  24.                                 SRCCOPY);
  25.                        
  26.                 }
  27.                 else if( (lpDIS->itemAction | ODA_SELECT) && (lpDIS->itemState == (ODS_FOCUS | ODS_SELECTED) ) )
  28.                 {
  29.                         SetStretchBltMode(dc,COLORONCOLOR);
  30.                         StretchBlt(dc,
  31.                                 itemRect.left,itemRect.top, itemRect.right-itemRect.left, itemRect.bottom-itemRect.top,
  32.                                 hMemDC,
  33.                                 0,0, 70,70,
  34.                                 SRCCOPY);
  35.                 }       
  36.                 DeleteDC(hMemDC);
  37.         }

  38.         //pDCUnpress->DeleteDC();
  39.         return (INT_PTR)FALSE;
  40. }

复制代码
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
做记号~~慢慢看
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表