在vc中透明浮动按键的实现

在vc中透明浮动按键的实现

ID:21734483

大小:36.00 KB

页数:7页

时间:2018-10-24

在vc中透明浮动按键的实现_第1页
在vc中透明浮动按键的实现_第2页
在vc中透明浮动按键的实现_第3页
在vc中透明浮动按键的实现_第4页
在vc中透明浮动按键的实现_第5页
资源描述:

《在vc中透明浮动按键的实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、在VC中透明浮动按键的实现有一种按键,看起来是一幅完整的图片,当鼠标移到按键区域时,图片的一部分凸现,形成一个按键,当鼠标移走时又恢复原来状态。  最近,看了一些关于浮动按键的代码,其原理大致上跟CBitmapButton差不多,用数幅位图代表按键的各个状态,响应鼠标的各种消息来设置按键的状态,实现按键的浮动显示,但是这样的按键却不能和周围的背景混和成一幅图片。  为了实现“透明”按键,可以简单地做个试验:先在对话框中加入一个BUTTON,通过属性框选“OwnerDraw”风格,再加入一个PICTURE,并加入图片,将BUTTON移到PICTURE上。运

2、行结果发现,按键没有显示出来,但在按键区域按下鼠标时,该按键仍然能发出WM_COMMAND消息,这样一个纯透明的按键建立了。显然,这个按键是毫无使用意义的,因为用户不知道按键的位置,必须让用户容易觉察到按键的位置,可以把这个按键改造一下:  (首先从CButton派生出一个新类CDrawButton)  ·把按键的标题显示出来  这个实现起来比较简单,我们可以重载CButton类的成员函数DrawItem(),voidCDrawButton::DrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct){CDCdc;CRectre

3、ct=lpDrawItemStruct->rcItem;//得到按键区域CStringsCaption;dc.Attach(lpDrawItemStruct->hDC);//得到设备环境CDCVERIFY(lpDrawItemStruct->CtlType==ODT_BUTTON);GetWindowText(sCaption);//得到按键的标题dc.SetBkMode(TRANSPARENT);//透明显示CFont*m_pOldFont=dc.SelectObject(m_pFont);dc.DrawText(sCaption,&rect,DT_C

4、ENTER

5、DT_VCENTER

6、DT_SINGLELINE);dc.SelectObject(m_pOldFont);}  其中的m_pFont是成员变量,它保存了对话框的字体指针,为了按键的标题风格与对话框的字体风格一致,在初始化时调用对话框的成员函数GetFont()即可得到指向对话框字体的CFont类指针。  ·使按键浮动显示  要通过自绘来表示按键的各种状态,可填写DRAWITEMSTRUCT来通知DrawItem()函数需要做什么,我们先了解一下DRAWITEMSTRUCT:typedefstructtagDRAWITEMSTRUCT{  U

7、INTCtlType;//控件类型  UINTCtlID;//控件的ID号  UNITitemID;//菜单项的索引  UINTitemAction;//绘图操作  UINTitemState;//状态  HWNDhwndItem;//控件的窗口句柄  HDChDC;//相关的设备环境  RECTrcItem;//控件的范围  DWORDitemData;//指定与菜单项相联系的应用程序定义的32位值}DRAWITEMSTRUCT;  利用这个结构先做一个按键状态设置函数:voidCDrawButton::SetButtonMode(UINTaction

8、,UINTmode){//TODO:Addyourmessagehandlercodehereand/orcalldefault  DRAWITEMSTRUCTDIS;  DIS.CtlType=ODT_BUTTON;  DIS.CtlID=GetDlgCtrlID();  DIS.itemAction=action;  DIS.itemState=mode;  DIS.hwndItem=GetSafeHwnd();  DIS.hDC=GetDC()->GetSafeHdc();  GetClientRect(&(DIS.rcItem));  SendM

9、essage(WM_DRAWITEM,(WPARAM)GetSafeHwnd(),(LPARAM)&DIS);  ReleaseDC(CDC::FromHandle(DIS.hDC));}  这样,我们可以响应鼠标的各种消息来设置按键的各种状态:voidCDrawButton::OnMouseMove(UINTnFlags,CPointpoint){  //TODO:Addyourmessagehandlercodehereand/orcalldefault  CRectrect;  GetClientRect(&rect);  if(rect.PtIn

10、Rect(point)){    if(mBtnStats==BTN_NORMA

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。