在VC中透明浮动按键的实现-Read.DOCVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在中透明浮动按键的实现有一种按键看起来是一幅完整的图片当鼠标移到按键区域时图片的一部分凸现形成一个按键当鼠标移走时又恢复原来状态最近看了一些关于浮动按键的代码其原理大致上跟差不多用数幅位图代表按键的各个状态响应鼠标的各种消息来设置按键的状态实现按键的浮动显示但是这样的按键却不能和周围的背景混和成一幅图片为了实现透明按键可以简单地做个试验先在对话框中加入一个通过属性框选风格再加入一个并加入图片将移到上运行结果发现按键没有显示出来但在按键区域按下鼠标时该按键仍然能发出消息这样一个纯透明的按键建立了显

在VC中透明浮动按键的实现 有一种按键,看起来是一幅完整的图片,当鼠标移到按键区域时,图片的一部分凸现,形成一个按键,当鼠标移走时又恢复原来状态。 ?? 最近,看了一些关于浮动按键的代码,其原理大致上跟CBitmapButton差不多,用数幅位图代表按键的各个状态,响应鼠标的各种消息来设置按键的状态,实现按键的浮动显示,但是这样的按键却不能和周围的背景混和成一幅图片。 ?? 为了实现“透明”按键,可以简单地做个试验:先在对话框中加入一个BUTTON,通过属性框选“Owner Draw”风格,再加入一个PICTURE,并加入图片,将BUTTON移到PICTURE上。运行结果发现,按键没有显示出来,但在按键区域按下鼠标时,该按键仍然能发出WM_COMMAND消息,这样一个纯透明的按键建立了。显然,这个按键是毫无使用意义的,因为用户不知道按键的位置,必须让用户容易觉察到按键的位置,可以把这个按键改造一下: ?? (首先从CButton派生出一个新类CDrawButton) ?? ·把按键的标题显示出来 ?? 这个实现起来比较简单,我们可以重载CButton类的成员函数DrawItem(), void CDrawButton::DrawItem (LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC dc; CRect rect=lpDrawItemStruct-rcItem;//得到按键区域 CString sCaption; dc.Attach(lpDrawItemStruct- hDC); //得到设备环境CDC VERIFY(lpDrawItemStruct- CtlType==ODT_BUTTON); GetWindowText(sCaption);//得到按键的标题 dc.SetBkMode(TRANSPARENT);//透明显示 CFont* m_pOldFont=dc.SelectObject(m_pFont); dc.DrawText(sCaption,rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE); dc.SelectObject(m_pOldFont); } ?? 其中的m_pFont是成员变量,它保存了对话框的字体指针,为了按键的标题风格与对话框的字体风格一致,在初始化时调用对话框的成员函数GetFont()即可得到指向对话框字体的CFont类指针。 ?? ·使按键浮动显示 ??要通过自绘来表示按键的各种状态,可填写DRAWITEMSTRUCT来通知DrawItem()函数需要做什么,我们先了解一下DRAWITEMSTRUCT: typedef struct tagDRAWITEMSTRUCT{ ??UINT CtlType; // 控件类型 ??UINT CtlID;// 控件的ID号 ??UNIT itemID;//菜单项的索引 ??UINT itemAction;// 绘图操作 ??UINT itemState; // 状态 ??HWND hwndItem; // 控件的窗口句柄 ??HDC hDC; // 相关的设备环境 ??RECT rcItem;//控件的范围 ??DWORD itemData;//指定与菜单项相联系的应用程序定义的32位值 }DRAWITEMSTRUCT; ??利用这个结构先做一个按键状态设置函数: void CDrawButton::SetButtonMode(UINT action, UINT mode) { // TODO: Add your message handler code here and/or call default ??DRAWITEMSTRUCT DIS; ??DIS.CtlType = ODT_BUTTON; ??DIS.CtlID = GetDlgCtrlID(); ??DIS.itemAction = action; ??DIS.itemState = mode; ??DIS.hwndItem = GetSafeHwnd(); ??DIS.hDC = GetDC()- GetSafeHdc(); ??GetClientRect((DIS.rcItem)); ??SendMessage(WM_DRAWITEM,(WPARAM) GetSafeHwnd(),(LPARAM)DIS); ??ReleaseDC(CDC::FromHandle(DIS.hDC)); } ??这样,我们可以响应鼠标的各种消息来设置按键的各种状态: void CDrawButton::OnMo

文档评论(0)

wangsux + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档