用VC++实现自绘按钮控制(from

用VC++实现自绘按钮控制(from

ID:37775087

大小:40.00 KB

页数:5页

时间:2019-05-30

用VC++实现自绘按钮控制(from_第1页
用VC++实现自绘按钮控制(from_第2页
用VC++实现自绘按钮控制(from_第3页
用VC++实现自绘按钮控制(from_第4页
用VC++实现自绘按钮控制(from_第5页
资源描述:

《用VC++实现自绘按钮控制(from》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、用VC++实现自绘按钮控制(from:vckbase)□四川曾志MicrosoftWindows以其丰富一致的图形用户界面,简单灵便的操作,被广大用户所接受。对话框就是其中一个非常重要的界面形式,并且Windows为其应用程序的开发者提供了相当丰富的界面资源,许多控制可以方便地加入对话框中。但当我们需要编写一个商业应用,需要一个更友好的图形用户界面时,就会发现资源的贫乏。VisualC++提供了一个CBitmapButton类在一定程序上缓解了增加新资源的要求。但当我们要求在程序中能动态地改变图形时,我们就不得不考虑放弃CBitmapButton类,而坐下来自己做一点工作了。一个可行的办法就是

2、重载CButton类(即按钮控制)。这样对这块区域的大小、位置和ID号都可以通过AppStadio方便地制作。当然这样作最大的好处还是在于充分利用C++的特性把绘制控制的代码封装了起来,既避免了重复性开发,又使程序变得更简洁,增强了代码的可读性。现在我们就通过创建一个名叫CColorButton的类来学习这种方法。虽然这是一个功能非常简单的类,通过调用成员函数ChangeColor可改变其颜色,鼠标点中时则高亮边框表示选中。但利用这种思路我们只需添加几个数据成员和重载一个函数就可以方便地实现你所需要的功能。在创建这个类之前,我们必须先了解WM_DRAWITEM消息。当按钮、组合框、列表框或菜单

3、的某一视觉状况发生变化时,系统就会发送一条WM_DRAWITEM消息给这些控制的拥有者窗口。这个消息的wParam指出这个控制的id号,而IParam则是一个指向DRAWITEMSTRUCT结构的指针,该结构存放有关要绘制的项的信息以及绘制所需的类型。DRAWITEMSTRUCT结构具有如下格式。typedefstructtagDRAWITEMSTRUCT{UINTCtlType;//控制类型UINTCtlID;//控制的ID号UNITitemID;//菜单项的索引UINTitemAction;//说明需要的绘图操作UINTitemState;//指明绘图后的可见状态HWNDhwndIte

4、m;//控制的窗口句柄HDChDC;//相关的设备环境RECTrcItem;//被画控制的边框DWORDitemData;//指定与菜单项相联系的应用程序定义的32位值}DRAWITEMSTRUCT;其中itemAction和itemState决定了需要的绘图操作。itemAction说明需要的绘图操作,可为下列值中的一个或多个;值含义ODA_DRAWENTIRE需要重来全部控制时ODA_FOCUS获得或失去输入焦点ODA_SELECT选择状态改变itemState指明当前绘图动作发生之后,项的可见状态。下面是状态标志:值含义ODS_CHECKD只用于菜单中ODS_DISABLE该项被屏蔽OD

5、S_FOCUS该项具有输入焦点ODS_GRAYED只用于菜单中ODS_SELECT该项处于被选中状态利用VC++编程会发现,当按钮控制接收到WM-DRMAWITEM消息时会调用Cbotton类的DrawItem函数。因此我们要做的就是利用C++的多态性通过重载CButton类的Drawitem函数来响应MW-DRAWITEM消息。下面我们就实际构造一个CColorButton类。classccolorButton:publicCButton{private:COLORREFm-color:public:CColorButton():CButton(),m-color(0){};//构造函数v

6、oidChangeColor(COLORREFcolor);//改变颜色virtualvoidDrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct);//重载的函数};//重载的虚函数voidCColorButton::DrawItem(LPDRAWITEMSTRUCTlpDrawItemtruct){CDCdc;dc.Attach(lpDrawItemStruct->hDC);//得到绘制的设备环境CDCVERIFY(lpDrawItemStruct->CtlType==ODT-BUTTON);if(lpDrawItemStruct->itemAction&OD

7、A-DRAWENTIRE){//重绘整个控制CBrushbrush(m-Color);dc.FillRect(&(lpDrawItemstruct->reItem),&brush);}if((lpDrawItemStruct->itemstate&ODS-SELECTED)&&(lpDrawItemStruct->itemAction&(ODA-SELECT|ODA-DRAWENTIRE))){/

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

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

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