您的位置:首页 > 其它

VC MFC中修改STATIC的文本颜色和文本字体等

2014-10-09 21:28 531 查看
1. 打开资源视图。

2. 双击打开STATIC所在的对话框。

3. 修改STATIC的ID属性,这里假设为IDC_TEXT1。

4.为对话框添加类,假设为CMyDialog.

5. 选择对话框,在属性面板上点击消息,并选择WM_CTLCOLOR。

6.在对话框对应类的CPP中会新增下面的代码:

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

     //添加自己的代码

     return hbr;

}

7. 在上面的代码中添加修改IDC_TEXT文本颜色的代码,如下:

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

     if (pWnd->GetDlgCtrlID() == IDC_NOTE)

     {

         pDC->SetTextColor(#ff0000);

     } return hbr;

}

同样的方法可应用于修改字体。
很多人都觉得自己的程序的界面不那么美观,往往VC默认产生的对话框比较单调,因此很多人往往找到很多其它的控件对对话框进行美化修饰,例如给静态控件设置字体,设置背景颜色等等, 其实这些完全可以由VC自己的WM_CTLCOLOR消息来完成!

WM_CTLCOLOR消息用来完成对EDIT、STATIC、BUTTON等控件设置背景和字体颜色,其用法如下:

1.首先在自己需要设置界面的对话框上点击右键-->建立类向导-->加入WM_CTLCOLOR消息-->自动生成OnCtlColor()函数,此函数可以对本对话框的控件的界面外观做修饰,用法如下:

将类向导产生的函数做如下修改:

HBRUSH CDialogColor::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

HBRUSH hbr = CDialog::OnCtlColor(pDC,pWnd, nCtlColor);

// TODO: Change any attributes of theDC here

//设置显示字体

CFont * cFont=new CFont;
cFont->CreateFont(16,0,0,0,FW_SEMIBOLD,FALSE,FALSE,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH&FF_SWISS,"Arial");

//对特定的控件做修改

 switch(){case CTLCOLOR_STATIC: //对所有静态文本控件的设置{pDC->SetBkMode(TRANSPARENT);
//设置背景为透明
pDC->SetTextColor(#ffff00); //设置字体颜色
pWnd->SetFont(cFont); //设置字体
HBRUSH B = CreateSolidBrush(#7d7dff);
//创建画刷
return (HBRUSH) B; //返回画刷句柄
}
case CTLCOLOR_EDIT: //对所有编辑框的设置{pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(#ffff00);
pWnd->SetFont(cFont);
HBRUSH B = CreateSolidBrush(#7d7dff);
return (HBRUSH) B;
}
default:
return CDialog::OnCtlColor(pDC,pWnd, nCtlColor);
}
}


注:case的类别有以下几种:

CTLCOLOR_BTN 按钮控件

CTLCOLOR_DLG 对话框

CTLCOLOR_EDIT 编辑框

CTLCOLOR_LISTBOX 列表框

CTLCOLOR_MSGBOX 消息框

CTLCOLOR_SCROLLBAR 滚动条

CTLCOLOR_STATIC 静态文本 

2.你可能觉得对所有的控件使用统一的界面设置觉得不自由,其实VC同样可以对特定的ID的控件进行设置,方法如下:
            switch (pWnd->GetDlgCtrlID()){//针对ID为IDC_CTL1、IDC_CTL2和IDC_CTL3的控件进行同样的设置
case IDC_CTL1:
case IDC_CTL2:
case IDC_CTL3:{pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(#ffff00);
pWnd->SetFont(cFont);
HBRUSH B = CreateSolidBrush(#7d7dff);
return (HBRUSH) B;
}
default:
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: