static控件设置字体与透明属性

来源:互联网 发布:多系统基础数据同步 编辑:程序博客网 时间:2024/05/05 09:48

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();

0 0
原创粉丝点击