---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下:---- ① 新建一个基于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程序 输出文字和设置背景等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)