社区
界面
帖子详情
请教各位老师,怎么改变按钮的颜色
kenzo1939
2003-06-10 08:09:20
请教各位老师,怎么改变按钮的颜色
对话框上面的按钮。
...全文
46
4
打赏
收藏
请教各位老师,怎么改变按钮的颜色
请教各位老师,怎么改变按钮的颜色 对话框上面的按钮。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
eeeeinternet
2010-06-06
打赏
举报
回复
最近正在写mfc的一个小程序,为界面伤透了脑筋。就拿button来说吧,总觉得每个button贴图很不方便。很想知道有没有更为方便的方法。
feiniaoliang
2003-06-12
打赏
举报
回复
在Windows中Edit,StaticBox的背景色都可以通过处理WM_CTLCOLOR消息来改变,但Push Button却不行。
唯一的方法是使用OwnerDraw风格的按钮。本文讲述的方法是使用CButton的派生类。
class CCButton : public CButton
{
DECLARE_DYNAMIC(CCButton)
public:
CCButton();
virtual ~CCButton();
BOOL CCButton::Attach(const UINT nID, CWnd* pParent)
protected:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS);//必需重载的函数
public:
COLORREF m_fg, m_bg, m_disabled_fg, m_disabled_bg;//四种颜色分别为文字,背景,失效时文字,失效时背景
};
实现DrawItem
void CCButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
CDC* pDC = CDC::FromHandle(lpDIS->hDC);//???????DC
UINT state = lpDIS->itemState; //得到状态
CRect focusRect, btnRect;//两个矩形,表示得当输入焦点时的虚线矩形和按钮矩形
focusRect.CopyRect(&lpDIS->rcItem);
btnRect.CopyRect(&lpDIS->rcItem);
//
//调整虚线矩形
//
focusRect.left += 4;
focusRect.right -= 4;
focusRect.top += 4;
focusRect.bottom -= 4;
//
// 得当Button上文字
//
const int bufSize = 512;
TCHAR buffer[bufSize];
GetWindowText(buffer, bufSize);
// 使用m_fg, m_bg颜色利用 Draw3dRect(...)绘制按钮边框
// FillRect(...)填充按钮内部
// DrawText(...)绘制文字
//根据当前状态调整显示
//
if (state & ODS_FOCUS) {
.........//得到输入焦点,通过focusRect画虚线
if (state & ODS_SELECTED){
.....// 被按下,绘制下陷边框
}
}
else if (state & ODS_DISABLED) {
//失效,通过m_disabled_fg, m_disabled_bg 重绘按钮内部
}
}
CCButton是CButton派生类,具有CButton的全部成员函数,但在创建时需要使用BS_OWNERDRAW风格。
如果按钮不是动态生成,使用Attach函数使CCButton代替原来按钮的窗口过程。
BOOL CCButton::Attach(const UINT nID, CWnd* pParent)
{
GetDlgItem(nID)->ModifyStyle(0,BS_OWNERDRAW,0);
if (!SubclassDlgItem(nID, pParent))
return FALSE;
return TRUE;
}
如在一对话框的InitDialog(...)中加入下面几行
{// 假定 m_cbBtn为成员变量 IDC_BUTTON1为一按钮ID值
m_cbBtn.Attach(IDC_BUTTON1,this);
}
思危
2003-06-12
打赏
举报
回复
响应OnCtlcolor,搜索一下以前的帖子,很多
zyleon
2003-06-10
打赏
举报
回复
http://sanjianxia.myrice.com/vc/vc37.htm
Python训练营103期开班典礼直播回放
#《5天Python闯关训练营》学习计划#挑战周期:12月16日—12月20日直播安排:开班典礼:12...完成相应的软件安装及环境搭建学习服务:12.16-12.20日为本课正式服务周期期间遇到学习问题可社群
请教
,群内安排助教
老师
答疑
vb/vb.net开发技巧荟萃(九)
各位大侠看看我这程序 求解 小白向各位
请教
下VB过滤广告的问题 关于回调函数的问题 新手
请教
ocx文件创建的问题 如何用vb自动填写、选择下拉框选项并提交网页表单?? 如何恢复最大化 如何写外接程序启动...
vb/vb.net开发精粹(14)
小白向各位
请教
下VB过滤广告的问题 关于回调函数的问题 新手
请教
ocx文件创建的问题 如何用vb自动填写、选择下拉框选项并提交网页表单?? 如何恢复最大化 如何写外接程序启动路径? 标尺控件 各位大侠帮忙啊...
Windows Dev Intro - 孙鑫
老师
总结的vc小知识
下面的知识都是孙鑫
老师
总结的一些常见问题和解决方案。转载自此处以备查学。 VC小知识总结(续) (1)当文档被修改时,如何在标题上加上标志'*'? 重载CDocument类的虚函数virtual SetModifiedFlag: v
计算机基础知识ppt培训心得体会,课件制作培训心得体会5篇
通过学习,学到很多计算机方面的知识,更重要的是增进了和其他学员之间的交流,大家在一起畅所欲言,互相讨论、交流,把自己不理解、不明白的地方提出来,
请教
老师
帮助解决,提高了学习的效率。冰冻三尺非一日之寒,...
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章