GetSysColor

GetSysColor

VB声明
Declare Function GetSysColor Lib "user32" Alias "GetSysColor" (ByVal nIndex As Long) As Long
说明
判断指定windows显示对象的颜色
返回值
Long,指定对象的RGB颜色
参数表
参数类型及说明
nIndexLong,一个常数,指出特定的windows显示对象,如下表
Windows对象常数表
常数定义Windows对象常数定义Windows对象
COLOR_ACTIVEBORDER活动窗口的边框COLOR_ACTIVECAPTION活动窗口的标题
COLOR_APPWORKSPACEMDI桌面的背景COLOR_BACKGROUNDwindows桌面
COLOR_BTNFACE按钮COLOR_BTNHIGHLIGHT按钮的3D加亮区
COLOR_BTNSHADOW按钮的3D阴影COLOR_BTNTEXT按钮文字
COLOR_CAPTIONTEXT窗口标题中的文字COLOR_GRAYTEXT灰色文字;如使用了抖动技术则为零
COLOR_HIGHLIGHT选定的项目背景COLOR_HIGHLIGHTTEXT选定的项目文字
COLOR_INACTIVEBORDER不活动窗口的边框COLOR_INACTIVECAPTION不活动窗口的标题
COLOR_INACTIVECAPTIONTEXT不活动窗口的文字COLOR_MENU菜单
COLOR_MENUTEXT菜单正文COLOR_SCROLLBAR滚动条
COLOR_WINDOW窗口背景COLOR_WINDOWFRAME窗框
COLOR_WINDOWTEXT窗口正文COLOR_3DDKSHADOW3D深阴影 *
COLOR_3DFACE3D阴影化对象的正面颜色 *COLOR_3DHILIGHT3D加亮颜色(win95)
COLOR_3DLIGHT3D阴影化对象的浅色 *COLOR_INFOBK工具提示的背景色 *

COLOR_INFOTEXT

工具提示的文本色 *  
*:带 * 号的常数未获NT 3.51的支持
 
在MFC中创建自绘按钮,首先需要申明按钮具有自绘属性。然后,通过处理`WM_MEASUREITEM`消息来设定按钮尺寸,并通过`WM_DRAWITEM`消息来绘制按钮的外观。以下是详细的实现步骤和代码示例: 参考资源链接:[MFC自绘按钮教程:从入门到实践](https://wenku.youkuaiyun.com/doc/2008pr4vr1?spm=1055.2569.3001.10343) 1. **申明自绘属性**: 在对话框资源编辑器中,选择你的按钮控件,并设置其样式为`BS_OWNERDRAW`。 2. **处理VM_MESUREITEM事件**: 在你的对话框类中重写`OnMeasureItem`函数,计算并设置按钮的高度和宽度。 ```cpp void CYourDialog::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) { // 设置按钮的宽度和高度 lpMeasureItemStruct->itemHeight = 40; lpMeasureItemStruct->itemWidth = 100; } ``` 3. **处理VM_DRAWITEM事件**: 在`OnDrawItem`函数中,使用`CDC`类和`CBitmap`类来绘制按钮的不同状态(如正常、按下、鼠标悬停)。 ```cpp void CYourDialog::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); CRect rcItem(lpDrawItemStruct->rcItem); UINT state = lpDrawItemStruct->itemState; // 根据按钮状态设置绘制参数 pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT)); pDC->SetBrushStyle(BS_SOLID); if (state & ODS_SELECTED) { pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT)); pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT)); pDC->FillSolidRect(&rcItem, ::GetSysColor(COLOR_HIGHLIGHT)); // 绘制选中状态下的按钮文字或图形 } else { pDC->SetBkColor(::GetSysColor(COLOR_WINDOW)); pDC->FillSolidRect(&rcItem, ::GetSysColor(COLOR_WINDOW)); // 绘制正常状态下的按钮文字或图形 } // 绘制按钮边框等其他细节 pDC->Rectangle(&rcItem); } ``` 在实际应用中,你可能需要加载自定义位图资源,绘制复杂的图形或文字,以及处理按钮的不同状态。为了实现这些功能,建议深入学习`CDC`类和`CBitmap`类的文档,掌握如何使用这些类进行图形绘制和资源管理。 为了进一步提高绘图效率,可以通过位图缓存技术来优化。在按钮状态发生变化时,只更新变化的部分,而不是每次都重新绘制整个按钮。 总之,创建和管理自绘按钮需要深入了解MFC的消息处理机制、绘图函数和资源管理。对于希望深入学习MFC绘图和自定义控件的开发者来说,《MFC自绘按钮教程:从入门到实践》是一份不可多得的资料,它详细地介绍了从基本到高级的各种自绘控件实现技巧,同时提供了丰富的代码示例和项目实战,将帮助你全面掌握MFC自绘按钮的开发流程和技巧。 参考资源链接:[MFC自绘按钮教程:从入门到实践](https://wenku.youkuaiyun.com/doc/2008pr4vr1?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值