问题描述
- MFC中static text字体颜色和大小的设置问题
-
我通过WM_CTLCOLOR消息调用OnCtlColor函数
if (pWnd->GetDlgCtrlID() == IDC_STATIC)
{
pDC->SetTextColor(RGB(0, 100, 0));
}
确实是成功修改了static text字体的颜色,
但是每次一旦OnPaint函数被调用后,颜色就消失了,
不知道怎么解决,求大神解答一下!!!
还有就是通过这种方法我无法改变group box标题栏的字体的大小,只能改变颜色,
大神一并帮我解答了吧,谢谢了
解决方案
https://msdn.microsoft.com/ja-jp/library/0wwk06hc.aspx
和上面的sample比较一下你的代码,没少啥吗?
最后设置brush那行可以注掉,返回默认的brush。
解决方案二:
完整代码贴一下吧。注意用csdn的代码tag哈,否则格式很乱。
解决方案三:
把你修改颜色的代码放到OnPaint函数中
解决方案四:
我用wizard生成的dialog代码,增加下面函数后就好用了。
如果你的OnCtlColor函数没有什么不同,是否修改了其他函数呢?
HBRUSH CmfcDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID() == IDC_STATIC_1)
{
pDC->SetTextColor(RGB(255,0,0));
}
return hbr;
}
解决方案五:
失效是因为界面重绘了,原来设置的红色代码不在重绘范围内,所以就失效了,可以把设置颜色部分放到OnPaint中
解决方案六:
抱歉,回复晚了! 我是在OnPaint函数里添加了如下代码,但是没有任何作用,怎么破
```void CMingTaiReadIDDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
if(flag_caitu == 0)
{
CDialog::UpdateWindow();
ShowImage(mFrontPage,IDC_FRONT_PIC);
ShowImage(mBackPage,IDC_BACK_PIC);
pwnd=GetDlgItem(IDC_STATIC1);
pDC = pwnd->GetDC();
pDC->SetTextColor(RGB(0, 0, 180));
pwnd=GetDlgItem(IDC_STATIC2);
pDC = pwnd->GetDC();
pDC->SetTextColor(RGB(0, 0, 180));
pwnd=GetDlgItem(IDC_STATIC3);
pDC = pwnd->GetDC();
pDC->SetTextColor(RGB(0, 0, 180));
pwnd=GetDlgItem(IDC_STATIC4);
pDC = pwnd->GetDC();
pDC->SetTextColor(RGB(0, 0, 180));
pwnd=GetDlgItem(IDC_STATIC);
pDC = pwnd->GetDC();
pDC->SetTextColor(RGB(0, 0, 180));
/*
if (pwnd->GetDlgCtrlID() == IDC_STATIC1 || pwnd->GetDlgCtrlID() == IDC_STATIC2 || pwnd->GetDlgCtrlID() == IDC_STATIC3
|| pwnd->GetDlgCtrlID() == IDC_STATIC4 || pwnd->GetDlgCtrlID() == IDC_STATIC5)
{
pDC = pwnd->GetDC();
pDC->SetTextColor(RGB(0, 0, 180));//文字为红色
}
if (pwnd->GetDlgCtrlID() == IDC_STATIC)
{
pDC = pwnd->GetDC();
pDC->SetTextColor(RGB(0, 100, 0));//文字为红色
}
*/
g_strMessage += "执行到OnPaintrn";
GetDlgItem(IDC_EDIT_INFO)->SetWindowText(g_strMessage);
}
//UpdateData(false);
CDialogEx::OnPaint();
}
}
解决方案七:
不怎么会用插入代码啊
void CMingTaiReadIDDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
if(flag_caitu == 0)
{
CDialog::UpdateWindow();
ShowImage(mFrontPage,IDC_FRONT_PIC);
ShowImage(mBackPage,IDC_BACK_PIC);
pwnd=GetDlgItem(IDC_STATIC1);
pDC = pwnd->GetDC();
pDC->SetTextColor(RGB(0, 0, 180));
pwnd=GetDlgItem(IDC_STATIC2);
pDC = pwnd->GetDC();
pDC->SetTextColor(RGB(0, 0, 180));
pwnd=GetDlgItem(IDC_STATIC3);
pDC = pwnd->GetDC();
pDC->SetTextColor(RGB(0, 0, 180));
pwnd=GetDlgItem(IDC_STATIC4);
pDC = pwnd->GetDC();
pDC->SetTextColor(RGB(0, 0, 180));
pwnd=GetDlgItem(IDC_STATIC);
pDC = pwnd->GetDC();
pDC->SetTextColor(RGB(0, 0, 180));
g_strMessage += "执行到OnPaintrn";
GetDlgItem(IDC_EDIT_INFO)->SetWindowText(g_strMessage);
}
CDialogEx::OnPaint();
}
}
时间: 2024-09-29 06:29:37