对话框美化教程

合集下载

qq聊天对话框底色怎么设置

qq聊天对话框底色怎么设置

qq聊天对话框底色怎么设置
qq 聊天对话框底色怎么设置?如何让你的好友跟你聊天的时候所在窗口展示你是设定好的皮肤呢?店铺为你整理了设置QQ聊天背景的方法,欢迎阅读。

设置QQ聊天背景的方法
首先打开个好友聊天窗口,在聊天窗口上找到“窗口设置”在关闭的旁边!如图所示。

2点击后选择选择“皮肤管理”,当然也可以直接在qq主面板上直接选择“皮肤管理”,只是这样方便看聊天窗口的设置的背景!
3想要聊天窗口显示背景,必须先设置“皮肤管理”里的“全透明皮肤”设置,“全透明皮肤”在右下角。

如图所示。

4点击“全透明皮肤”设置,出现一条滑动条,如果没都动过基本都是在下面,稍微往中间拉试试,然后看聊天窗口!如图。

5滑动条越往上聊天窗口越显示背景,看自己的需要调节全透明皮肤”设置。

当然这样设置qq界面上也会显示背景。

如图。

6如果想要自定义聊天窗口背景,只要在“皮肤管理”里面“自定义”皮肤,上次一张图片就好里!。

VC++更改对话框背景色和字体颜色

VC++更改对话框背景色和字体颜色

VC++更改对话框背景色和字体颜色方法一:设置所有窗口的颜色MFC程序修改对话框的背景和文字颜色最简单的方法就是调用SetDialogBkColor函数,SetDialogBkColor是CWinApp类的成员函数,以下是该函数的原型:void CWinApp::SetDialogBkColor(COLORREF clrCtlBk, COLORREF clrCtlText);请注意,SetDialogBkColor函数并不是对Windows的某个API 的封装,他是MFC框架的一部分,所以不使用MFC的程序也就不能享受这种方便。

这个函数的使用很简单,在程序的CWinApp派生类的InitInstance函数中,添加一行代码就行了,写在domodal()的上一句:SetDialogBkColor(RGB(188,197,230),RGB(13,125,188));注:前一个为背景色,后一个为字体颜色。

方法二:设置当前窗口改变对话框的背景颜色的原理很简单,就是响应WM_ERASEBKGND消息,用自定义的颜色填充对话框的客户区背景,代替对话框窗口默认的背景填充动作。

改变控件和字体的颜色同理,是响应WM_CTLCOLOR这一消息。

具体操作,方法如下:首先://消息映射BEGIN_MESSAGE_MAP(CHelloDlg, CDialog)//{{AFX_MSG_MAP(CHelloDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_CTLCOLOR() //字体颜色ON_WM_ERASEBKGND() //背景色ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPEND_MESSAGE_MAP()其次:定义两个函数afx_msg BOOL OnEraseBkgnd(CDC* pDC);afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);第三:重载OnEraseBkgnd和OnCtlColor其中预先定义:protected:CBrush m_brBkgnd;//设置对话框背景色方法一:可以实现(但有点问题)BOOL CHelloDlg::OnEraseBkgnd(CDC* pDC){CRect rect;GetClientRect(&rect);m_brBkgnd.CreateSolidBrush(RGB(183,213,213)); //背景色pDC->FillRect(&rect,&m_brBkgnd);return TRUE;}方法二:可行BOOL CClientDlg::OnEraseBkgnd(CDC* pDC){CBrush back(RGB(220,215,254));CBrush* pold=pDC->SelectObject(&back);CRect rect;pDC->GetClipBox (&rect);pDC->PatBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY);pDC->SelectObject(pold);return TRUE;方法三:也可行BOOL CHelloDlg::OnEraseBkgnd(CDC* pDC){CBrush MyBrush;MyBrush.CreateSolidBrush(RGB(0,255,0));CBrush *pOldBrush=pDC->SelectObject(&MyBrush);CRect Rect;GetClientRect(&Rect);pDC->Rectangle(&Rect);pDC->SelectObject(pOldBrush);return TRUE;}//设置对话框中控件的字体颜色HBRUSH CHelloDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);if(pWnd->GetDlgCtrlID() == IDC_EDIT_MULLINE) //多行edit 控件{pDC->SetT extColor(RGB(13,125,188)); //设置字体颜色return hbr;}else{pDC->SetBkMode(TRANSPARENT);pDC->SetT extColor(RGB(255,125,188));return (HBRUSH)m_brBkgnd; //因为CBrush类实现了HBRUSH 类型转换操作符}。

