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

本例以对话框应用程序为基础,自画非客户区,完成应用程序美化,代码运行效果图如下:

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

一、定义资源:

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

二、定义全局变量及函数:

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();

}

四、总结

本例为对话框应用程序,单文档的基本原理也相似。对于包含菜单项的程序,可以采用自画菜单,将整个程序的界面融为一体,在此不做过多介绍,本人已经完成,请与我联系。如果你想使你的程序更漂亮,也可以尽情放至贴图到背景上,愿你的程序多姿多彩。本文是在百忙中匆匆完成,错误之处希望大家批评指正!

上述程序在Win2000 Advanced Server + VC6 + SP5 2002.3下编译运行通过。Win98测试顺利运行。

php界面怎么美化,美化你的应用程序的外观界面相关推荐

  1. VC++软件界面风格简单美化

    为了让软件能在视觉上给用户带来一种清新的感觉,从而避免潜在的用户视觉疲劳和审美疲劳,软件一般都要经过专业的界面设计和美化.但是,我们不是也没有专业的界面设计美化人员,所以只能对软件的界面和风格进行初步 ...

  2. SkinMagic——MFC界面换肤美化

    SkinMagic--MFC界面换肤美化(完整步骤) 一. 下载并解压SkinMagic https://pan.baidu.com/share/link?shareid=1666255608& ...

  3. 以金山界面库(openkui)为例思考和分析界面库的设计和实现——代码结构(完)

    三年前,准备将金山界面库做一个全面的剖析.后来由于种种原因,这个系列被中断而一直没有更新.时过境迁,现在在windows上从事开发的人员越来越少,关注这块的技术的朋友也很少了.本以为这系列也随着技术的 ...

  4. 以金山界面库(openkui)为例思考和分析界面库的设计和实现——资源读取模块分析

    按照软件的执行流程,我们首先遇到<以金山界面库(openkui)为例思考和分析界面库的设计和实现--问题>中提出的最后一个问题:界面描述文件的放置位置.我们曾提出一种方案:将界面描述文件打 ...

  5. 以金山界面库(openkui)为例思考和分析界面库的设计和实现——问题

    随着物质生活的丰富,人们的精神生活也越来越丰富.人们闲暇的时间也相对变多,于是很多人就开始寻找打发时间的方法.其中电视便是其中一种非常重要的消遣方式.假如我们打开电视机,看到了一个电视台正在播一部我们 ...

  6. 微信小程序开发登录界面mysql_微信小程序 欢迎界面开发的实例详解

    微信小程序 欢迎界面 市面上大多数的app都会有一个欢迎界面,下面将演示如何通过微信小程序实现一个欢迎界面. 下面将会按照以下的顺序介绍: 布局的实现 逻辑的实现 样式的实现 1.布局的实现 整个布局 ...

  7. centos运行java图形化界面_CentOS设置默认启动命令行(不启动图形界面)

    CentOS中如何进入图形界面和文字界面,Linux真正的服务器是不会运行图形化界面的,怎么样才能在不卸载桌面的前提下开机直接进入命令界面呢?(我安装的是CentOS 6.5)下面就简单介绍以下: 一 ...

  8. 在微信小程序上,帮助中心界面实现类似手风琴案例

    在微信小程序上,帮助中心界面实现类似手风琴案例 wxml <view class="container"><block wx:for="{{arrdat ...

  9. linux命令界面下载kettle,kettle在linux环境中打开图形界面-Go语言中文社区

    kettle在linux环境中打开图形界面 kettle数据转换的时候需要图形界面 当运行./spoon.sh时,如果没有图形界面,会出现下面的结果 ./spoon.sh [root@localhos ...

  10. 奉献给你:《Visual C# 2005程序开发与界面设计秘诀》

    对于<Visual C# 2005程序开发与界面设计秘诀>,我们将其定位为一本Visual C# 2005的进阶技术研讨书,针对的是曾使用过Visual C# 2002或者已经对新版本的V ...

最新文章

  1. 使用xdebug分析thinkphp框架函数调用图
  2. java linux 起多个进程_linux下tomcat启动后出现多个java进程
  3. matlab 代码开头,诸位大神请帮我讲解一下每个程序开头这些行的意思
  4. RookeyFrame2.0发布,UI重构
  5. 经典MySQL语句大全和常用SQL语句命令的作用。
  6. 非常有用的并发控制-倒计时器CountDownLatc
  7. 脱离业务的技术架构,都只是一团废纸,教你从0-1建设业务架构
  8. Eureka Server 集群
  9. [Git] 撤销操作
  10. Sql Server 2005跨数据查询
  11. 老路MBA商学课|第002课:比较优势|我做的比你好,就应该我做吗?
  12. 移动硬盘不显示盘符修复方法
  13. php网站建设和外包
  14. 利用清华镜像站解决pip超时问题
  15. 如何开始创业(催生全美最大孵化器YC的文章)
  16. iOS 支持webrtc的浏览器 bowser
  17. 【征文大赛】TiDB 社区第二届征文大赛,一次性带走社区全部新周边,还有bose 降噪耳机、倍轻松按摩仪等你拿!
  18. yapi 权限_YAPI安装方法
  19. 运动电荷的电磁场(一)
  20. Java小游戏学习笔记

热门文章

  1. 【牛客网-公司真题-前端入门篇】——如何快速上手牛客
  2. 大麦盒子DM1004线刷降级填坑记录
  3. android暗水印技术,基于Android的隐藏数字水印技术的研究与实现
  4. word批量转pdf,word批量转pdf步骤
  5. 想请问下PDF双面打印时(打印机自动双面打印)为什么反面那页的内容是倒过来的,应该怎么设置?...
  6. OBS 录制简单操作说明
  7. h5实现海报分享功能
  8. Pytorch实现ResNet50网络结构,包含ResNet18,ResNet34,ResNet50,ResNet101,ResNet152
  9. 嵩天python笔记_嵩天Python学习笔记
  10. 二路归并排序和基数排序