求助:如何改变静态控制的默认颜色

zjy 2000-03-17 04:24:00
列位高手:
我做了一个静态控制的类CMyStatic(从CStatic派生而来)
想加上设置颜色的功能,用WM_CTLCOLORSTATIC消息吧,
它是从静态控制发给其父窗口的,必须在父窗口改变其颜色.
不符合我想包装成独立的类的思路.
从网上参考的一些源码,都是重新画,很繁琐,
请教:有无改变静态控制的默认颜色的简单方法
...全文
165 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shania 2000-03-17
  • 打赏
  • 举报
回复
//增加一个消息WM_CTLCOLOR
//其中m_hbk是一个HBRUSH类型的成员函数
HBRUSH CMyStatic::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(COLORREF(0X113333));
return m_hbk;
}

//做一个设置背景色的函数
HBRUSH CMyStatic::SetBkColor(COLORREF color)
{
DeleteObject(hbk);
return m_hbk = CreateSolidBrush(color);
}
yanxh 2000-03-17
  • 打赏
  • 举报
回复
使用ClassWard重载CMyStatic的WM_ErasedBkgnd消息
BOOL CMyStatic::OnErasedBkgnd(CDC *pDC)
{
CBrush newbrush(RGB(255,0,0));
CBrush *oldbrush=pDC->SelectObject (&newbrush);
CRect rect;
GetClientRect(&rect);
pDC->PatBlt (0,0,rect.Width (),rect.Height (),PATCOPY);
pDC->SelectObject (oldbrush);

return 1;
}

使用时用CMyStatic定义一个对象,无须其它编程。如果是个对话框程序,
你可以放置一个静态框,给其定义一个名字。 如:CMyStatic staYourStatic;
运行程序后你的静态框将会是红色的,我刚刚试过的,肯定可以的。
JJONY 2000-03-17
  • 打赏
  • 举报
回复
在MFC中有一个技术叫做消息反射,例如WM_CTLCOLOR消息本来是发去父窗口的,在父窗口中统一处理控件的着色,但是消息反射就把这个WM_CTLCOLOR消息发去给你的控件类中。采用消息反射技术的简单方法就是在ClassWard中选中你的CMyStatic类,在消息列表中一定有一条=WM_CTLCOLOR,添加这条消息,然后在这条消息的回调函数中处理着色就可以了。但如果有多个控件的实例是由同一个控件类派生的话,你就要在这个类中分别处理不同控件各自的颜色.
zjy 2000-03-17
  • 打赏
  • 举报
回复
Jackzhu先生:
Setclasslong总是返回0.好象不好用,我再试试.
Thank you.
Jackzhu 2000-03-17
  • 打赏
  • 举报
回复
用带有标志gcl_hbrbackground的Setclasslong试试

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