批量更改边框美化边框

批量更改边框美化边框

批量更改边框美化边框边框是我们在设计和编辑文档、图片等内容时经常使用的元素之一。

通过更改边框的样式、颜色和宽度等属性,我们可以为内容增添美观和个性化的效果。

然而,如果需要对大量的边框进行更改,手动一个一个修改将会十分繁琐和耗时。

在本文中,我们将探讨如何通过批量更改边框的方式,实现边框的美化。

一、批量更改边框的方法在进行批量更改边框之前,我们需要先了解一些常用的软件或工具,以及它们提供的批量操作功能。

以下是几种常用的批量更改边框的方法:1. 使用图像处理软件许多图像处理软件都提供了批处理功能,可以通过设置边框样式来同时更改多个图片的边框。

例如,Adobe Photoshop和GIMP等软件都具备这种功能。

在这些软件中,你可以选择要修改的图片,然后通过批处理功能设置边框的样式、颜色和宽度等属性,从而实现批量更改边框的效果。

2. 使用CSS样式如果你需要批量更改HTML文档中的边框样式,可以通过CSS样式来实现。

首先,你需要为HTML元素或类选择器创建一个CSS样式,其中包括边框的样式、颜色和宽度等属性。

然后,你可以在HTML文档中应用该CSS样式,从而实现多个元素的边框批量更改。

通过这种方法,你可以轻松地对网页中的边框进行美化和修改。

3. 使用批处理脚本对于需要批量更改边框的其他类型文档,例如Word文档或PDF文件,你可以通过编写批处理脚本来实现。

批处理脚本可以自动化执行一系列命令或操作,从而实现对边框的批量更改。

你可以使用脚本编程语言,例如Python或VBScript,来编写相应的脚本,并运行它们以实现边框的美化。

二、边框的美化效果通过批量更改边框,我们可以实现各种美化效果,使内容展现更加吸引人和专业。

以下是几种常见的边框美化效果:1. 圆角边框圆角边框给内容增添了一种柔和和现代感。

通过将边框的圆角半径调整为适当的大小,你可以让内容的边框形状变得更加圆润和优雅。

2. 渐变边框渐变边框可以为内容增添一种流畅和动态的感觉。

前端设计中的边框样式优化技巧

前端设计中的边框样式优化技巧

前端设计中的边框样式优化技巧在网页设计中,边框样式是一个重要的设计元素,它可以使页面更加美观、清晰,并提供更好的用户体验。

通过优化边框样式,我们可以使页面更具吸引力和可读性。

本文将介绍一些前端设计中的边框样式优化技巧,帮助你打造出更出色的设计。

一、边框颜色的选择在选择边框颜色时,我们应该根据页面的整体风格和元素的需求进行判断。

一般来说,选择与页面主色调或元素背景色相协调的边框颜色是一个不错的选择。

对于需要突出显示的元素,可以选择与主色调对比较大的边框颜色,以增加视觉吸引力。

同时,要确保边框颜色与文字颜色有足够的对比,以确保内容易于阅读。

二、边框线型的使用边框线型也是边框样式中的一个重要要素,它可以为页面增加层次感和纹理,使设计更加丰富。

常见的边框线型包括实线、虚线、双线、点线等,不同的线型可用于不同的设计需求。

例如,实线可以用于突出显示元素的边界,虚线可以用于突出显示特定的分隔线,双线可以用于突出显示重要的信息区域。

同时,要注意边框线型的粗细和长度的选择,以确保与页面风格和元素需求相协调。

三、边框圆角的运用边框圆角是一种让边框看起来更加柔和和友好的技巧。

通过为边框添加圆角属性,我们可以消除页面上尖锐的边角,使设计更加舒适和美观。

一般来说,边框圆角的半径越大,边框越柔和,半径越小,边框越尖锐。

在运用边框圆角时,要考虑元素的大小和形状,并根据页面整体风格进行选择。

