有一个编辑框和一个按钮,按钮可以弹出字体对话框FontDialog,然后选择好字体后,编辑框就以选中的字体样式显示文字,但是问题是:
1.如果编辑框里已经有文字了,那么选择的字体将对他们无效,而只对即将输入的文字起作用。请问怎么样把现有文字的字体也同时改变呢?
2.FontDialog里有文字的颜色设置,但是选择好之后,不论是现有文字还是即将输入的文字,并没有体现出文字的颜色有何改变,请问是怎么回事?是不是颜色要另外设置?
我的代码如下:
CFontDialog dlg;
dlg.DoModal();
CFont f;
LOGFONT l;
dlg.GetCurrentFont(&l);
f.CreateFontIndirect(&l);
m_EditInput.SetFont(&f);//m_EditInput是CEdit类型的变量,与编辑框关联
然后我把我弹出的字体对话框截图,里面可以设置颜色的
解决后追加再追加30分,谢谢大家!
额。。。有道理!我看下,然后,颜色的问题怎么搞,我想时时根据自己的意愿来改变颜色,而不是像楼上那样的
追答你定义一个COLORREF 变量用来接收 CHOOSEFONT中 COLORREF rgbColors;然后将其传给
SetTextColor()函数试试。。 具体的我也不是很清楚。。没做过。。
这是改变颜色的我知道,但是设置了以后就不能变了,我要能时时根据自己的意愿来改变颜色。
追答private:
CFontDialog MyFont;
void CTestDlg::OnButton1()
{
CFont font;
LOGFONT lfont;
if(MyFont.DoModal() == IDOK)
{
MyFont.GetCurrentFont(&lfont);
font.CreateFontIndirect(&lfont);
m_edit.SetFont(&font);
m_edit.UpdateWindow();//字体是可以改变,但点击编辑框时又复原,你想一下是怎么回事?
m_staticMe.SetFont(&font);
}
}
HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor == CTLCOLOR_EDIT)
{
pDC->SetTextColor(MyFont.GetColor());//动态改变编辑框的字体颜色
}
// TODO: Return a different brush if the default is not desired
return hbr;
}