快讯
- 装机圈新宠儿,微星 MAG B850M MORTAR Wi-Fi迫击炮主板评测
- 微星MPG Z890I EDGE TI WIFI 刀锋 钛评测:14 层 PCB 加持,同级之中强无敌!
- 打造低调而卓越的Ai PC,微星MEG Z890 ACE战神主板开箱
- 解密“星”制造,微星深圳恩斯迈工厂探秘之旅
- 游泳也需音乐相伴!韶音OpenSwim Pro评测
- 又一款轻量化电竞
- 元气满满的充电之旅!铂陆帝商超活动嗨翻周末
- 雷柏机甲编码主题系列警戒线S-07图赏:以机械美感诠释潮流新理念桌搭!
- 更适合新手体质的枪战游戏,《无畏契约》开战!
- 现代与传统的融合之旅:贝尔金笔记本扩展坞体验
- 航天品质下的极速充电体验——航嘉G65 GaN快速充电器评测
- 有颜有实力的外设谁能不爱?来看雷柏商超巡演
- 新潮外设引爆全场!雷柏联合PC打造潮品酷玩趴
- 幻彩绚丽,玩趣十足!雷柏V700DIY键盘图赏
- U皇就该配板皇,超频玩家现身说法教你选主板
- 13代酷睿的超频利器,有好板才有好性能
- 全新升级,雷柏V20S RGB光学游戏鼠标2023版详解
- 马斯克30亿放“烟花”,民航故事为何值钱?
- 让露营生活更精致!铂陆帝户外电源AC180评测
- 惠威音响体验:音响中的艺术品,拥有好听的灵魂
- 装机圈新宠儿,微星 MAG B850M MORTAR WiFi迫击炮主板评测31日
- 微星MPG Z890I EDGE TI WIFI 刀锋 钛评测:14 层 PCB 加持,同级之中强无敌!29日
- 打造低调而卓越的Ai PC,微星MEG Z890 ACE战神主板开箱10日
- 解密“星”制造,微星深圳恩斯迈工厂探秘之旅02日
- 游泳也需要音乐相伴!韶音新一代游泳耳机OpenSwim Pro评测12日
- 又一款轻量化电竞"神鼠"来袭!玄熊猫3395游戏鼠标今晚首发149元10日
- 元气满满的充电之旅!铂陆帝商超活动嗨翻周末27日
- 雷柏机甲编码主题系列警戒线S-07图赏:以机械美感诠释潮流新理念桌搭!24日
- 更适合新手体质的枪战游戏,《无畏契约》国服正式开战!20日
- 玩物近话论:现代科技与甘南秘境的融合之旅 贝尔金笔记本扩展坞体验14日
- 航天品质下的极速充电体验——航嘉G65 GaN快速充电器评测12日
- 有颜有实力的外设好物谁能不爱?雷柏点燃PCGROUP潮品商超巡演15日
- 新潮外设好物引爆全场!雷柏联合PCGROUP打造潮品酷玩趴15日
- 幻彩绚丽,玩趣十足!雷柏V700DIY热插拔机械键盘图赏10日
- U皇就该配板皇,超频玩家现身说法教你选主板26日
- 13代酷睿的超频利器,有好板才有好性能25日
- 全新升级 经典复刻 雷柏V20S RGB光学游戏鼠标2023版详解25日
- 马斯克30亿放“烟花”,民航故事为何值钱?23日
- 告别电量焦虑,让露营生活多一分精致!铂陆帝户外电源AC180开箱评测17日
- 惠威音响体验:音响中的艺术品,拥有好听的灵魂04日
扩展MFC类库建立自己的界面类库(1)
2004-02-14 09:34 出处:PConline 作者:雷神 责任编辑:zwg
1回顶部 作者:雷神
转载请联系作者
除非应用程序只是给自己使用,否则它的价值必须由别人决定。应用程序的界面对用户的影响很大——无论程序代码如何高效,功能如何强大,如果用户发现它太难使用,那么这个程序就不会得到广泛的应用。摘自《Visual C++图形用户界面开发指南》
如何建立一个优秀的应用程序界面呢,当然通过MFC可以很轻松的生成应用程序的基本框架,使得应用程序有着标准的WINDOWS程序的“面容”,不过如果你想给它整整容那就需要扩展MFC类库建立自己的界面类库。
按钮类
CObject类的派生结构
CObject
|-CCmdTarget
|-CWnd
|-CButton
|-CBitmapButton
【说 明】CButton类提供Windows按钮控件的功能。常用的按钮控件风格有检取框风格、单选按钮风格和标准风格。按钮控件的风格由成员函数Create在初始化时指定。从CButton类派生的CBitmapButton类支持创建用位图代替文本的按钮控件。CBitmapButton可以具有几个独立的位图分别代表按钮的上、下、聚焦和禁止状态。当CButton类的对象被点击时将向父窗口发送消息.应用程序可以从对话模板创建按钮控件,也可用代码直接创建。在两种情况中,都要首先调用构造函数Cbutton()构造CButton类的对象;然后调用成员函数Create()创建Windows按钮控件,并将它附着于CButton类的对象。用CButton创建按钮可以一步实现。在派生类中设计构造函数,并在其中直接调用Create函数。如果希望处理由按钮控件向其父窗口类发送Windows的通告消息则需要在相应的父窗口类中添加消息映射入口和消息处理函数。
每个消息映射入口都具有以下形式:
ON_Notification(id,memberFxn)
其中id指定了发送通告信息的控件id,而memberFxn则指定了用于处理控件通告的消息成员函数。
消息处理函数如下:
afx_msg void memberFxn();2回顶部
【库 名】3回顶部
(3)virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
【参 数】 lpDrawItemStruct //一个指向DRAWITEMSTRUCT结构的长整型指针,该结构中包含有关被绘制项的信息和 要求的绘制类型。
【注 释】当自画风格的按钮控件的可见部分发生变化时,此成员函数被调用来重绘控件。
(4)HBITMAP GetBitmap() const;
【返回值】获得由成员函数SetBitmap设置的位图的句柄。
(5)UINT GetButtonStyle() const;
【返回值】返回某个按钮控件风格的代码,它只返回按钮控件风格的代码而不会返回按钮控件的窗口风格代码。含义参见成员函数SetButtonStyle。
(6)int GetCheck() const;
【返回值】返回某个检取框风格、单选按钮风格或3态检取框风格按钮控件的检取状态。含义参见成员函数SetCheck。
(7)HCURSOR GetCursor();
【返回值】获得由成员函数SetCursor设置的光标的句柄。
(8)HICON GetIcon() const;
【返回值】获得由成员函数SetIcon设置的图标的句柄。
(9)UINT GetState() const;
【返回值】返回某个按钮控件的当前状态。它包括检取状态、加亮状态和焦点状态三部分。0x0008表示按钮控件拥有焦点,0x0004表示按钮控件被加亮,检取状态值的含义见函数SetCheck。
(10)HBITMAP SetBitmap(HBITMAP hBitmap);
【返回值】返回先前设置在按钮控件上的位图的句柄。
【参 数】 hBitmap //指定将显示在按钮控件上的位图的句柄。
【注 释】在使用该成员函数之前必须在初始化时设置BS_BITMAP标志,否则无效。可能是由于按钮类中没有复制被设置位图的句柄,所以设置位图的句柄的作用域应至少等于按钮控件变量的作用域以保证在按钮重画时显示正确。
(11)void SetButtonStyle(UINT nStyle, BOOL bRedraw = TRUE);
【参 数】nStyle //指定按钮控件风格的代码。见成员函数Create。
bRedraw = TRUE //当该参数非零时重画按钮控件,否则不重画。缺省设置为重画。
【注 释】改变某个按钮控件的风格。
该成员函数只能设置按钮控件的风格代码,而不能设置窗口的风格代码,窗口风格代码只能创建时设置。 该成员函数对于风格代码BS_LEFTTEXT、BS_TEXT、BS_BITMAP、BS_ICON、BS_TOP、BS_BOTTOM、BS_LEFT、BS_RIGHT、BS_RIGHTBUTTON、BS_PUSHLIKE、BS_MULTILINE、BS_FLAT和BS_NOTIFY设置无效,上述风格代码均须在初始化时设置。
(12)void SetCheck(int nCheck);
【参 数】nCheck //指定检取的状态,可以为以下值。
定义的常量值及含义
BST_UNCHECKED 0 没有被选中
BST_CHECHED 1 被选中了
BST_INDETERMINATE 2 模糊状态
【注 释】设置某个检取框风格、单选按钮风格或3态检取框风格按钮控件的检取状态。
(13)HCURSOR SetCursor(HCURSOR hCursor);
【返回值】返回先前设置在按钮控件上的光标的句柄。
【参 数】hCursor //指定将显示在按钮控件上的光标的句柄。
【注 释】在使用该成员函数之前必须在初始化时设置BS_ICON标志,否则无效。可能是由于按钮类中没有复制被设置光标的句柄,所以设置光标的句柄的作用域应至少等于按钮控件变量的作用域以保证在按钮重画时显示正确。
(14)HICON SetIcon(HICON hIcon);
【返回值】返回先前设置在按钮控件上的图标的句柄。
【参 数】hIcon //指定将显示在按钮控件上的图标的句柄。
【注 释】在使用该成员函数之前必须在初始化时设置BS_ICON标志,否则无效。可能是由于按钮类中没有复制被设置图标的句柄,所以设置图标的句柄的作用域应至少等于按钮控件变量的作用域以保证在按钮重画时显示正确。
(15)void SetState(BOOL bHighlight);
【参 数】bHighlight //对于标准风格的按钮控件,参数为TURE时按钮控件被按下,为FALSE时控件被弹起。
对于检取框风格、单选按钮风格或3态检取框风格的按钮控件,参数为TURE时控件的选择框被加亮,为FALSE时控件的选择框恢复。
【注 释】将某个按钮控件设置为加亮状态。
以上我们对MFC的Cbutton类有了一个详细的了解,由于MFC支持自绘制(owner-draw)概念,自绘制的控制类,通过调用DrawItem() 函数实现控件的绘制,由于控件绘制,消息检测和消息比较代码是在控件中实现而不足在拥有控件的窗口中实现,因而叫自绘制。因而通过重载虚函数virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);函数来控制控件的外观和行为,实现控制所需要的参数,都包含在LPDRAWITEMSTRUCT结构中。
lpDrawItemStruct:是指向DRAWITEMSTRUCT结构的指针,它为需要自己绘制的对象(控件或菜单项)提供了必要的信息,并决定了绘制的方式和细节,需要自己绘制的控件或菜单项的父窗口,将指向该结构的指针作为WM_DRAWITEM消息的lParam参数。4回顶部
DRAWITEMSTRUCT 结构:
typedef struct tagDRAWITEMSTRUCT
{
UINT CtlType;
UINT CtlID;
UINT itemID;
UINT itemAction;
UINT itemState;
HWND hwndItem;
HDC hDC;
RECT rcItem;
DWORD itemData;
} DRAWITEMSTRUCT;
【结构成员】
CtlType——指定了控件的类型,有以下几种取值:
ODT_BUTTON 自绘制按钮
ODT_COMBOBOX 自绘制组合框
ODT_LISTBOX 自绘制列表框
ODT_MENU 自绘制菜单项
ODT_LISTVIEW 自绘制列表视
ODT_STATIC 自绘制静态控件
ODT_TAB Tab控件
CtlID——指定了需要自绘制的控件ID,而对于菜单项无需使用。
itemID——是菜单项的ID或列表框或组合框的索引。
itemAction——绘制动作,有以下几种取值:
ODA_DRAWENTIRE 整个控件都需被绘制
ODA_FOCUS 控件需要获得或失去焦点时被绘制
ODA_SELECT 控件需要在被选中时绘制
itemState——当绘制完成后的,所绘项的可见状态,有以下几种取值:
ODS_CHECKED 如果菜单项将被选中,则设置该值(只对菜单项有效)
ODS_DISABLED 如果绘制项将被禁止,则设置该值
ODS_FOCUS 如果绘制项需要输入焦点,则绘制该值
ODS_GRAYED 如果绘制项需要被灰色显示,则设置该值
ODS_SELECTED 如果绘制项需要被设置为选中状态,则设置该值
ODS_COMBOBOXEDIT 在自绘制组合框中只绘制选择区域
ODS_DEFAULT 自绘制项为默认项
hwndItem——指定了组合框、列表框和按钮等自绘制控件的窗口句柄;包含菜单项的菜单句柄(HMENU)
hDC——设备环境的句柄。
rcItem——控件外观大小的矩形。
itemData——传递给控件的值。
|
最热搜索
无线路由器怎么用 会说话的汤姆猫电脑版 12306网上订火车票 跳舞吧 flash player 下载 PP助手电脑版 Adobe Reader(pdf阅读) iOS6正式版12项新功能 QQ空间克隆器 9158视频KTV 植物大战僵尸辅助工具 Win8怎么关机 QQ空间进不去 2013年春节是几月几号 QQ昵称 QQ空间皮肤 PPT模板 电脑输入法不见了怎么办 2012中秋节是几月几日 word安全模式 qq输入法怎么点亮 IE修复 感恩节是几月几日 CSS布局 PS快捷键 Outlook设置 声卡驱动器官方免费下载 格式工厂怎么用 桌面图标有阴影怎么去掉 Windows RT是什么意思 2013年日历设计 Word打不开怎么办 Win8专区 腾讯微云网 windows8激活工具 剑灵什么时候公测 QQ通讯录怎么用 开心斗地主 拖拉机小游戏 麻将游戏 中国象棋 德州扑克 黄金矿工中文版 保皇扑克游戏 四国军棋 万圣节是几月几日 ps抠图教程 12306订票助手 万圣节小游戏大全 rar文件怎么打开 Photoshop CS6教程 iOS6完美越狱 QQ个性签名