四、边框阴影的添加边框阴影是一种使边框看起来更加立体和有深度的技巧。

通过为边框添加阴影效果,我们可以使边框脱离背景,具有浮起的感觉。

边框阴影可以为页面增添层次感,使设计更具立体感。

在添加边框阴影时,需要考虑阴影的颜色、透明度和位置,以确保与页面整体风格相协调,并增加元素的视觉吸引力。

五、边框动画的运用边框动画可以为页面增加生动感和交互性,吸引用户的注意力。

通过为边框添加动画效果,我们可以使设计更加有趣和有活力。

一些常见的边框动画效果包括边框渐变、边框闪烁、边框缩放等。

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() 进行实际的窗口创建

系统美化实战之—修改系统属性对话框

系统美化实战之—修改系统属性对话框

系统美化实战之:修改系统属性对话框这是一个系列的教程。

由于时间和精力毕竟有限,所以难免存在疏漏和错误,还请大家多包涵。

从win9x开始,我就开始了对windows系统的主题修改,在那个年代,win9x自带一个简陋的themes系统,针对主题的修改在那时候还只是个概念,后来是win200 0,在这个系统里,microsoft 摒弃了本不成熟的theme系统,以致于在这样一个系统环境下,改变系统的默认风格变得十分困难。

直到现在,终于出现了一个可以良好支持theme的系统——winxp,不过,不知道出于什么原因,microsoft并没有放开这个主题标准,使得在未经过修改的系统上不能使用来自第三方的桌面主题!而这个限制来自于uxtheme.dll和“系统文件保护”功能这两个方面,幸好有国外高手破*了uxtheme.dll文件,使得无限制地使用第三方的主题成为了可能,在接下来的一系列教程里,我会逐一教大家如何打造一个符合自己个性的桌面主题!做个“好色”的电脑——实战篇之一——系统属性对话框的修改其实修改系统属性对话框跟主题的修改并没有太大的联系,当朋友们遇到非常喜欢的主题,又追求完美的时候,修改系统对话框可以使这一位置的显示更配合主题,不过,把这个放在最前面介绍主要是为了让大家看看——其实修改系统文件并不是想像的那么困难。

首先我们来看看修改后的效果图。

图中一共有8个部分,修改不同部分涉及到不同的方法,不同的工具,下面我一一讲解:对于第1部分,我们需要用到在工具篇中提到的ResHacker(下载地址/html_2/1/59/id=842&pn= 0.html)这个工具,在你准备好工具以后,在自己的硬盘上建立一个临时的目录,从你的系统c:\windows\system32中复制文件sysdm .cpl到这个临时目录,用ResHacker 打开,看到如下图画面:对于2、3、4、6部分和第7部分的按钮上中文部分在这里修改,如下图:对于第7部分CPU频率和内存大小的修改(这个修改只是个自欺欺人的修改,完全属于教学意义!),请看下图:到这里,需要Reshacker修改的地方就完成了,最后记得保存,回到刚才建立的临时文件夹中,你会发现两个文件,一个是sysdm.cpl,另一个是sysdm_original.cpl,复制前者到c:\ windows\system32里替换掉原文件,而后者是Reshacker自动生成的备份。

制作简单可爱对话框

制作简单可爱对话框

今天的练习稿是两个可爱的小对话框今天的练习稿是两个可爱的小对话框
制作过程非常的简单,只做一点自己只做一点自己
的心得.
合并形状合并形状
步骤:绘制形状绘制形状
1 圆形圆形
(椭圆工具绘制)
2 钢笔绘制的三角形钢笔绘制的三角形
3 开始合并形状开始合并形状
回原形状1 按ctrl+c 复制复制 然后移动形状2 上面按ctrl+v 粘贴粘贴
4 使用路径选择工具==== 点击组合即可点击组合即可
这样对话框就绘制完成这样对话框就绘制完成
再根据自己的需求去添加效果就可以了再根据自己的需求去添加效果就可以了
总结要点:非常简单记住非常简单记住 ctrl+c ctrl+v 形状随意组合形状随意组合。

第五讲对话框及其设计

第五讲对话框及其设计

第五讲对话框及其设计对话框是用户界面中常用的一种控件,用于与用户进行交互。

