1. 怎么修改static控件字体
BOOL CDialogTest::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_font.CreatePointFont(260,_T("楷体"));//LPCTSTR
GetDlgItem(IDC_STATIC_TEST)->SetFont(&m_font);
return TRUE;
//CFont font;
//font.CreatePointFont(260,_T("楷体"));//LPCTSTR
//GetDlgItem(IDC_STATIC_TEST)->SetFont(&font);
//return TRUE;
// return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
如上述代码,CFont对象必须是成员对象才能成功,如果是局部变量时(如注释掉的部分),改变字体不成功。
2. 怎么使static控件透明 以及 改变字体颜色
(转自:http://zhidao.baidu.com/link?url=eMHvjV_sMNMI2o0uaXP1X5y_b9_iuLATgxGrorOZUNAke5dRBpsoE9Slpo0V7LBqMWPch0KHtVwvbYtUHETGT_)
重载载对话框的WM_CTLCOLOR消息;
在OnCtlColor中添加如下代码: HBRUSH CYourDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here switch(pWnd->GetDlgCtrlID()) { case IDC_STATIC1: pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(0,0,0)); return (HBRUSH)GetStockObject(HOLLOW_BRUSH); default: break; } // TODO: Return a different brush if the default is not desired return hbr; }
3. 解决Static控件背景透明时文本覆盖重影的问题转自: http://blog.sina.com.cn/s/blog_597fcab10100ogc9.html 通过映射OnCtlColor消息,而后在该函数中使用pDC->SetBkMode(TRANSPARENT)使Static控件背景透明时会出现:文本覆盖重影的问题,当改变控件的文本就会发生新文本与旧文本重叠的现象。 可以通过以下方式使Static控件文本在透明状态下改变时不会产生文本重叠问题: 1、由于Static控件的背景已经是透明的了,那么旧文本应该是画在Static控件的父窗口上的。 2、在给Static控件设置新文本之后(不是之前!)刷新父窗口即可。例如: GetDlgItem(IDC_STATIC_TEST)->SetWindowText(_T("北京2008")); GetDlgItem(IDC_STATIC_TEST)->GetParent()->RedrawWindow(); IDC_STATIC_TEST为控件ID号。 3、用上面方法刷新的是整个父窗口客户区,界面会闪烁,可以只刷Static控件所在的RECT区域,就不会闪烁了。 CRect rtlbl; GetDlgItem(nID)->GetWindowRect(&rtlbl); ScreenToClient(&rtlbl); //转到客户端界面 InvalidateRect(&rtlbl);//最后刷新对话框背景 UpdateWindow();