【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2978|回复: 0

[算法/加密解密] 让你的软件界面更漂亮 [VC]

[复制链接]
发表于 2007-2-5 21:58:38 | 显示全部楼层 |阅读模式

我们使用过很多的软件, 给我们留下印象很深的是那些界面漂亮且迷人的软件, 国外的软件象QickTime,国产的象金山词霸等,它们的软件界面设计风格都有独特之处。本人跟据自已的经验和大家探讨一下软件的漂亮界面实现的原理并提供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中实现它们的代码(点击查看代码附件):

  好了运行你的序程,即可出现漂亮的界面。说明在设计对话框时最好只选上Title Bars,其它不要.消息函数要手动添加。只本程序是在VC++6.0 +WinXP环境下完成的。

  经过实践证明,仅仅画一个窗口很容易,多窗口程序软件实现统一风格很难。如若有机会的话,我会和大家继续探讨如何将设计好的漂亮窗口子类化,让程序所有的窗口有统一风格,美化窗口的其它控件并可自动随窗口改变而调整大小。我想那才是我们大家关心的。对不?

  本人的联系QQ:34544052  Email:Song_0962@sina.com .

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 04:07

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表