如何更改对话框的背景颜色
基于对话框的工程,我想只更改其中一个对话框的背景颜色,不用SetDialogBkColor函数,我处理了CTRCOLOR消息,可是上面的控件的背景颜色没有改变,控件有组合框,编辑框,静态控件等好几种,我该如何做,有没有别的方法。 问题点数:80、回复次数:11Top
1 楼clife(笨狗API.NET)回复于 2002-08-17 13:18:15 得分 5
重载OnPaint,在里面用FillRect,用刷子给对话框上色Top
2 楼pp_ipr(ikn)回复于 2002-08-17 13:20:11 得分 20
如何改变对话或窗体视窗的背景颜色
调用CWinApp : : SetDialogBkColor可以改变所有应用程序的背景颜色。第一个参数指定了背景颜色,第二个参数指定了文本颜色。下例将应用程序对话设置为蓝色背景和黄色文本。
BOOL CSampleApp : : InitInstance ( )
{
…
//use blue dialog with yellow text .
SetDialogBkColor (RGB (0, 0, 255 ), RGB ( 255 ,255 , 0 ) )
…
}
需要重画对话(或对话的子控件)时,Windows向对话发送消息WM_CTLCOLOR,通常用户可以让Windows选择绘画背景的刷子,也可重置该消息指定刷子。下例说明了创建一个红色背景对话的步骤。
首先,给对话基类增加一人成员变量
CBursh :class CMyFormView : public CFormView
{
…
private :
CBrush m_ brush // background brush
…
}
其次, 在类的构造函数中将刷子初始化为所需要的背景颜色。
CMyFormView : : CMyFormView ( )
{
// Initialize background brush .
m_brush .CreateSolidBrush (RGB ( 0, 0, 255) )
}
最后,使用ClassWizard处理WM_CTLCOLOR消息并返回一个用来绘画对话背景的刷子句柄。注意:由于当重画对话控件时也要调用该函数,所以要检测nCtlColor参量。
HBRUSH CMyFormView : : OnCtlColor (CDC* pDC , CWnd*pWnd , UINT nCtlColor
)
{
// Determine if drawing a dialog box . If we are, return +handle to
//our own background brush . Otherwise let windows handle it .
if (nCtlColor = = CTLCOLOR _ DLG )
return (HBRUSH) m_brush.GetSafeHandle ( )
return CFormView : : OnCtlColor (pDC, pWnd , nCtlColor
)
}
Top
3 楼yuezhiyin(乐知音)回复于 2002-08-17 13:21:30 得分 0
上面的控件的颜色怎么办Top
4 楼clife(笨狗API.NET)回复于 2002-08-17 13:27:22 得分 0
派生控件类,然后分别处理Top
5 楼yuezhiyin(乐知音)回复于 2002-08-17 13:33:26 得分 0
有没有象SetDialogBkColor一样简单的方法,但是可以(只)直接更改本对话框的背景颜色(包括上面的控件的背景颜色)。Top
6 楼captainliyun(茄子)回复于 2002-08-17 13:34:00 得分 5
add the OnCtlColor function
//add the code here
CYouDialog::OnCtrlColor(......)
{
}
Top
7 楼sjzxyg(小小鸟)回复于 2002-08-17 13:37:41 得分 25
在OnCtrlColor中判断nCtlColor的值,分别处理CTLCOLOR _ DLG 表示对话框,具体参数如何表示见MSDN
Top
8 楼webber84(***闭关修炼中***)回复于 2002-08-17 13:47:40 得分 20
HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor==CTLCOLOR_DLG||nCtlColor==CTLCOLOR_EDIT……)
pDC->SetBkColor(RGB(255,0,0));
return m_hBrush; //事先创建好的画刷
}
To change the color of the drop-down list box, create a CComboBox with an override of OnCtlColor that checks for CTLCOLOR_LISTBOX in the nCtlColor parameterTop
9 楼yuezhiyin(乐知音)回复于 2002-08-17 13:58:12 得分 0
编译通不过,CTLCOLOR_LISTBOX 没有定义
在MSDN中也没找到CTLCOLOR_LISTBOX 啊Top
10 楼webber84(***闭关修炼中***)回复于 2002-08-17 14:03:19 得分 0
CTLCOLOR_LISTBOX不能加在对话框类的OnCtlColor中,你要从CComboBox派生一个类,在这个类的OnCtlColor中处理CTLCOLOR_LISTBOX.
MSDN里有CTLCOLOR_LISTBOX,你看看这里:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_CWnd.3a3a.OnCtlColor.aspTop
11 楼shaohua(流氓大亨文盲高官)回复于 2002-08-17 14:34:27 得分 5
pp_ipr() 和 webber84(糕鱼昏)好象都说到哦。看看这个软件的界面http://www.csdn.net/cnshare/soft/12/12854.shtm
是否符合你的要求,如果符合,我再给你贴段代码吧。Top




