MFC如何设置对话框的背景和字体颜色

MFC如何设置对话框的背景和字体颜色,第1张

---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下:---- ① 新建一个基于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 = dlgDoModal();…}---- 编译并运行,此时对话框的背景色和文本色已发生了改变。值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。---- 方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):void CExampleDlgDlg::OnPaint(){ if (IsIconic())… else { CRect rect; CPaintDC dc(this); GetClientRect(rect); dcFillSolidRect(rect,RGB(0,255,0)); //设置为绿色背景 CDialog::OnPaint(); }---- 方法三:重载OnCtlColor (CDC pDC, CWnd pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):protected:};---- ②在OnInitDialog()函数中添加如下代码:// TODO: Add extra initialization here}---- ③利用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消息。具体步骤如下(以上例工程为准):---- 步骤①、②同上方法三中的步骤①、②。

拿View 做例子

新建一个MFC工程

找到View类, 找到OnDraw方法, 在里面添加

// 获取当前视窗的矩形信息

CRect rect;

GetClientRect(&rect);

CDC theDC;

HANDLE theImg;

theDcCreateCompatibleDC(backDC);

theImg = ::LoadImage(NULL, "图像地址,如果就在工程根目录,则直接写图像文件名", NULL, NULL, NULL, 0x10);

theDcSelectObject(theImg);

pDC->StretchBlt(0, 0, rectWidth(), rectHeight(), theDC, 0, 0, SRCCOPY);

theDcDeleteDC();

DeleteObject(theImg);

要看你的具体什么背景,具体如何输出文字。简单点的:设置文字可以使用SetWindowText,或者使用CEditView成员函数GetEditCtrl,由它获取CEdit对象后,可以使用CEdit的成员函数 *** 作,就想使用编辑框控件一样。

设置背景的话,可以添加消息响应ON_WM_CTLCOLOR_REFLECT()

类向导里找到=WM_CTLCOLOR这个消息,添加即可。

在里面pDC->SetBkColor(RGB(222, 222, 222));设置文字的背景等等,

而整个CEditView区域的背景需要定义一个成员变量

private:

HBRUSH m_brush;

你可以在构造函数中创建画刷m_brush = CreateSolidBrush(RGB(111, 111, 111));

析构中DeleteObject(m_brush);

在之前的那个=WM_CTLCOLOR消息响应函数中

return m_brush;

更多功能,参考:>

背景图像加载很简单,你只需要做以下几步即可(假设你的登陆界面对话框类名叫“CLoginDlg”):

(1)菜单“Insert”->"Resource",选择Bitmap,然后点“Import”,选择你的背景图像,然后假设该资源ID为“IDB_BITMAP1”;

(2)在LoginDlgh下声明一个CBitmap m_BKbitmap;

(3)在LoginDlgcpp的构造函数中:m_BKbitmapLoadBitmap(IDB_BITMAP1);

(4)在LoginDlgcpp的OnPaint()函数中写上:

void CLoginDlg::OnPaint()

{

CPaintDC dc(this); // device context for painting

if (IsIconic())

{

SendMessage(WM_ICONERASEBKGND, (WPARAM) dcGetSafeHdc(), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rectWidth() - cxIcon + 1) / 2;

int y = (rectHeight() - cyIcon + 1) / 2;

// Draw the icon

dcDrawIcon(x, y, m_hIcon);

}

else

{

BITMAP bm;

CRect rect;

CDC dcMem;

m_BKbitmapGetBitmap (&bm);

GetClientRect(&rect);

dcMemCreateCompatibleDC (&dc);

CBitmap oldbitmap=dcMemSelectObject (&m_BKbitmap);

dcBitBlt (0,0,bmbmWidth ,bmbmHeight ,&dcMem,0,0,SRCCOPY);

dcMemSelectObject(oldbitmap);

CDialog::OnPaint();

}

}

你的问题就OK了。

关于按钮控件显示,建议你可以下载一个CButton的继承类,什么“CButtonST”啊、“CBtnST”啊、“CDlgShadeButtonST”啊,自己手写的话不划算,有很多现成的控件类,都写的非常好,完全可以拿来为我们所用。

你查到的应该类似这个吧

CBitmap bm;

bmLoadBitmap(IDM_BITMAP1);

CBrush brush;

brushCreatePatternBrush(&bm);

RECT rr;

GetClientRect(&rr);

pDC->FillRect(&rr,&brush);

这个就是可以的

这是我OnEraseBkgnd的代码,试过显示正常,wincce 60下

//背景

//获得客户区尺寸

CRect rect;

GetClientRect(&rect);

//加载背景位图

CBitmap bitmap;

bitmapLoadBitmap(IDB_BITMAP_BG); //ID

//创建内存DC

CDC dc;

dcCreateCompatibleDC(pDC);

//选择位图

CBitmap pOldBitmap=dcSelectObject(&bitmap);

SetStretchBltMode(pDC->m_hDC,COLORONCOLOR);//这个模式不设置的话会导致严重失真

BITMAP bmp;

bitmapGetBitmap(&bmp);

//绘制位图

pDC->StretchBlt(0,0,rectWidth(), rectHeight(), &dc, 0, 0, bmpbmWidth, bmpbmHeight, SRCCOPY);

dcSelectObject(pOldBitmap);

return TRUE;

以上就是关于MFC如何设置对话框的背景和字体颜色全部的内容,包括:MFC如何设置对话框的背景和字体颜色、C++中怎么给MFC中的对话框添加背景求解释,稍微详细点吧。我新手。、mfc怎么在CEditView类生成的单文档MFC程序 输出文字和设置背景等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10206202.html

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

发表评论

登录后才能评论

评论列表(0条)

保存