小弟请问OnCtlColor的有关问题
小弟请教OnCtlColor的问题
我在MFC中建立了一个主对话框CreadingSystemDlg,然后又插入了一个新Dialog叫做ttdlg。
主对话框上有一个设置button,弹出ttdlg,目的是设置主对话框中IDC_EDIT1中文字的字体、字号、字体颜色、背景颜色。现在字体、字号都没有问题,问题出现在颜色上,无法更改。
我在子对话框中设有一个文字预览IDC_Eg,是可以改变颜色的,有如下定义:
HBRUSH ttdlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID() == IDC_Eg)
{
pDC->SetBkColor(RGB(br, bg, bb));
pDC->SetTextColor(RGB(r,g,b));
}
return hbr;
}
其中r,g,b,br,bg,bb是在主对话框中定义的全局变量,在子对话框通过extern引用过来。
我在主对话框中有这样一个定义,目的是更改IDC_EDIT1的文字、背景颜色:
HBRUSH CReadingSystemDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{ //改颜色
HBRUSH tt = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID() == IDC_EDIT1)
{
pDC->SetBkColor(RGB(br, bg, bb));
pDC->SetTextColor(RGB(r,g,b));
}
return tt;
}
void CReadingSystemDlg::OnButton4()
{ //调子对话框,该字体
ttdlg dlg;
if(dlg.DoModal()==IDOK)
{
set_font(size,m_font,s);
GetDlgItem(IDC_EDIT1)->SetFont(m_font);
m_edit.Invalidate();
}
}
运行之后,在子对话框中可以改变,但是主对话框中IDC_EDIT1无法改变颜色,只能改变文字字号和大小。
请各位大神帮忙!谢谢了!
------解决方案--------------------
你得向主对话框发送改变颜色的消息吧
------解决方案--------------------
设置个断点看下r,g,b的值
------解决方案--------------------
必须是自绘风格才行的。
看windows程序设计的解释
但是一旦自绘风格后, wm_ctlcolorbtn返回一个刷子,意义不大了,
反正自绘drawitem就可以搞定了。
对于其他子控件,子类化后, wm_ctlcolorxx也是不管用的。 貌似listbox的编辑框是管用的。
我在MFC中建立了一个主对话框CreadingSystemDlg,然后又插入了一个新Dialog叫做ttdlg。
主对话框上有一个设置button,弹出ttdlg,目的是设置主对话框中IDC_EDIT1中文字的字体、字号、字体颜色、背景颜色。现在字体、字号都没有问题,问题出现在颜色上,无法更改。
我在子对话框中设有一个文字预览IDC_Eg,是可以改变颜色的,有如下定义:
HBRUSH ttdlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID() == IDC_Eg)
{
pDC->SetBkColor(RGB(br, bg, bb));
pDC->SetTextColor(RGB(r,g,b));
}
return hbr;
}
其中r,g,b,br,bg,bb是在主对话框中定义的全局变量,在子对话框通过extern引用过来。
我在主对话框中有这样一个定义,目的是更改IDC_EDIT1的文字、背景颜色:
HBRUSH CReadingSystemDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{ //改颜色
HBRUSH tt = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID() == IDC_EDIT1)
{
pDC->SetBkColor(RGB(br, bg, bb));
pDC->SetTextColor(RGB(r,g,b));
}
return tt;
}
void CReadingSystemDlg::OnButton4()
{ //调子对话框,该字体
ttdlg dlg;
if(dlg.DoModal()==IDOK)
{
set_font(size,m_font,s);
GetDlgItem(IDC_EDIT1)->SetFont(m_font);
m_edit.Invalidate();
}
}
运行之后,在子对话框中可以改变,但是主对话框中IDC_EDIT1无法改变颜色,只能改变文字字号和大小。
请各位大神帮忙!谢谢了!
------解决方案--------------------
你得向主对话框发送改变颜色的消息吧
------解决方案--------------------
设置个断点看下r,g,b的值
------解决方案--------------------
必须是自绘风格才行的。
看windows程序设计的解释
但是一旦自绘风格后, wm_ctlcolorbtn返回一个刷子,意义不大了,
反正自绘drawitem就可以搞定了。
对于其他子控件,子类化后, wm_ctlcolorxx也是不管用的。 貌似listbox的编辑框是管用的。