WEB开发网
开发学院软件开发VC 用VC++实现自绘按钮控制 阅读

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

 2008-11-13 19:31:12 来源:WEB开发网   
核心提示:Microsoft Windows以其丰富一致的图形用户界面,简单灵便的操作,被广大用户所接受.对话框就是其中一个非常重要的界面形式,并且Windows为其应用程序的开发者提供了相当丰富的界面资源,许多控制可以方便地加入对话框中. 但当我们需要编写一个商业应用,需要一个更友好的图形用户界面时,就会发现资源的贫乏.Vis

Microsoft Windows以其丰富一致的图形用户界面,简单灵便的操作,被广大用户所接受.对话框就是其中一个非常重要的界面形式,并且Windows为其应用程序的开发者提供了相当丰富的界面资源,许多控制可以方便地加入对话框中.

但当我们需要编写一个商业应用,需要一个更友好的图形用户界面时,就会发现资源的贫乏.

Visual C++提供了一个CBitmap Button类在一定程序上缓解了增加新资源的要求.但当我们要求在程序中能动态地改变图形时,我们就不得不考虑放弃CBitmapButton类,而坐下来自己做一点工作了.

一个可行的办法就是重载CButton类(即按钮控制).这样对这块区域的大小、位置和ID号都可以通过AppStadio方便地制作.当然这样作最大的好处还是在于充分利用C++的特性把绘制控制的代码封装了起来,既避免了重复性开发,又使程序变得更简洁,增强了代码的可读性.

现在我们就通过创建一个名叫CColorButton的类来学习这种方法.虽然这是一个功能非常简单的类,通过调用成员函数ChangeColor可改变其颜色,鼠标点中时则高亮边框表示选中.但利用这种思路我们只需添加几个数据成员和重载一个函数就可以方便地实现你所需要的功能.

在创建这个类之前,我们必须先了解WM_DRAWITEM消息.当按钮、组合框、列表框或菜单的某一视觉状况发生变化时,系统就会发送一条WM_DRAWITEM消息给这些控制的拥有者窗口.这个消息的wParam指出这个控制的 id 号,而IParam则是一个指向DRAWITEMSTRUCT结构的指针,该结构存放有关要绘制的项的信息以及绘制所需的类型.DRAWITEMSTRUCT结构具有如下格式.

  typedef struct tagDRAWITEMSTRUCT{
UINT CtlType; // 控制类型
UINT CtlID;// 控制的ID号
UNIT itemID;//菜单项的索引
UINT itemAction;// 说明需要的绘图操作
UINT itemState; // 指明绘图后的可见状态
HWND hwndItem; // 控制的窗口句柄
HDC hDC; // 相关的设备环境
RECT rcItem;//被画控制的边框
DWORD itemData;// 指定与菜单项相联系的应用程序定义的32位值
}DRAWITEMSTRUCT;

1 2 3  下一页

Tags:VC 实现 按钮

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接