美化你的应用程序的外观界面

肆绒公路

肆绒公路

2016-01-29 11:51

美化你的应用程序的外观界面,美化你的应用程序的外观界面
美化你的应用程序的外观界面
作者:桂林电子工业学院990312 隋振国

下载本文源程序1(对话框版本)
下载本文源程序2(SDI版本)

  很多编程爱好者都有这样的经历,自己写的程序非常漂亮,但是在Windows平台下开发的程序却总是逃不出Windows默认风格的约束。标题栏、工具栏,一成不变的风格使得再有创意的作品也黯然失色。下面我们给对话框应用程序进行一次外科手术,旨于向各位读者介绍一种方法,希望大家在此基础上有进一步的发展。
  本例以对话框应用程序为基础,自画非客户区,完成应用程序美化,代码运行效果图如下:


(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

下面我们来探讨具体的实现过程

一、定义资源:
  添加系统按钮的位图资源(本例中使用十个位图,分别显示帮助、最小化、最大化、恢复及关闭按钮的普通状态和焦点状态,当然可随程序的要求自定义添加)
  
二、定义全局变量及函数:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)
   CRect m_rtButtExit;//关闭按钮位置  CRect m_rtButtMax;//最大化按钮位置  CRect m_rtButtMin;//最小化按钮位置  CRect m_rtButtHelp;//帮助按钮位置  CRect m_rtIcon;//图标位置  void DrawTitleBar(CDC *pDC);//画非客户区主函数
三、函数实现:
  本例需要对以下消息进行重载DefWindowProc、ON_WM_NCMOUSEMOVE、ON_WM_NCLBUTTONDOWN。
  函数实现体如下:
//主函数,可根据实际情况进行自绘窗体
void CTitleBarDlg::DrawTitleBar(CDC *pDC)       {     if (m_hWnd)     {     CBrush Brush(RGB(0,100,255));     CBrush* pOldBrush = pDC->SelectObject(&Brush);     CRect rtWnd, rtTitle, rtButtons;     GetWindowRect(&rtWnd);     ……………………………..     //因代码过长,未贴,见源程序     ……………………………...     }     } 
//将消息进行过滤,对可能影响界面初始及更新的消息,产生重画消息执行DrawTitleBar函数
LRESULT CTitleBarDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)      {     LRESULT lrst=CDialog::DefWindowProc(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;     }
//实现标题栏按钮的鼠标移动效果
void CTitleBarDlg::OnNcMouseMove(UINT nHitTest, CPoint point)      {     CDC* pDC = GetWindowDC();     if (pDC)     {     ……………………………..     //因代码过长,未贴,见源程序     ……………………………...     }     ReleaseDC(pDC);     CDialog::OnNcMouseMove(nHitTest, point);     }
//实现非客户区,用户鼠标点击操作
void CTitleBarDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)      {     //检测各按钮是否按到     if (m_rtIcon.PtInRect(point))     AfxMessageBox("欢迎访问FlySnowStdio主页");     else if (m_rtButtHelp.PtInRect(point))     SendMessage(WM_HELP);     else if (m_rtButtExit.PtInRect(point))     SendMessage(WM_CLOSE);     else if (m_rtButtMin.PtInRect(point))     SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, MAKELPARAM(point.x, point.y));     else if (m_rtButtMax.PtInRect(point))     {     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();     }
四、总结
本例为对话框应用程序,单文档的基本原理也相似。对于包含菜单项的程序,可以采用自画菜单,将整个程序的界面融为一体,在此不做过多介绍,本人已经完成,请与我联系。
展开更多 50%)
分享

猜你喜欢

美化你的应用程序的外观界面

C语言教程 C语言函数
美化你的应用程序的外观界面

商务Web应用程序的界面设计

平面设计 海报设计 广告设计 画报设计 签名设计 服装设计 名片设计 画册设计 版式设计 商标设计
商务Web应用程序的界面设计

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Windows 8系统双界面应用程序的安装

电脑入门
Windows 8系统双界面应用程序的安装

Delphi 应用程序的应用

编程语言 网络编程
Delphi 应用程序的应用

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

一个多文档界面的应用程序

电脑网络
一个多文档界面的应用程序

Delphi应用程序的应用(一)

Delphi
Delphi应用程序的应用(一)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何在其他程序的窗口上创建按钮并使之能响应

如何在其他程序的窗口上创建按钮并使之能响应

Windows 2000 UI 新特点之二:自定义文件夹栏目

Windows 2000 UI 新特点之二:自定义文件夹栏目
下拉加载更多内容 ↓