您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第十三章 应用程序外观设计
联系方式:北京源智天下科技有限公司第十三讲:应用程序外观设计杨章伟e-mail:yang505412@163.com1-2北京源智天下科技有限公司联系方式:课程内容安排•修改Windows应用程序外观•制作动画图标•设置图片背景•综合练习•思考和习题1-3北京源智天下科技有限公司联系方式:修改应用程序外观样式•可以通过不同的方法来修改应用程序的背景、标题、光标、图标以及框架是否具有最大、最小对话框等信息。由于视图类覆盖在框架窗口上,因此通常在MainFrame中修改图标、标题及是否具有最大、最小框的属性;而背景及光标等信息就需要在View类中修改。1-4北京源智天下科技有限公司联系方式:应用程序中的序列化是通过CArchive类来实现的。CArchive类总是与一个CFile对象相关联,CArchive类是作为CFile对象的输入输出流而设计的,如图12-2所示,其使用经过重载的C++流入()和流出()操作符,从存储应用程序数据的文件中实现读取和写入数据,而将这些数据保存到磁盘文件中的工作由CArchive对象指示CFile对象来完成。1-5北京源智天下科技有限公司联系方式:在框架类中修改程序外观•在框架类中修改程序外观,主要是在MainFrame中修改图标、标题及是否具有最大、最小框的属性等实现。事实上,框架类中包含了许多定义应用程序框架的成员函数,新建一个工程后打开工作区的框架类,可看到如图13-1所示的成员函数。1-6北京源智天下科技有限公司联系方式:例如,去掉应用程序窗口最大化按钮,添加用户自定义标题。BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs){if(!CFrameWnd::PreCreateWindow(cs))returnFALSE;//TODO:ModifytheWindowclassorstylesherebymodifying//theCREATESTRUCTcscs.style&=~WS_MAXIMIZEBOX;//去掉窗口的最大化按钮cs.style&=~FWS_ADDTOTITLE;//允许添加自己的标题cs.lpszName=21天学会VisualC++;//标题returnTRUE;}1-7北京源智天下科技有限公司联系方式:北京源智天下科技有限公司联系方式:函数修改应用程序外观样式•BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs)•{•if(!CFrameWnd::PreCreateWindow(cs))•returnFALSE;•//TODO:ModifytheWindowclassorstylesherebymodifying•//theCREATESTRUCTcs•WNDCLASSwndclass;//定义对象•::GetClassInfo(AfxGetInstanceHandle(),cs.lpszClass,&wndclass);//获取信息•wndclass.hIcon=::LoadIcon(::AfxGetInstanceHandle(),//加载图标•MAKEINTRESOURCE(IDR_MYTYPE));•wndclass.lpszClassName=hello;•::RegisterClass(&wndclass);//注册类•cs.lpszClass=hello;•returnTRUE;•}1-9北京源智天下科技有限公司联系方式:北京源智天下科技有限公司联系方式:中修改利用SetWindowLong函数实现去掉窗口的最大化按钮。intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){……SetWindowLong(m_hWnd,GWL_STYLE,::GetWindowLong(m_hWnd,GWL_STYLE)&~WS_MAXIMIZEBOX);return0;}1-11北京源智天下科技有限公司联系方式:北京源智天下科技有限公司联系方式:类是显示应用程序框架的主体部分,在视图类中修程序外观可通过成员函数PreCreateWindow、AfxRegisterWndClass函数和OnCreate函数实现。1-13北京源智天下科技有限公司联系方式:•修改应用程序背景及光标样式。在CMyView::PreCreateWindow中利用AfxRegisterWndClass函数可以修改应用程序的背景和光标样式。•BOOLCMyView::PreCreateWindow(CREATESTRUCT&cs)•{•//TODO:ModifytheWindowclassorstylesherebymodifying•//theCREATESTRUCTcs•cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,•LoadCursor(NULL,IDC_CROSS),(HBRUSH)GetStockObject(BLACK_BRUSH),0);•returnCView::PreCreateWindow(cs);•}1-14北京源智天下科技有限公司联系方式:北京源智天下科技有限公司联系方式:除了能够修改应用程序的外观样式,还能够制作动画图标。该实例将使应用程序框架上的图标不断的变化,当然,用到的图标是事先复制到文件夹,存储图标的文件夹为工程名\res文件夹。读者在该工程的资源面板中只要导入这些图标就可以了,不需要自己再动手画一些图标了。1-16北京源智天下科技有限公司联系方式:代码清单•intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct)•{……•m_hIcon[0]=AfxGetApp()-LoadIcon(IDI_ICON1);//加载图标资源•m_hIcon[1]=AfxGetApp()-LoadIcon(IDI_ICON2);•m_hIcon[2]=AfxGetApp()-LoadIcon(IDI_ICON3);•m_hIcon[3]=LoadIcon(AfxGetApp()-m_hInstance,MAKEINTRESOURCE(IDI_ICON4));•m_hIcon[4]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON5));•SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcon[0]);//改变框架的图标•SetTimer(1,500,NULL);//设立计时器•return0;•}•voidCMainFrame::OnTimer(UINTnIDEvent)•{•//TODO:Addyourmessagehandlercodehereand/orcalldefault•staticintiIndex=0;•iIndex=++iIndex%5;//设置变换时间•SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcon[iIndex]);•CFrameWnd::OnTimer(nIDEvent);//执行事件•CFrameWnd::OnTimer(nIDEvent);•}1-17北京源智天下科技有限公司联系方式:设置图片背景本节将介绍如何将一幅位图(.bmp文件)作为窗口显示的背景。一般来说,将一幅位图选做窗口背景都经过以下几个步骤:(1)创建一个兼容设备描述表。(2)创建及装入位图资源。(3)将位图选入兼容设备描述表。(4)将兼容设备描述表上的内容复制到当前设备描述表上。1-18北京源智天下科技有限公司联系方式:(CDC*pDC){CMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahereCDCdcCompatible;//产生一个兼容DCdcCompatible.CreateCompatibleDC(pDC);//创建及装入位图资源CBitmapbmp;bmp.LoadBitmap(IDB_BITMAP1);dcCompatible.SelectObject(&bmp);//将位图选入兼容DCCRectrect;//将兼容DC上的内容拷入当前DC上GetClientRect(&rect);pDC-BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);}1-19北京源智天下科技有限公司联系方式:北京源智天下科技有限公司联系方式:综合练习•设计一个应用程序界面,要求该界面使用用户自定义的图标,去掉最大化按钮,并设置程序标题为“应用程序外观设计”,其背景为蓝色,如图13-18所示。1-21北京源智天下科技有限公司联系方式:思考和习题•为什么要修改应用程序的外观?•VisualC++的应用程序中,常用的对应用程序外观的修改主要有哪些?其分别采用什么方法进行修改?•在将位图作为应用程序背景时,采用BitBlt函数和StretchBlt函数将位图取入设备描述表中,其之间有什么不同?•制作一个包含两个图标的动画图标,要求这两个图标每过1秒钟变化一次。
本文标题:第十三章 应用程序外观设计
链接地址:https://www.777doc.com/doc-4048176 .html