Chinaunix首页 | 论坛 | 博客
  • 博客访问: 735378
  • 博文数量: 769
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 4985
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 16:37
文章分类

全部博文(769)

文章存档

2011年(1)

2008年(768)

我的朋友

分类:

2008-10-15 16:40:18

    我们使用过很多的软件, 给我们留下印象很深的是那些界面漂亮且迷人的软件, 国外的软件象QuickTime,国产的象金山词霸等,它们的软件界面设计风格都有独特之处。本人跟据自已的经验和大家探讨一下软件的漂亮界面实现的原理并提供DEMO程序。本人经验不多,经常从VCKBASE.COM吸取知识,共同学习,如有不足之处,请指正!也欢迎和我联系。下面就开始吧!

    一、漂亮界面实现的原理

    用图象元素自绘窗口标题样栏,边框,系统按钮(最大化、最小化、关闭按钮)还有按窗口中的控件。图象当然是美工画的,但要你教美工怎么去画,是不是不能理解? ,呆会我会告诉你你如何去教美工画。请先仔细看下图。

    明白了吧,被红线包括的部分都是要画的图象。画得好不好会直接影响你的软件界面。

    二、原理说玩了,来说一下实现的基本知识

    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) 

[1]    

【责编:huangchunmei】

--------------------next---------------------

阅读(281) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~