VS中,如何通过调用字体对话框来改变一个控件的文本的颜色
1个回答
展开全部
响应WM_CTLCOLOR消息,
在OnCtlColor函数里:
HBRUSH CXXXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何属性
if (pWnd->GetDlgCtrlID() == IDC_EDIT) //控件ID
{
pDC->SetTextColor(m_color); //你的字体颜色
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
在OnCtlColor函数里:
HBRUSH CXXXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何属性
if (pWnd->GetDlgCtrlID() == IDC_EDIT) //控件ID
{
pDC->SetTextColor(m_color); //你的字体颜色
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
追问
我知道OnCtlColor()函数可以改变控件外观,我想知道pdc->SetTextColor(m_color);这句代码为什么不起作用啊?我是按照书上敲的代码。谢谢
追答
因为每次GetDC得到的DC都是不同的,你的pdc->SetTextColor(m_color)只是对当次输出文字有效。下次窗口绘制控件的时候又被默认颜色取代了。
你可以试一下放两个按钮,第一个函数里GetDC,改变字体颜色,然后TextOut,第二个直接输出,仍然是黑色。
而OnCtlColor是窗口每次绘制控件前调用的,这样就可以保证绘制的控件字体的颜色是你想要的颜色。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询