如何设置静态文本的底色 简单一点就是WM_CTLCOLOR若要复杂一点就派生CStatic,重载Drawitem 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用WM_CTRLCOLOR的同时可能要改变Static的ID号,不能用ID_STATIC 回答如何设置静态文本的底色常有人问如何改变对话框控件的颜色,字体的颜色,我今天就提供出一种最方便的方法吧.(当然还有很多其他方法,看个人的程序的要求而定.)以对话框程序为例:步骤一:在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就可搞定绝大部分问题. CoolFired老兄好热情,兄弟我感谢你上次的帮助。往往。 处理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;} 关于inline的链接错误 用过CImg的进来一下,谢谢 如何获得线程的cpu占用时间? 简单的键盘钩子问题 opengl中曲面的绘制 关于theApp的问题,总是调试出错???? debug和release区别 有没有谁写过数码相机的接口程序,比如,怎么用程序来控制相机??(分不够另开贴) 感谢CSDN上的所有朋友!感谢水园的四大帮主!祝参加四六级考试的各位取得佳绩!散分!!! 使用MFC获取网页中的文本 请问怎样设置控件的叠放次序 各位大侠教教我,怎样用异或模式输出字符
(当然还有很多其他方法,看个人的程序的要求而定.)
以对话框程序为例:步骤一:在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就可搞定绝大部分问题.
{
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;
}