假设static控件ID为IDC_STATIC1:
然后重载对话框的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;
}
需要注意的是,在VC的Control界面中,必须将STATIC属性Simple选中,否则pWnd->GetDlgCtrlID()找不到关于STATIC的任何控件。
另外,BTN不能用OnCtlColor去改变颜色,会没有作用;CHECK_BOX也属于Button一类。可以考虑文字部分用Static Text去做。
1.在static上显示位图:
用Create的方式在Model上的操作:
在对话框类重添加一个成员变量CBitmap m_bmp;
建立一个资源位图IDB_TEST;
在OnInitDialog中:
CStatic m_st;//最好定义为类的成员变量
m_bmpst.Create("",WS_CHILD|WS_VISIBLE|SS_BITMAP,CRect
(50,50,150,100),this);
m_bmp.LoadBitmap(IDB_TEST);
m_bmpst.SetBitmap((HBITMAP)m_bmp);
2.在static上显示图标
CStatic *pStatic=(CStatic *)GetDlgItem(IDC_STATIC_1);
HICON hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, 0); //16×16
pStatic->ModifyStyle(0x0,SS_ICON|SS_CENTERIMAGE);
pStatic->SetIcon(hIcon);