---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下:
---- ① 新建一个基于Dialog的MFC AppWizard应用程序ExampleDlg。
---- ② 在CExampleDlgApp ::InitInstance()中添加如下代码:
BOOL CExampleDlgApp: : InitInstance ( )
{
…
CExampleDlgDlg dlg
m_pMainWnd = &dlg
//先于DoModal()调用,首缓将对话框设置为蓝色背景、红色文本
SetDialogBkColor(RGB(0,0,255),RGB(255,0,0))
int nResponse = dlg.DoModal()
…
}
---- 编译并运行,此时对话框的背景色和文本色已发生了改答乎变。值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。
---- 方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):
void CExampleDlgDlg::OnPaint()
{
if (IsIconic())
…
else
{
CRect rect
CPaintDC dc(this)
GetClientRect(rect)
dc.FillSolidRect(rect,RGB(0,255,0))//设置为绿色背景
CDialog::OnPaint()
}
---- 方法三:重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):
---- ①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量:
class CExampleDlgDlg : public CDialog
{
...
protected:
CBrush m_brush
...
}
---- ②在OnInitDialog()函数中添加如下代码:
BOOL CExampleDlgDlg::OnInitDialog()
{
...
// TODO: Add extra initialization here
m_brush.CreateSolidBrush(RGB(0, 255, 0))// 生成一绿色刷子
...
}
---- ③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息:
HBRUSH CExampleDlgDlg::OnCtlColor
(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
/*
** 这里不必编写任何代码!
**下行代码要注释掉
** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor)
*/
return m_brush//返加绿色刷子
}
---- 方法四:还是重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):
---- 步骤①、②同上方法三中的步骤①、②。
---- 步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息)时则有些不同:
HBRUSH CExampleDlgDlg::OnCtlColor
(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor)
//在这加一条是否为对话框的判断语句
if(nCtlColor ==CTLCOLOR_DLG)
return m_brush//返加绿色刷子
return hbr
}
---- 编译并运行即可。
---- 关于如清芹悉何改变对话框背景颜色的问题,可能还有很多种不同方法可以实现,笔者在这仅举出四种常见的方法。其中方法三的编程似乎有点不太规范,方法四则要比方法三正统些,笔者这样的对比举例是为了拓宽VC编程爱好者特别是初学者的编程思路,读者可以根据实际情况选用其中的一种。如果再结合《软件报》2000年第5期中改变对话框上的控件颜色,相信会使您的MFC应用程序"增色"不少
我举个例子吧,在主对话框的编辑框中输入数据(我这里就在伏大主对话框OnInitDialog中初始化数据:)str[0] = "梅花"
str[1] = "长恨漫天柳芦毁絮轻,只将飞雾点清明。"
str[2] = "寒梅似兴春相避,来解无私造物情。"
CString Text
Text = str[0] + "\r\n" + str[1] + "\r\n" + str[2]
m_Edit.SetWindowText(Text)
接着点击打印预览后d出一个对话框进行预览,主对话框的按钮消息响应如下:(主对话框类我这定为CPreviewDlg)
void CPreviewDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CPreDlg dlg
for(int i=0i<3i++)
dlg.str[i] = str[i]
dlg.DoModal()
}
插入一新的对话框,类为CPreDlg
下面给出核心代码:
头文件中添加:
CString str[9]
CFont TitleFont
CFont Font
添加消息函数OnPaint和OnCtlColor
void CPreDlg::OnPaint()
{
CPaintDC dc(this)// device context for painting
// TODO: Add your message handler code here
TitleFont.CreatePointFont(200,"宋体",dc)
Font.CreatePointFont(160,"宋缺哗竖体",dc)
dc.SelectObject(TitleFont)
dc.TextOut(180,30,str[0])
dc.SelectObject(Font)
for(int i=1i<3i++)
{
dc.TextOut(60,40+i*40,str[i])
}
Font.DeleteObject()
TitleFont.DeleteObject()
}
HBRUSH CPreDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor)
// TODO: Change any attributes of the DC here
CBrush m_brush (RGB(255,255,255))
CRect m_rect
GetClientRect(m_rect)
pDC->FillRect(m_rect,m_brush)
return m_brush
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)