vc++6.0输出窗口背景颜色

vc++6.0输出窗口背景颜色,第1张

---- 方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。

---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下:

---- ① 新建一个基于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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12229945.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存