1.打开对应对话框的类向导ClassWizard。
2.在消息映射MessageMaps中添加消息Message:WM_CTLCOLOR。
3.然后程序代码中会添加进函数:
OnCtlColor(CDC*pDC, CWnd* pWnd, UINT nCtlColor)
4.在这个函数中添加if语句,其中的条件表达式改成想要设置的控件;
比如改成: if (pWnd->GetDlgCtrlID() == IDC_STATIC1 || pWnd-> GetDlgCtrlID() == IDC_STATIC2)
注意,控件ID最好改过,如果多个控件使用同个默认ID,函数则不识别。
5.在if中添加以下语句:
pDC->SetTextColor(RGB(255,255,255)); //设置字体为白色
pDC->SetBkMode(TRANSPARENT); //设置背景为透明
整个函数的代码如下:
HBRUSHCHall::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd-> GetDlgCtrlID() == IDC_STATIC1 || pWnd-> GetDlgCtrlID()== IDC_STATIC2 || pWnd-> GetDlgCtrlID() == IDC_STATIC3)
{
pDC->SetBkMode(TRANSPARENT); //设置背景透明
pDC->SetTextColor(RGB(255,255,255));
return HBRUSH(GetStockObject(HOLLOW_BRUSH));
}
return hbr;
}
/*****控件位置*****/
CRect rect;
GetClientRect(rect); //获取对话框大小
CWnd *pWnd;
pWnd = GetDlgItem(IDC_STATIC_FONT1);
pWnd -> SetWindowPos(NULL,rect.Width()/2-95,
rect.Height()/2-60,190,36,SWP_NOZORDER );
SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:
BOOL SetWindowPos(const CWnd*pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);
第一个参数一般设为NULL;
x、y控件位置;cx、cy控件宽度和高度;
nFlags常用取值:
SWP_NOZORDER:忽略第一个参数;
SWP_NOMOVE:忽略x、y,维持位置不变;
SWP_NOSIZE:忽略cx、cy,维持大小不变;