它可以用来显示消息、接收用户的输入、展示进度等。

在图形用户界面中广泛应用,对于提升用户体验和交互效率非常重要。

本文将介绍对话框的常见类型、设计原则以及一些设计技巧。

一、对话框的常见类型1.提示框:用于显示一条简短的消息给用户,通常只有一个确定按钮,常见的有警告框、错误框、成功框等。

2.询问框:用于询问用户是否同意一些操作,一般有确定和取消两个按钮。

常见的有确认框、删除确认框等。

3.输入框:用于接收用户的输入,可以是文本输入框、密码输入框、选择框等。

4.进度框:用于展示操作的进度,常见的有加载框、上传框等。

5.设置框:用于显示和设置各种选项的对话框,常见的有设置窗口、首选项对话框等。

二、对话框的设计原则1.简洁明了:对话框的内容要简洁明了,只包含必要的信息和操作按钮,不要过度冗长。

2.一致性:对话框的样式和交互方式要与系统和应用的整体风格保持一致,避免造成用户困惑。

3.易理解:对话框中的文字提示要清晰易懂,避免使用专业术语或难懂的词汇,以免引起用户的困惑。

4.操作明确:对话框的按钮文案要明确表示该按钮的操作,避免使用模棱两可的词语。

5.合理布局:对话框的布局要合理,将内容逻辑分组,遵循从上到下、从左到右的阅读习惯。

6.友好提示:对话框中可以适当添加一些友好的提示,例如加载动画、进度条等,以提升用户体验。

三、对话框的设计技巧1.突出重点:对话框中的重点信息可以使用不同的颜色、字体大小或图标进行突出展示,吸引用户注意。

2.拆分内容:对长篇幅的内容,可以进行拆分或分组展示,以减少用户的信息压力。

3.默认选项:对于一些常用的操作,可以设置一个默认选项,让用户在不需要更改的情况下直接点击确定按钮。

4.快捷键:可以为对话框中的操作按钮设置快捷键,方便用户通过键盘进行操作,提高效率。

5.动态交互:对话框中可以增加一些动态交互,例如输入框中实时显示输入内容的合法性提示,增加用户的操作反馈。

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

1.设置对话框背景图片插入资源中--插入--Bitmap--引入要设置成背景的图片(本例引入两个ID分别为IDB_BITMAP1,IDB_BITMAP2)拉入图像设置成位图--然后选择属性(M)中选择位图的ID2.设置对话框背景颜色在.cpp中BOOL CMyApp::InitInstance(){AfxEnableControlContainer();// Standard initialization// If you are not using these features and wish to reduce the size //of your final executable, you should remove from the following//the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dControls();// Call this when using MFC in a sharedDLL#elseEnable3dControlsStatic();// Call this when linking to MFC statically#endifCMyDlg dlg;m_pMainWnd = &dlg;SetDialogBkColor(RGB(255,255,255),RGB(0,0,0));//这里设置对话框背景颜色为白色,文本//颜色为黑色int nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: Place code here to handle when the dialog is//dismissed with OK}else if (nResponse == IDCANCEL){// TODO: Place code here to handle when the dialog is//dismissed with Cancel}// Since the dialog has been closed, return FALSE so that we exit the//application, rather than start the application's message pump.return FALSE;}3.设置按钮位图插入Bitmap (ID分别为IDB_BITMAP3,IDB_BITMAP4)在对话框头文件中定义CBitmap;protected:CBitmap bitmap1,bitmap2;然后在对话框Dlg.cpp文件中的OnIniDialog()中加入以下代码bitmap1.LoadBitmap(IDB_BITMAP3);CButton *m_pButton1, *m_pButton2;m_pButton1=(CButton*)GetDlgItem(IDOK);m_pButton1->SetBitmap(HBITMAP(bitmap1));bitmap2.LoadBitmap(IDB_BITMAP4);m_pButton2=(CButton*)GetDlgItem(IDC_HAHA);m_pButton2->SetBitmap(HBITMAP(bitmap2));// TODO: Add extra initialization here然后编译运行看下效果[顶]在VC中让对话框显示背景图[点评:用图片控件,好像图片最多色彩数不超过256色,也就是8位,但是用代码在里面写的方法就可以解决这个问题了.]让一个对话框显示背景通常有两种做法:使用图片控件、在WM_PAINT消息中画图。

用图片控件非常简单,但功能功能不强大,不能对图片拉申等。

在WM_PAINT中画图,相对复杂,但可以做很多特殊处理(如对图片拉申、图片取反等等)。

那么下面就对两种方法略述。

1、用图片控件在对话框中加入Picture控件,属性页中General->Type设为Bitmap, Image中选中相关联的图片资源号。

这样就编译运行,你就会发现它己经可以了。

耶,不对,图片复盖了其它控件!怎么办?哈哈,这是由于你的Picture控件是后面放上去的。

这样它会显示在最上层,所以有些控件看不到了。

有两种方法可以解决:(1)、选中所有控件Ctrl+A, 然后取消对图片控件的选择,将其它控件剪切Ctrl+X,再粘帖Ctrl+C,编译运行或Ctrl+T看看,是不是可以了?(2)、在.rc文件中找到此对话框的定义,此处以例子中的一对话框为例。

IDD_DLG_USE_STATIC DIALOGEX 0, 0, 266, 201STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENUEXSTYLE WS_EX_APPWINDOWCAPTION "DlgUseStatic"FONT 9, "宋体"BEGINCONTROL129,IDC_STATIC,"Static",SS_BITMAP,0,0,266,20 1PUSHBUTTON"取消",IDCANCEL,210,23,50,14DEFPUSHBUTTON "确定",IDOK,210,7,50,14LTEXT"这是个通过图片控件来实现Dialog背景的",IDC_STATIC,13,106,156,8PUSHBUTTON"方法二>>",IDC_BUTTON1,215,104,50,14END在BEGIN至END中便是各个控件的定义和先后顺序,你可以随意调整它们的顺序,这样最先的,它将会显示在最底层(即可能被其它控件覆盖)。

2、在WM_PAINT中画图这是显示图片最常用的方法,各类窗体、控件要加上背景都基本上是在OnPaint中将图片画上。

具体做法如下://从资源中载入图片CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP1);//得到图片信息BITMAP bmpInfo;bmp.GetBitmap(&bmpInfo);//在内存中创建一个位图兼容设备CDC dcMemory;dcMemory.CreateCompatibleDC(&dc);//将图片选入兼容设备CBitmap *pOldBmp=dcMemory.SelectObject(&bmp);//将兼容设备的内容copy到屏幕设备中,实现真正的Paintdc.BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight,&dcMemory, 0, 0, SRCCOPY);//将设备还原dcMemory.SelectObject(pOldBmp);这样图片便显示在主对话框上。

特殊处理:是不是经常有人提到某些加快图形显示、减少闪烁?处理什么WM_ERASEBKGND消息?确实是这样,应为每个窗体重画时,它先会发WM_ERASEBKGND消息,让窗体用设置好的刷子将窗体需要重画的区域刷一次,然后才会发送WM_PAINT消息,将需要的再画上去。

这样就可以保证不会有残留的图形。

但这样就会在短暂的时间内出现灰色背景,如果执行比较慢,就会让人感觉到。

因此如果你确定不需要清除原有的背景,那么你就可以在OnEraseBkgnd中直接返回TRUE,或者直接在这里面绘图。

但一定要注意,不擦除背景时弄不好会带来上些麻烦事,源码中有此演示(由于一开始设置为不擦除背景,所以窗体创建时,没有画图的部分将显示为原来屏幕上的图象)。

同时源码中演示了对图片的拉申,实质上通过CDC我们可以对图象进行众多的处理,请参见有观资料或MSDN。

我们使用过很多的软件,给我们留下印象很深的是那些界面漂亮且迷人的软件,国外的软件象QuickTime,国产的象金山词霸等,它们的软件界面设计风格都有独特之处。

本人跟据自已的经验和大家探讨一下软件的漂亮界面实现的原理并提供DEMO程序。

本人经验不多,经常从吸取知识,共同学习,如有不足之处,请指正!也欢迎和我联系。

下面就开始吧!一、漂亮界面实现的原理用图象元素自绘窗口标题样栏,边框,系统按钮(最大化、最小化、关闭按钮)还有按窗口中的控件。

图象当然是美工画的,但要你教美工怎么去画,是不是不能理解? ,呆会我会告诉你你如何去教美工画.请先仔细看下图。

明白了吧,被红线包括的部分都是要画的图象。

画得好不好会直接影响你的软件界面。

二、原理说玩了,来说一下实现的基本知识1、VC软件绘图技术:CBitmap* pBitmap = new CBitmap;BITMAP BmpInfo;CBitmap* pOldBitmap;CDC* pDisplayMemDC=new CDC;pDisplayMemDC->CreateCompatibleDC(pDC);pBitmap->LoadBitmap(IDB_TITLE_LEFT);pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);pBitmap->GetBitmap(&BmpInfo);// x,y为绘图位置,必要时此语句要有For(..;..;..)控制pDC->BitBlt(x,y, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY);pDisplayMemDC->SelectObject(pOldBitmap);pBitmap->DeleteObject();ReleaseDC(pDisplayMemDC);//记得执行以下的语句delete pDisplayMemDC;delete pBitmap; 2、坐标的概念:点、窗口坐标和屏幕坐标及转换,很重要!如不清楚请先复习相关知识。

下图是我写在一个界面,就是基于上述原理实现的:下面介绍软件如何实现的:①、重载对话框的消息函数:void OnNcLButtonDown(UINT nHitTest, CPoint point);//单击标题栏时是响应void OnNcMouseMove(UINT nHitTest, CPoint point);//Mous 在标题移动时响应LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)②、添加关键成员函数为:BOOL DrawTitleBar(CDC *pDC)③、添加完消息涵数后,在.cpp中实现它们的代码:void CTitleBarDlg::OnNcMouseMove(UINT nHitTest, CPoint point) {CDC* pDC = GetWindowDC();CDC* pDisplayMemDC=new CDC;pDisplayMemDC->CreateCompatibleDC(pDC);CBitmap* pBitmap = new CBitmap;CBitmap* pOldBitmap;CRect rtWnd, rtButton;if (pDC){CString StrTemp = "";GetWindowRect(&rtWnd);//mouse坐标转化为本窗口坐标重要point.x = point.x - rtWnd.left;point.y = point.y - rtWnd.top;//判断mouse是否移到系统按钮上if (m_rtButtExit.PtInRect(point)){pBitmap->LoadBitmap(IDB_EXIT_FOCUS);StrTemp = _T("关闭");}else{if(m_rtButtMin.PtInRect(point)){pBitmap->LoadBitmap(IDB_MIN_FOCUS);StrTemp = _T("最小化窗口");}elseif(m_rtButtMax.PtInRect(point)){pBitmap->LoadBitmap(IDB_MAX_FOCUS);if(IsZoomed()){StrTemp = _T("还原窗口");}else{StrTemp = _T("最化大窗口");}}else{pBitmap->LoadBitmap(IDB_NORMAL);}}rtButton = m_rtButtMin;BITMAP BmpInfo;pBitmap->GetBitmap(&BmpInfo);pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);pDC->BitBlt(rtButton.left-6,rtButton.top-2,BmpInfo.bmWidth,BmpInfo.bmHeight,pDisplayMemDC,0,0,SRCCOPY);pDisplayMemDC->SelectObject(pOldBitmap);pBitmap->DeleteObject();CRect ShowTipRec;ShowTipRec = m_rtButtMin;if(!StrTemp.IsEmpty()){//ScreenToClient(&ShowTipRec);//m_ToolTip.AddToolTip(IDD_TITLEBAR_DIALOG,&ShowTipRec,St rTemp);//m_ToolTip.SetDelayTime(200);}}ReleaseDC(pDisplayMemDC);ReleaseDC(pDC);delete pDisplayMemDC;delete pBitmap;CDialog::OnNcMouseMove(nHitTest, point);}//此为关键函数void CTitleBarDlg:rawTitleBar(CDC *pDC){if (m_hWnd){CBrush Brush(RGB(0,100,255));CBrush* pOldBrush = pDC->SelectObject(&Brush);CRect rtWnd, rtTitle, rtButtons;GetWindowRect(&rtWnd);//取得标题栏的位置rtTitle.left = GetSystemMetrics(SM_CXFRAME);rtTitle.top = GetSystemMetrics(SM_CYFRAME);rtTitle.right = rtWnd.right - rtWnd.left - GetSystemMetrics(SM_CXFRAME);rtTitle.bottom = rtTitle.top + GetSystemMetrics(SM_CYSIZE);//计算最小化按钮的位置,位图大小为15X15rtButtons.left = rtTitle.right-60;rtButtons.top= rtTitle.top+2;rtButtons.right = rtTitle.right-42;rtButtons.bottom = rtTitle.top+20;m_rtButtMin = rtButtons;//计算最大化按钮的位置,位图大小为15X15m_rtButtMax.left = m_rtButtMin.left + 18;m_rtButtMax.top = m_rtButtMin.top;m_rtButtMax.right = m_rtButtMin.right + 16;m_rtButtMax.bottom = m_rtButtMin.bottom;m_rtButtExit.left = m_rtButtMax.left + 18;m_rtButtExit.top = m_rtButtMax.top;m_rtButtExit.right = m_rtButtMax.right + 16;m_rtButtExit.bottom = m_rtButtMax.bottom;//准备CBitmap* pBitmap = new CBitmap;BITMAP BmpInfo;CBitmap* pOldBitmap;CDC* pDisplayMemDC=new CDC; pDisplayMemDC->CreateCompatibleDC(pDC);//重画CaptionPOINT DrawPonit;DrawPonit.x = rtTitle.left-4; DrawPonit.y = rtTitle.top-4;pBitmap->LoadBitmap(IDB_TITLE_LEFT);pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);pBitmap->GetBitmap(&BmpInfo);pDC->BitBlt(rtTitle.left-4,rtTitle.top-4,BmpInfo.bmWidth,BmpInfo.bmHeight,pDisplayMemDC,0,0,SRCCOPY);DrawPonit.x = DrawPonit.x + BmpInfo.bmWidth;pDisplayMemDC->SelectObject(pOldBitmap);pBitmap->DeleteObject();pBitmap->LoadBitmap(IDB_TOP);pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);pBitmap->GetBitmap(&BmpInfo);while(DrawPonit.x<= m_rtButtMin.left-66){pDC->BitBlt(DrawPonit.x,DrawPonit.y,BmpInfo.bmWidth,BmpInfo.bmHeight,pDisplayMemDC,0,0,SRCCOPY);DrawPonit.x = DrawPonit.x + BmpInfo.bmWidth;}pDisplayMemDC->SelectObject(pOldBitmap);pBitmap->DeleteObject();pBitmap->LoadBitmap(IDB_TITLE_RIGHT);pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);pBitmap->GetBitmap(&BmpInfo);pDC->BitBlt(DrawPonit.x,DrawPonit.y,BmpInfo.bmWidth,BmpInfo.bmHeight,pDisplayMemDC,0,0,SRCCOPY);pDisplayMemDC->SelectObject(pOldBitmap);pBitmap->DeleteObject();//重画最小化buttonrtButtons = m_rtButtMin;pBitmap->LoadBitmap(IDB_NORMAL);pBitmap->GetBitmap(&BmpInfo);pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);pDC->BitBlt(rtButtons.left-6,rtButtons.top-2,BmpInfo.bmWidth,BmpInfo.bmHeight,pDisplayMemDC,0,0,SRCCOPY);pDisplayMemDC->SelectObject(pOldBitmap);pBitmap->DeleteObject();int nOldMode = pDC->SetBkMode(TRANSPARENT);COLORREF clOldText=pDC->GetTextColor();CFont titleFont;titleFont.CreateFont( 12, // nHeight8, // nWidth0, // nEscapement文本行逆时针旋转角度0, // nOrientation字体角度FW_BOLD, // nWeight字体粗细程度FALSE, // bItalicFALSE, // bUnderline0, // cStrikeOut 删除线ANSI_CHARSET, // nCharSetOUT_DEFAULT_PRECIS, // nOutPrecisionCLIP_DEFAULT_PRECIS, // nClipPrecisionDEFAULT_QUALITY, // nQualityDEFAULT_PITCH | FF_SWISS, // nPitchAndFamily_T("隶书"));// lpszFac pDC->SelectStockObject(SYSTEM_FIXED_FONT);CFont *OldFont;OldFont = pDC->SelectObject(&titleFont);CString m_StrTitle;GetWindowText(m_StrTitle);pDC->SetTextColor(RGB(80,255,25));if(m_ShowTitle){pDC->TextOut(65,10,m_StrTitle);}else{m_StrTitle = m_StrTitle.Left(6);m_StrTitle += "...";pDC->TextOut(30,10,m_StrTitle);}pDC->SetBkMode(nOldMode);pDC->SetTextColor(clOldText);pDC->SelectObject(OldFont);//pDC->TextOut(60,60,m_StrTitle);//重画左边框pBitmap->LoadBitmap(IDB_LEFTDOWN);pBitmap->GetBitmap(&BmpInfo);pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);int i ;for (i= 20;i<=rtWnd.bottom;i=i+BmpInfo.bmHeight-3){pDC->BitBlt(0, rtButtons.top+i,BmpInfo.bmWidth,BmpInfo.bmHeight,pDisplayMemDC,0,0,SRCCOPY);}pDisplayMemDC->SelectObject(pOldBitmap);pBitmap->DeleteObject();//重画右边框pBitmap->LoadBitmap(IDB_RIGHTDOWN);pBitmap->GetBitmap(&BmpInfo);pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);GetClientRect(&rtWnd);for (i= 25;i<=rtWnd.bottom+27;i=i+BmpInfo.bmHeight-3){pDC->BitBlt(rtWnd.right, i,BmpInfo.bmWidth,BmpInfo.bmHeight,pDisplayMemDC,0,0,SRCCOPY);}pDisplayMemDC->SelectObject(pOldBitmap);pBitmap->DeleteObject();//重画底边框pBitmap->LoadBitmap(IDB_DOWN);pBitmap->GetBitmap(&BmpInfo);pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);GetClientRect(&rtWnd);for (i= 9; i<=rtWnd.right; i=i+2){GetClientRect(&rtWnd);pDC->BitBlt(i,rtWnd.bottom+26,BmpInfo.bmWidth,BmpInfo.bmHeight,pDisplayMemDC,0,0,SRCCOPY);}pDisplayMemDC->SelectObject(pOldBitmap);pBitmap->DeleteObject();ReleaseDC(pDisplayMemDC);delete pDisplayMemDC;delete pBitmap;}}void CTitleBarDlg::OnNcLButtonDown(UINT nHitTest, CPoint point){CRect rtWnd;GetWindowRect(&rtWnd);//mouse坐标转化为本窗口坐标重要point.x = point.x - rtWnd.left;point.y = point.y - rtWnd.top;//检测各按钮是否按到if (m_rtIcon.PtInRect(point))AfxMessageBox("界面软件设计者:朱一松EMail:Song_0962@");else{if (m_rtButtHelp.PtInRect(point)){SendMessage(WM_HELP);}else{if (m_rtButtExit.PtInRect(point)){SendMessage(WM_CLOSE);}else{if(m_rtButtMin.PtInRect(point)){m_ShowTitle = FALSE;SendMessage(WM_SYSCOMMAND,SC_MINIMIZE,MAKELPARAM(point.x, point.y));}else{if(m_rtButtMax.PtInRect(point)){m_ShowTitle = TRUE;if (IsZoomed())SendMessage(WM_SYSCOMMAND,SC_RESTORE,MAKELPARAM(point.x, point.y));else{SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,MAKELPARAM(point.x, point.y));Invalidate();}}else{if(!IsZoomed()){Default();}}}}}}}//******************************************************LRESULT CTitleBarDlg:efWindowProc(UINT message, WPARAM wParam, LPARAM lParam){LRESULT lrst=CDialog:efWindowProc(message, wParam, lParam);if (!::IsWindow(m_hWnd))return lrst;if (message==WM_MOVE||message==WM_PAINT||message==WM_NCPAINT||message==WM_NCACTIVATE||message == WM_NOTIFY){CDC* pWinDC = GetWindowDC();if (pWinDC)DrawTitleBar(pWinDC);ReleaseDC(pWinDC);}return lrst;}好了运行你的程序,即可出现漂亮的界面。

相关文档
最新文档