windows7界面如何开发绚丽、高效率的界 面(Windows嵌入式系统).pdf





《windows7界面如何开发绚丽、高效率的界 面(Windows嵌入式系统).pdf》由会员分享,可在线阅读,更多相关《windows7界面如何开发绚丽、高效率的界 面(Windows嵌入式系统).pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、windows7界面:如何开发绚丽、高效率的界面(Windows嵌入式系统)疯狂代码 http:/CrazyC 上篇文章中提到用户体验(UE),并且说到国内有专门去做UE的团队也很少。据我了解Microsoft、Nokia、Google等,还有国内的Baidu是有比较专业的UE团队。对于我们这样的普通团队、普通开发者来说,这样的经验实在太少了。而且普遍更认为UE是UI Designer的事情,与我们这样的Developer没有太多关系。当然不是,UE远超过UI。很多因素造成了UE差,比如一份不正确的数据表明17%的用户认为手机运行速度慢,Windows Mobile手机开机漫长的等待就十分的让
2、我受不了。我们开发的应用是否有过优化?运行效率是否已经很让用户满意了?等等这些问题留在开发中思考吧。在使用优秀的产品时用心体会、用心观察、用心思考,在此基础上创新。逐渐提高UE设计能力。(等Windows 7正式发布了,我们可以讨论讨论其UE)这篇文章仅仅讨论有关界面开发上Developer涉及到的技术问题,在学习过程中,随着越深越广越觉得自身水平的不足,所以只敢抛砖引玉,更多希望能够引起大家对界面开发技术、对UE的讨论。上篇文章已经列出目录:1.相关商用产品一览 2.Windows系统下图形编程的相关基础知识 3.DirectDraw简介 4.DirectDraw驱动开发 5.DirectD
3、raw应用开发 6.一个推荐的入门Sample 第1部分已经在上篇文章讲过,鉴于篇幅的原因2、3、4、5、6部分将在下篇文章介绍。这篇文章先介绍下如何使用Win32下的GDI等接口实现绚丽、高效率的界面。这样我们就能发现GDI等接口的不足,进而引申到DirectDraw上面。(这篇文章默认你有一定的Windows编程基础,熟悉GDI等概念。)补充内容如何使用Win32下的GDI等接口实现绚丽、高效的界面 1.如何让界面绚丽?怎么样的算绚丽?有很漂亮的图片?有Alpha透明?有Animation?每个人的审美观点都不同,所以如果你的界面很多人认为绚丽那就可以了。设计界面主要是Designer的工
4、作,包括UI逻辑的设计,色彩搭配设计等,我认为这也可以进一步分工:熟悉用户习惯的Designer、美学Designer等。但是一般情况下这些让程序员给代劳了。下面介绍Windows提供给开发人员的相关接口,利用这些接口设计你认为绚丽的界面。2.如何透明?如何半透明?如何颜色渐变?以下是我使用Imaging COM组件封装的一个函数,可以使用其绘制PNG图片,当然也可以绘制其它图片。绘制带Alpha通道的PNG图片即实现了透明。#include#include#include#pragma comment(lib,Imaging.lib)BOOL DrawPNG(HDC hDC,TCHAR*sz
5、PicString,RECT&rcDraw)BOOL br=FALSE;IImagingFactory*pImgFactory=NULL;IImage*pImage=NULL;ImageInfo sImgInfo;CoInitializeEx(NULL,COINIT_MULTITHREADED);/Create the imaging factory.if(SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory,NULL,CLSCTX_INPROC_SERVER,IID_IImagingFactory,(void*)&pImgFactory)/Load
6、the image from the JPG/PNG file.if(SUCCEEDED(pImgFactory-CreateImageFromFile(szPicString,&pImage)/Draw the image.pImage-Draw(hDC,&rcDraw,NULL);pImage-Release();pImage=NULL;br=TRUE;pImgFactory-Release();CoUninitialize();return br;-而封装的这个函数实现了将一个DC根据Alpha值半透明绘制到另一个DC上,使用GDI函数AlphaBlend实现。BOOLAlphaBlt(
7、HDC hdcDest,int nXOriginDest,int nYOriginDest,int nWidthDest,int nHeightDest,HDC hdcSrc,int nXOriginSrc,int nYoriginSrc,int nWidthSrc,int nHeightSrc,BYTE alpha)BLENDFUNCTION bf;bf.BlendOp=AC_SRC_OVER;bf.BlendFlags=0;bf.SourceConstantAlpha=alpha;bf.AlphaFormat=0;return AlphaBlend(hdcDest,nXOriginDest
8、,nYOriginDest,nWidthDest,nHeightDest,hdcSrc,nXOriginSrc,nYoriginSrc,nWidthSrc,nHeightSrc,bf);如果你的设备支持AlphaBlend硬件加速那将是非常棒的事情,否则软件方式会有点影响性能。-颜色渐变也是直接有API可以支持:BOOL GradientFill(HDC hdc,PTRIVERTEX pVertex,ULONG nVertex,PVOID pMesh,ULONG nCount,ULONG ulMode);hdc in Handle to the destination device conte
9、xt.pVertex in Pointer to an array of TRIVERTEX structures,each of which defines a triangle vertex.nVertex in The number of vertices in pVertex.pMesh in Array of GRADIENT_RECT structures in rectangle mode.nCount in The number of rectangles in pMesh.ulMode in Specifies gradient fill mode.The following
10、 table shows the possible values for ulMode.Thisfunction fills rectangular regions with a background color that is interpolated from color valuesspecified at the vertices.不管你使用.Net CF平台调用这些API,还是Win32/MFC/ATL/WTL直接调用这些API,你都是可以实现这些效果的。更多内容请查询开发文档,毕竟那才是最好的参考资料。3.如何实现动画?动画的原理就是一帧一帧的画面按照时间轴向后移动,在骗过眼睛之后
11、就成了动画,所以你得到动画最简单的方法就是按照一定间隔将不同图片一张一张绘制到屏幕上,虽然很简单,但是在编程中经常使用这种方法。有时简单的往往是最好的。这里还有个技巧,比如将每张图片使用Photoshop中的运动滤镜模糊下,这样使用上面方法得到的动画会有种非常快速的感觉。也可以用类似的方法来用2D表现三维的事物,得到3D动画的效果。还可以使用GIF动画的方式,比如在开机和关机时。以下封装的函数仅供参考,我没用心整理。BOOLDisplayGIF(TCHAR*szPicString)HANDLE hFile=CreateFile(strFileName,GENERIC_READ,0,NULL,O
12、PEN_EXISTING,0,NULL);if(hFile=INVALID_HANDLE_VALUE)return FALSE;DWORD dwFileSize=GetFileSize(hFile,NULL);if(DWORD)-1=dwFileSize)CloseHandle(hFile);return FALSE;HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);if(hGlobal=NULL)CloseHandle(hFile);return FALSE;LPVOID pvData=GlobalLock(hGlobal);if(p
13、vData=NULL)GlobalUnlock(hGlobal);CloseHandle(hFile);return FALSE;DWORD dwBytesRead=0;BOOL bRead=ReadFile(hFile,pvData,dwFileSize,&dwBytesRead,NULL);GlobalUnlock(hGlobal);CloseHandle(hFile);if(!bRead)return FALSE;IStream*pStream=NULL;if(FAILED(CreateStreamOnHGlobal(hGlobal,TRUE,&pStream)return FALSE;
14、if(NULL=pStream)return FALSE;IImage*pImage=NULL;RECT rc;IImagingFactory*pImgFactory=NULL;CoInitializeEx(NULL,COINIT_MULTITHREADED);if(!SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory,NULL,CLSCTX_INPROC_SERVER,IID_IImagingFactory,(void*)&pImgFactory)return FALSE;IImageDecoder*pDecoder=NULL;UINT nCoun
15、t=0;if(!SUCCEEDED(pImgFactory-CreateImageDecoder(pStream,DecoderInitFlagNone,&pDecoder)return FALSE;pDecoder-GetFrameDimensionsCount(&nCount);GUID*pDimensionIDs=(GUID*)new GUIDnCount;pDecoder-GetFrameDimensionsList(pDimensionIDs,nCount);TCHAR strGuid39;StringFromGUID2(pDimensionIDs0,strGuid,39);UINT
16、 frameCount=0;pDecoder-GetFrameCount(&pDimensionIDs0,&frameCount);UINT iSize=0;pDecoder-GetPropertyItemSize(PropertyTagFrameDelay,&iSize);BYTE*pBuff=new BYTEiSize;PropertyItem*pItem=(PropertyItem*)pBuff;pDecoder-GetPropertyItem(PropertyTagFrameDelay,iSize,pItem);int fCount=0;ImageInfo Info;pImgFacto
17、ry-CreateImageFromStream(pStream,&pImage);pImage-GetImageInfo(&Info);rc.left=rc.top=0;rc.right=Info.Width;rc.bottom=Info.Height;HDC tempDC;HBITMAP hbmNew=NULL;void*pv;BITMAPINFO bmi=0;HBITMAP hbmOld=NULL;tempDC=CreateCompatibleDC(NULL);bmi.bmiHeader.biSize =sizeof(BITMAPINFOHEADER);bmi.bmiHeader.biW
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- windows7界面如何开发绚丽、高效率的界 面Windows嵌入式系统 windows7 界面 如何 开发 绚丽 高效率 Windows 嵌入式 系统

限制150内