⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_66857.htm

📁 vc
💻 HTM
字号:
<p>
序号:66857 发表者:lishmir 发表日期:2003-12-26 23:05:35
<br>主题:怎样控制对话框背景颜色?
<br>内容:我编了一个基于对话框的小程序,初始化时设定了背景的颜色,如果在程序运行过程中想让背景颜色随对话框类中的某个变量值的变化而改变应该怎么办?我希望只改变变量所在类对应的对话框的背景颜色。各位大侠有什么方法吗?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:kobo 回复日期:2003-12-26 23:13:25
<br>内容:转贴--&gt;<BR><BR>内容:改变对话框的背景色<BR><BR>方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。 <BR><BR>---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下: <BR><BR>---- ① 新建一个基于Dialog的MFC AppWizard应用程序ExampleDlg。 <BR><BR>---- ② 在CExampleDlgApp ::InitInstance()中添加如下代码: <BR><BR>BOOL CExampleDlgApp: : InitInstance ( )<BR>{<BR>…<BR>&nbsp;&nbsp;&nbsp;&nbsp;CExampleDlgDlg dlg;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pMainWnd = &amp;dlg;<BR><BR>//先于DoModal()调用,将对话框设置为蓝色背景、红色文本<BR>&nbsp;&nbsp;&nbsp;&nbsp;SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));<BR>&nbsp;&nbsp;&nbsp;&nbsp;int nResponse = dlg.DoModal();<BR>…<BR>}<BR><BR>---- 编译并运行,此时对话框的背景色和文本色已发生了改变。值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。 <BR>---- 方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准): <BR><BR>void CExampleDlgDlg::OnPaint() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (IsIconic())<BR>…<BR>&nbsp;&nbsp; else<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRect rect;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc(this);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(rect);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.FillSolidRect(rect,RGB(0,255,0));&nbsp;&nbsp;//设置为绿色背景<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDialog::OnPaint();<BR>&nbsp;&nbsp; }<BR><BR><BR>---- 方法三:重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准): <BR>---- ①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量: <BR><BR>class CExampleDlgDlg : public CDialog<BR>{<BR>...<BR>protected:<BR>CBrush m_brush; <BR>...<BR>};<BR><BR><BR>---- ②在OnInitDialog()函数中添加如下代码: <BR>BOOL CExampleDlgDlg::OnInitDialog() <BR>{<BR>...<BR>// TODO: Add extra initialization here<BR>m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子 <BR>...<BR>} <BR><BR>---- ③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息: <BR>HBRUSH CExampleDlgDlg::OnCtlColor<BR>(CDC* pDC, CWnd* pWnd, UINT nCtlColor) <BR>{<BR>/*<BR>** 这里不必编写任何代码!<BR>**下行代码要注释掉<BR>** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);<BR>*/<BR><BR>return m_brush;&nbsp;&nbsp; //返加绿色刷子<BR>}<BR><BR><BR>---- 方法四:还是重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准): <BR>---- 步骤①、②同上方法三中的步骤①、②。 <BR><BR>---- 步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息)时则有些不同: <BR><BR>HBRUSH CExampleDlgDlg::OnCtlColor<BR>(CDC* pDC, CWnd* pWnd, UINT nCtlColor) <BR>{<BR>HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);<BR><BR>//在这加一条是否为对话框的判断语句<BR>if(nCtlColor ==CTLCOLOR_DLG)<BR>return m_brush;&nbsp;&nbsp; //返加绿色刷子<BR>return hbr;<BR>}<BR><BR>---- 编译并运行即可。 <BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:lishmir 回复日期:2003-12-26 23:43:07
<br>内容:谢谢上楼。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -