MFC无标题栏对话框美化

合集下载

MFC自绘控件与界面美化

MFC自绘控件与界面美化

MFC自绘控件与界面美化界面美化摘要本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。

读者最好具有以下VC基础:1. 大致了解MFC框架的基本运作原理;2. 熟悉Windows消息机制,熟悉MFC的消息映射和反射机制;3. 熟悉OOP理论和技术;本文根据笔者多年的开发经验,并结合简单的例子一一展开,希望对读者有所帮助。

正文1. 美化界面之开题篇相信使用过《金山毒霸》、《瑞星杀毒》软件的读者应该还记得它们的精美界面:图1 瑞星杀毒软件的精美界面程序的功能如何如何强大是一回事,它的用户界面则是另一回事。

千万不要忽视程序的用户界面,因为它是给用户最初最直接的印象,丑陋的界面、不友好的风格肯定会影响用户对软件程序的使用。

“受之以鱼,不若授之以渔”,本教程并不会向你推荐《瑞星杀毒软件》精美界面的具体实现,而只是向你推荐一些常用的美化方法。

2. 美化界面之基础篇美化界面需要先熟悉Windows下的绘图操作,并明白Windows 的幕后绘图操作,才能有的放矢,知道哪些可以使用,知道哪些可以避免……2.1 Windows下的绘图操作熟悉DOS的读者可能就知道:DOS下面的图形操作很方便,进入图形模式,整个屏幕就是你的了,你希望在哪画个点,那个地方就会出现一个点,红的、或者黄的,随你的便。

你也可以花点时间画个按钮,画个你自己的菜单,等等……Windows本身就是图形界面,所以Windows下面的绘图操作功能更丰富、简单。

要了解Windows下的绘图操作,要实现Windows 界面的美化,就必须了解MFC封装的设备环境类和图形对象类。

2.1.1 设备环境类Windows下的绘图操作说到底就是DC操作。

DC(Device Context设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它。

这个环境是设备无关的,所以你在对不同的设备输出时只需要使用不同的设备环境就行了,而作图方式可以完全不变。

7.MFC界面与美化

7.MFC界面与美化

7.2窗口图标与背景修改

7.2.2 修改背景 步骤



1、创建兼容设备描述表 2、创建、装入位图 3、位图选入兼容设备描述表 4、将兼容设备描述表复制到当前设备描述表

详见例7-2

修改背景(实例 7-2) 步骤


1、新建MFC单文档App(ChangeBackground) 2、资源面板添加一个位图资源 3、在CChangeBackgroundView::OnDraw()贴图

2、 MainFrame::OnCreate()

修改窗口外观
视图类中修改 (例7-3 CFra bibliotekangeFrm)


1、 ChangeFrm::PreCreateWindows()


修改WNDCLASS AfxRegisterWndClass() SetClassLong()

2、 ChangeFrm ::OnCreate()
7.3工具栏编程与美化

7.3.1 创建工具栏

增加一个工具栏资源 框架类头文件中声明 CMFCToolBar对象 CMainFrame::OnCreate()中创建工具栏并加载
(可参考向导生成的标准工具栏)

7.3.2 工具栏中添加、删除按钮

编辑位图 修改按钮属性(ID,Width,Height,Prompt) 调整顺序、增加分割线、删除按钮
在该函数返回前 1、先调用PreCreateWindow(),对Create()/CreateEx()中的风格参 数进行预处理设置 2、调用OnCreate() 进行实际的窗口创建

MFC改变对话框背景颜色

MFC改变对话框背景颜色

MFC改变对话框背景颜色方法一:调用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 herem_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, nCtlColo r);*/return (HBRUSH)m_brush.GetSafeHandle(); //返加绿色刷子}方法四:还是重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。

MFC中改变对话框背景的几个消息函数OnEraseBkgnd、 OnPaint、 OnCtlColor的调用顺序

MFC中改变对话框背景的几个消息函数OnEraseBkgnd、 OnPaint、 OnCtlColor的调用顺序

MFC中改变对话框背景的几个消息函数OnEraseBkgnd、OnPaint、OnCtlColor的调用顺序设置对话框背景颜色及背景图片可在OnCtlColor(),OnEraseBkgnd(),OnPaint()里设置,对话框初始化完毕,显示时调用OnSize()->OnEraseBkgnd(),->OnPaint()->OnCtlColor(), 若想改变对话框大小,比如全屏显示ShowWindow(SW_SHOWMAXIMIZED);UpdateWindow();其中ShowWindow会调用OnSize()->OnEraseBkgnd(),UpdateWindow();调用OnPaint()->OnCtlColor(),若对话框中没有设置消息响应OnEraseBkgnd(),,则系统默认消息响应OnEraseBkgnd()会调用OnCtlColor()设置对话框背景(即替代OnEraseBkgnd())对话框的背景设置可在OnCtlColor()中进行,因为OnCtlColor()一般会被多次调用,所以要想设置的CFont,CBrush等应在OnInitDialog中初始化,若要在OnCtlColor()中设置,在设置前先调用Detach就可以了,如下示例HBRUSH CDb3Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){if(pWnd->GetDlgCtrlID()==IDC_STATIC5){m_font.CreatePointFont(300,"宋体");pDC->SelectObject(&m_font);m_font.Detach();pDC->SetBkMode(TRANSPARENT);return (HBRUSH)::GetStockObject(NULL_BRUSH);}}但是如果在OnCtlColor()在设置背景图片,则图片不会随对话框大小按比例缩放所以可调用StretchBlt()函数设置,如下示例:void CDb3Dlg::OnPaint(){CClientDC cdc(this); CDC comdc;comdc.CreateCompatibleDC(&cdc);CBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP2);comdc.SelectObject(&bitmap);CRect rect;GetClientRect(rect);BITMAP bit;bitmap.GetBitmap(&bit);cdc.StretchBlt(0,0,rect.Width(),rect.Height(),&comdc,0,0,bit.bmWidth,bit.bmHeight,SRCCOPY);}//全屏显示对话框背景图片(限bmp格式)用了两年的VC,其实对OnPaint的工作原理一直都是一知半解。

将现有MFC对话框工程(Dialog based)修改为BCG工程(皮肤美化)

将现有MFC对话框工程(Dialog based)修改为BCG工程(皮肤美化)

HelloDlg.h
class CHelloDlg : public CBCGPDialog { // Construction public:
CHelloDlg(CWnd* pParent = NULL);
// standard constructor
// Dialog Data enum { IDD = IDD_HELLO_DIALOG };
pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } }
// Set the icon for this dialog. The framework does this automatically
virtual BOOL PreCreateWindow(CREATESTRUCT& cs); };
HelloDlg.cpp
// HelloDlg.cpp : implementation file //
#include "stdafx.h" #include "Hello.h" #include "HelloDlg.h"
Hello.h
……
class CHelloApp : public CWinApp, public CBCGPWorkspace { public:
CHelloApp();
// Overrides public: virtual BOOL InitInstance();
// Implementation
CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS(CBCGPVisualManager2007 ));

MFC中设置对话框颜色

MFC中设置对话框颜色

MFC中设置对话框颜色、、音乐的方法一、设置背景颜色的三种方法:1、我们知道程序在运行的时候会调用OnPait函数,那么我们可以在这里设置背景颜色。

void CFlipCardsDlg::OnPaint(){if (IsIconic()){//保持不变}else{CRect rc;GetClientRect( &rc );// 获取客户区CPaintDC dc(this);dc.FillSolidRect(&rc, RGB(0,160,0)); // 填充客户区颜色CDialog::OnPaint();}}2、第二种方法只要一条语句,但是这里要注意这里绘制的颜色是针对程序中所有的对话框(如果是单文档的话,好像不行) SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));// 前一个RGB是背景色,后一RGB是文本颜色该函数放在工程的APP文件的初始化函数中。

3、第三种方法,利用ClassWizard重载OnCtlColor(),即WM_CTLCO LOR消息在要着色的对话框中申明一个变量,CBRUSH m_hbrush;然后在项目的Dlg类初始化函数中给m_hbrush赋值。

m_brush.CreateSolidBrush(RGB(0, 255, 0));然后在OnCtlColor(...)返回该画刷就可以了,如下。

HBRUSH CFlipCardsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UIN T nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC hereswitch (nCtlColor){case CTLCOLOR_DLG:HBRUSH aBrush;aBrush = CreateSolidBrush(RGB(0, 150, 0));hbr = aBrush;break;}// TODO: Return a different brush if the default is not desired return hbr;}这样为对话框着色就可以实现了。

MFC如何给对话框贴图并把对话框上面控件背景设置成透明

//把兼容DC中ቤተ መጻሕፍቲ ባይዱ图片画到客户区域DC中
dc.StretchBlt(0,0,rect.Width(),30,&memDC,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); memDC.SelectObject( pBmpOld );
bmp.DeleteObject();//释放bitmap对象相关的资源 memDC.DeleteDC();//释放兼容DC }
请您及时更换请请请您正在使用的模版将于2周后被下线请您及时更换
MFC如 何 给 对 话 框 贴 图 并 把 对 话 框 上 面 控 件 背 景 设 置 成 透 明
一、给对话框贴图步骤如下: 当前对话框类:CMyDlg 当前对话框模式:None 1、添加WM_PAINT消息(void CMyDlg::OnPaint()) 2、在Opaint函数内添加如下代码: void CMyDlg::OnPaint() { CPaintDC dc(this); // device context for painting CRect rect; GetClientRect(&rect);//获取当前窗口客户区域大小
bmp.LoadBitmap(IDB_BITMAP_TITLE); //加载BITMAP资源 BITMAP bitmap; bmp.GetBitmap(&bitmap); pBmpOld=memDC.SelectObject(&bmp); //把兼容DC中的图片存放到就的BITMAP中 dc.SetStretchBltMode(STRETCH_HALFTONE);//设置保留彩色位图中的颜色
CDC memDC;//兼容DC CBitmap bmp; //保存图片 memDC.CreateCompatibleDC(&dc);//创建兼容DC bmp.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());//建与指定的设备环境相关的设备兼容的位图 CBitmap *pBmpOld = memDC.SelectObject(&bmp);//把兼容DC指定到设备上下文环境 //在兼容DC上指定一个纯颜色填充给定矩形区域 memDC.FillSolidRect(4, 30, rect.Width()-8, rect.Height()-34, RGB(255, 255, 255)); memDC.FillSolidRect(0, 30, 4, rect.Height()-34, RGB(3, 102, 160)); memDC.FillSolidRect(0, rect.bottom-4, rect.Width(), 4, RGB(3, 102, 160)); memDC.FillSolidRect(rect.right-4, 30, 4, rect.Height()-34, RGB(3, 102, 160)); //源设备环境区域中的像素进行位块转换,以传送到兼容DC设备环境上 dc.BitBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,SRCCOPY); memDC.SelectObject( pBmpOld );//把旧的图片数据指定到兼容DC中 bmp.DeleteObject();//释放所有与该对象有关的系统资源

做个无边框winform窗体,并美化界面

做个⽆边框winform窗体,并美化界⾯今天下午程序写完,有些时间就搞下界⾯美化,做个⽆框窗体。

⾸先把窗体的FormBorderStyle设置为None,就变成⽆框的啦,不过你会发现这样窗体上就没有原来的最⼤最⼩化和关闭按钮了哦,所以要⾃⼰补上去。

弄个panel放上去,置顶,可以设置panel的背景⾊和背景图⽚什么的,详细布局就不赘述啦,见下图,主要是再放三个⼩panel进去,⽤来做最⼩化、最⼤化、关闭按钮。

下⾯给出三个panel的事件代码。

关闭代码private void pnlFormClose_MouseClick(object sender, MouseEventArgs e){DialogResult result = MessageBox.Show("是否退出?", "操作提⽰", MessageBoxButtons.YesNo, MessageBoxIcon.Question);if (result == DialogResult.Yes){//this.Dispose();Application.Exit();}}最下化代码private void pnlFormMin_MouseClick(object sender, MouseEventArgs e){this.WindowState = FormWindowState.Minimized;}最⼤化代码,这⾥窗体正常状态点击则最⼤化,最⼤化状态点击则变为常态//最⼤化还原切换private bool max = false;private void pnlFormMax_MouseClick(object sender, MouseEventArgs e){if (max){this.WindowState = FormWindowState.Normal;max = false;}else{this.WindowState = FormWindowState.Maximized;max = true;}}最⼤化后,可以将最⼤化图⽚切换下,加句 this.pnlFormMax.BackgroundImage = Properties.Resources.要切换的图⽚名;这⾥说明下BackgroundImage图⽚导⼊的时候,有本地资源和项⽬资源⽂件两个选项,后者会⽣成Resources⽂件夹,存放导⼊的⽂件,否则就得写图⽚的物理地址了。

MFC界面美化

SDI和MDI程序中对非客户区(标题栏、左右下边界)的美化基本思路是重载CMainFrame类的DefWindowProc()函数,并判断消息为:WM_NCPAINT,WM_NCACTIV ATE,WM_NOTIFY的时候,调用自己的绘制窗口标题栏的函数。

用GetSystemMetrics(SM_CSFRAME)和GetSystemMetrics(SM_CYFRAME)可以取得标题栏的左上角的坐标。

最大化,最小化的按钮自己画,如果不是在标准的位置,一定要记录下他们的位置,并且在WM_NCLBUTTONDOWN消息处理函数中判断是否是点击了按钮,以做出相应的处理。

系统图标也可以自己重新画。

主要任务有贴图(包括标题栏、左边界、右边界、下边界、系统图标、最大化、最小化、关闭按钮)、处理消息(屏蔽系统自带按钮、双击状态栏改变大小、鼠标停放在三个自绘按钮上时改变按钮图标、单击自绘按钮时作出相应反应)。

一、响应的消息及重载的函数响应的消息及重载的函数都在CMainFrame类中。

响应DefWindowProc函数,在其中判断消息是不是WM_NCPAINT、WM_MOVE、WM_NCACTIV ATE、WM_NOTIFY,若是则重画标题栏、左框架、右框架、下框架、最大化、最小化、关闭按钮(放在一个函数里)。

响应消息WM_NCHITTEST,使鼠标位于自绘按钮时返回相应hittest值,同时屏蔽自带按钮的鼠标事件。

简言之,当鼠标位于自绘按钮时,让系统误以为鼠标位于相应按钮,而当鼠标位于系统自带按钮时,让系统误以为鼠标只是位于标题栏。

自绘图标与之类似,不再赘述。

响应消息WM_NCMOUSEMOVE,判断光标是不是位于自绘最大化、最小化、关闭按钮区域,如是则重画相应的按钮。

响应消息WM_NCLBUTTONDOWN,判断单击左键时鼠标是否位于自绘制的最大化、最小化、关闭按钮或图标区域,如是则执行相应的按钮操作。

响应消息WM_NCLBUTTONDBCLK,使双击标题栏时窗口能最大化或还原。

MFC 小技巧(更换皮肤,背景,标题栏,透明)

1.背景透明在MainFrame.Cpp中找到int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数添加代码SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE)^0x80000);// 添加库HINSTANCE hInst = LoadLibrary("User32.DLL");if(hInst){typedef BOOL (WINAPI *ShowLayer)(HWND,COLORREF,BYTE,DWORD);ShowLayer fun = NULL;// 读取函数指针fun = (ShowLayer)GetProcAddress(hInst, "SetLayeredWindowAttributes");if (fun)fun(this->GetSafeHwnd(), 0, 230, 2);FreeLibrary(hInst);}HBITMAP startpic;CStaticstartPics;startpic=(HBITMAP) ::LoadImage(NULL,"snakeNet.bmp",IMAGE_BITMAP,110,50,LR_LOADFROMF ILE|LR_DEFAULTSIZE);startPics.Create(NULL,WS_CHILD|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE,CRect(200,457,20 0+110,457+50),this,NULL);startPics.SetBitmap(startpic);GetSafeHwnd(), 0, 230, 2);里面的参数230是改变透明度对话框的函数好像不一样2.更换背景图片首先先找一张图片将其格式转换成.Bmp格式然后在VC中ctrl+R 新建一个bitmap资源然后在资源栏中右击选择引入然后选择你的那张BMP格式图片出现这个不用理然后在View类中添加CBrush类型的m_brushBackground变量然后在View的构造函数中添加代码CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP2); ///加载位图m_brushBackground.CreatePatternBrush(&bmp); ///创建位图画刷其中IDB_BITMAP2是你图片的ID号然后在OnDraw(CDC* pDC)函数中添加代码CRectrect;GetClientRect(rect);///取得客户区域pDC->FillRect(rect,&m_brushBackground); ///用背景画刷填充区域然后调试就发现背景好看多了3.标题栏标题栏图标找一个IOC格式的图片直接把名字改成工程文件夹中rs文件夹中的ico格式图片的名字直接替换就行了标题栏名字在App。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.无标题栏和边框的对话框Border 属性改为NoneTitle bar属性改为False2.对话框添加OnInitDialog函数OnInitDialog 在vs2010中实现为虚函数,所以在“项目”-> “类向导”-> “虚函数”->找到对应虚函数添加即可,就这么简单。

3.移动无标题栏的对话框拖动无标题窗口时,欺骗WINDOW在鼠标点下是像WINDOW发送一个鼠标选中WINDOW标题栏的消息!添加鼠标左键消息。

void CMyPlayerDlg::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call default//使窗口可以拖动PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM (point.x, point.y));CDialog::OnLButtonDown(nFlags, point);}在OnLButtonDown的鼠标响应消息添加红色部分代码!WM_NCLBUTTONDOWN 鼠标选中非客户区域(标题栏)HTCAPTION 鼠标选中了标题栏MAKELPARAM (point.x, point.y)) 返回一个LPARAM的值PostMessage函数功能:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。

消息队列里的消息通过调用GetMessage和PeekMessage取得。

原型与参数如下:函数原型:BOOL PostMessage(UINT Msg,WPARAM wParam,LPARAM lParam);参数说明:Msg:指定被寄送的消息。

wParam:指定附加的消息特定的信息。

IParam:指定附加的消息特定的信息。

返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。

若想获得更多的错误信息,请调用GetLastError函数。

4.MFC设置对话框背景颜色方法一:重载OnPaint(),即WM_PAINT消息。

CRect rect;CPaintDC dc(this);GetClientRect(rect);dc.FillSolidRect(rect,RGB(0,255,0)); //设置为绿色背景方法二:重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。

HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: 在此更改DC 的任何属性if(nCtlColor==CTLCOLOR_DLG) //更改对话框背景色{pDC->SetTextColor(RGB(0,0,0));pDC->SetBkColor(RGB(166,254,1));HBRUSH b=CreateSolidBrush(RGB(166,254,1));return b;}else if(nCtlColor==CTLCOLOR_STATIC) //更改静态文本颜色{pDC->SetTextColor(RGB(0,0,0));//设置文本颜色//pDC->SetBkColor(RGB(166,254,1)); //需要指定背景色的时候用,此时不用pDC->SetBkMode(TRANSPARENT);//设置背景透明HBRUSH b=CreateSolidBrush(RGB(166,254,1)); //更改静态文本return b;}else if(nCtlColor==CTLCOLOR_EDIT) //更改编辑框{pDC->SetTextColor(RGB(0,0,0)); //设置文本颜色pDC->SetBkMode(TRANSPARENT); //设置背景透明HBRUSH b=CreateSolidBrush(RGB(165,254,236)); //更改颜色return b;}else if(nCtlColor==CTLCOLOR_BTN) //更改按钮背景色{HBRUSH b=CreateSolidBrush(RGB(135, 206, 235));return b;}if(IDC_CHECK1==pWnd->GetDlgCtrlID()) //更改按钮背景色{HBRUSH b=CreateSolidBrush(RGB(135, 206, 235));return b;}if(IDC_RADIO1==pWnd->GetDlgCtrlID()){HBRUSH b=CreateSolidBrush(RGB(135, 206, 235));return b;}// TODO: 如果默认的不是所需画笔,则返回另一个画笔return hbr;}可以根据不同的控件类型返回不同的画刷,来实现不同控件颜色的设置CTLCOLOR_BTN 按钮控件CTLCOLOR_DLG 对话框CTLCOLOR_EDIT 编辑框CTLCOLOR_LISTBOX 列表控件CTLCOLOR_MSGBOX 消息控件CTLCOLOR_SCROLLBAR 滚动条控件CTLCOLOR_STATIC 静态控件这里大家要注意,OnCtlColor能改变Static等子控件的颜色,对于Button必须设置其属性Owner Draw为True,才能改变Button按钮背景色(CButton 文本的字体颜色并不能通过SetBkColor来改变,需要自己重绘CButton,在DrawItem中进行实现。

编辑框的Border属于需要设置为False。

5.无标题栏对话框在任务栏显示标题点击你要添加的那个类,右击属性,在编译器右边会出现菜单栏,点击一个叫“消息”的按钮,找到下面的WM_CREATE,然后点击点击,添加OnCreate函数。

int CtestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CDialog::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code herethis->SetWindowText(_T("test"));//显示字符:testreturn 0;}6.Group Box控件修改颜色Group Box控件颜色不能通过WM_CTLCOLOR消息设置,只能通过自绘完成。

需要使用GroupBox.cpp和GroupBox.h两个文件。

具体步骤如下:1.在工程中添加GroupBox.cpp和GroupBox.h文件,则在类视图中可以看到CGroupBox类,如下图所示:2.修改Group Box的ID3.在xxxxxxDlg.h文件的CxxxxxxDlg类的定义中添加:CGroupBox m_box1,m_box2,m_box3,m_box4;再在xxxxxxDlg.c文件的void CData_SampleDlg::DoDataExchange(CDataExchange* pDX)函数中添加Group Box控件和CGroupBox 对象的关联,即添加DDX_Control(pDX, IDC_STATIC1,m_box1)函数。

代码如下:void CData_SampleDlg::DoDataExchange(CDataExchange* pDX){CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_STATIC1,m_box1);DDX_Control(pDX, IDC_STATIC2,m_box2);DDX_Control(pDX, IDC_STATIC3,m_box3);DDX_Control(pDX, IDC_STATIC4,m_box4);}4.在GroupBox.cpp文件的void CGroupBox::OnPaint()函数中修改线条颜色和字体。

具体如下:void CGroupBox::OnPaint(){CPaintDC dc(this); // device context for painting// TODO: Add your message handler code hereCString str;this->GetWindowText(str);CRect rc;this->GetClientRect(rc);int SIZE = 5;CRect rc2(rc.left+SIZE, rc.top+15, rc.right-SIZE, rc.bottom-SIZE);// C Brush br(RGB(0, 0, 0));// d c.SelectObject(&br);// d c.FillRect(&rc, &br);CBrush br2(RGB(255, 255, 0)); //框颜色dc.SelectObject(&br2);dc.FrameRect(&rc2, &br2);CFont font;font.CreatePointFont(100, _T("宋体")); //文字字体dc.SelectObject(&font);dc.SetBkColor(RGB(135, 206, 235)); //文字背景颜色dc.SetTextColor(RGB(0, 0, 0)); //文字颜色dc.TextOut(rc.left+10, rc.top+10, str);font.DeleteObject();// TRACE("---------------\n");// Do not call CStatic::OnPaint() for painting messages}实现的效果如下图所示:7.按钮的美化(CButtonST)使用CButtonST重绘。

相关文档
最新文档