如何设置静态文本的底色

发布于 2022-06-02 00:05:24 字数 0 浏览 709 评论 6

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

止于盛夏 2022-06-03 12:31:36

回答如何设置静态文本的底色

常有人问如何改变对话框控件的颜色,字体的颜色,我今天就提供出一种最方便的方法吧.
(当然还有很多其他方法,看个人的程序的要求而定.)
以对话框程序为例:

步骤一:

在XXDlg.h中定义两个私有变量:
COLORREF m_txtBkColor;
COLORREF m_txtForeColor;

在XXDlg.cpp的CXXDlg构造函数中初始化:
m_txtBkColor=RGB(255,0,0);
m_txtForeColor=RGB(0,0,255);

步骤二:
在Windows中最重要的三个关键词的理解:窗口,消息,事件.
MFC窗口的基类是CWnd,用MFC我们很多时候都是在和CWnd打交道.那么我们就的熟悉
CWnd的数据成员,各类函数,事件响应等,这些是基础,不熟的话,找本类库手册查查.

我们这里把静态文本框作为CWnd来处理.
在对话框上加一个静态文本框IDC_STATIC1

在CXXDlg::OnPaint()函数中添加代码如下:

void CDdDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{

CDialog::OnPaint();
//以下为添加的代码;
CWnd* m_static1=GetDlgItem(IDC_STATIC1);//获取控件窗口指针
CRect rc;
CString str;
CDC* pDC=m_static1->GetDC();//获取子窗口CDC指针
pDC->SetBkColor(m_txtBkColor);//设置子窗口背景色
pDC->SetTextColor(m_txtForeColor);//设置子窗口文字颜色
m_static1->GetWindowText(str);//获取子窗口上的文本
m_static1->GetClientRect(&rc);//获取子窗口矩形
m_static1->ValidateRect(rc); //子窗口客户区有效
pDC->DrawText(str,rc,NULL);//绘制文本

}
}

编译运行看看,是不是按你的愿望改变了呢?而且切换窗口,风格也没有消失.
(问题http://expert.csdn.net/Topic/43922.shtm也请参考,不过有关绘图最好是用个
从CWnd或其派生类继承另编个子类,提供个Public绘图方法比喻Draw();在Draw中使用
Invalidate()就可以了.)

现在我们来检验以下在程序中随时改变其风格.

步骤三:
在对话框上放个Button吧,添加其对BN_CLICKED消息响应函数OnButton1()

实现代码如下:
void CXXDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CWnd* m_static1=GetDlgItem(IDC_STATIC1);//获取CWnd指针
m_txtBkColor=RGB(0,255,0); //改变静态文本框的底色
m_txtForeColor=RGB(192,128,0); //改变静态文本框的文字色
m_static1->SetWindowText("anything");//设置文本
m_static1->UpdateData();//提交
Invalidate();//更新对话框
}
OK,一切都很如愿嘛,起码来说windows面上的东西,都可由你控制.
再深一步,多用类库手册吧.
用完了你再去用API,基本上MFC就可搞定绝大部分问题.

东风软 2022-06-03 12:30:46

CoolFired老兄好热情,兄弟我感谢你上次的帮助。往往。

淡笑忘祈一世凡恋 2022-06-03 12:19:33

处理WM_CTLCOLOR消息,如下:

HBRUSH CCtlColorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

if(nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(255, 0, 0));
pDC->SetBkColor(RGB(245, 245, 245));
}

// TODO: Return a different brush if the default is not desired
return hbr;
}

不回头走下去 2022-06-03 11:33:30

WM_CTLCOLOR

话少心凉 2022-06-03 06:37:43

简单一点就是WM_CTLCOLOR
若要复杂一点就派生CStatic,重载Drawitem

ぃ双果 2022-06-02 05:58:52

用WM_CTRLCOLOR的同时可能要改变Static的ID号,不能用ID_STATIC

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文