2016-05-20
原文:Visual C++ 2010新增了重新启动管理器功能。重新启动管理器是Visual Studio for Windows Vista的一项新增功能,增加了在应用程序意外关闭或重新启动的情况下对应用程序的支持。重新启动管理器的行为与应用程序的类型有关,如果是文档编辑器之类的应用程序,重新启动管理器让应用程序器能够自动保存已经打开的文档的状态和内容,在程序异常的时候,能够保存运行时的数据,自动恢复到未发生异常时的情况,从而提高了程序的稳健性与可靠性。如果应用程序不是文档编辑器,则重新启动管理器将重新启动应用程序,但默认情况下无法保存应用程序的状态。重新启动后,根据不同的应用程序,有任务对话框、Windows消息框等消息提示框,供用户选择
2016-05-20
原文:是否还原到自动保存前的状态,如果用户选择不还原,重新启动管理器将丢弃临时保存的文件。向现有应用程序中添加对重新启动管理器支持的具体步骤是:1)在Visual Studio 2010中打开一个现有WinFormDemo应用程序。2)打开主应用程序的源文件。默认情况下,此文件是与应用程序同名的.cpp文件。例如,WinFormDemo的主应用程序源文件是WinFormDemo.cpp。3)查找主应用程序的构造函数。例如,如果项目为MyProject,则构造函数为:
2016-05-20
原文:除了使用Assert:AreEqual断言函数对结果进行判断之外,Visual C++ 2010还提供了多种断言函数,以满足对不同类型的返回结果进行判断的需要。更人性化的是,我们还可以在断言函数中添加对测试结果的说明,这样我们可更容易以测试的结果来驱动开发。例如://判断不相等Assert:AreNotEqual(0,(DWORD_PTR)pClass,"pClass指针不应该为空指针");//判断相等Assert:AreEqual(0,(DWORD_PTR)pClass,"pClass指针应该为空指针");//判断比较结果是否为trueAssert:IsTrue(pClass==nullptr,"pClass指针应该为空指针");//判断StringValue()返回的字符串
2016-05-24
原文:一个函数可以是多个类的友元函数,只需要在各个类中分别声明。友元函数的调用与一般函数的调用方式和原理一致。2. 友元类友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一个类的友元类。定义友元类的语句格式如下:friend class 类名;
2016-05-30
原文:二是调用成员函数CreateCompatibleBitmap生成空位图,运行程序时再绘制所要的图形。如下:CBitmap m_Bitmap;CClient DC dc(this);m_Bitmap.CreateCompatibleBitmap(&dc,32,32);
2016-05-30
原文:函数CreateCompatibleBitmap的&dc参数是设备环境对象的地址,生成的位图将与这个对象相联系的设备兼容,后两个参数分别是位图的宽度和高度,单位是像素。调用CreateCompatibleBitmap时,Windows保留一块内存给位图。这个位图中存放的像素值最初是未定的,必须用绘图函数生成所要的图形。但在位图内画图前,要生成与位图相联系的设备环境对象,这就是内存设备环境对象。为了生成内存设备环境对象,先要声明CDC类的实例,再调用CDC的成员函数CreateCompatibleDC,例如:CClient
DC dc(this);CDC MemDC;m_Bitmap.CreateCompatibleBitmap(&dc,32,32);MemDC.CreateCompatibleDC(&dc);
2016-05-30
原文:default:ASSERT(FALSE);}//用null数据指针调用GetDIBits得到压缩DIB的大小if(!:GetDIBits(pDC->GetSafeHdc(),hBitmap,0,(UINT)lpBMIH->biHeight,NULL,(LPBITMAPINFO)lpBMIH,DIB_RGB_COLORS)){AfxMessageBox(_T("Unable to compress this DIB"));//可能是使用颜色表的问题:DeleteObject(hBitmap);delete[]lpBMIH;:SelectPalette(hdc,hOldPalette,FALSE);return
FALSE;}if(lpBMIH->biSizeImage==0){AfxMessageBox(_T("Driver can‘t do compression"));:DeleteObject(hBitmap);delete[]lpBMIH;:SelectPalette(hdc,hOldPalette,FALSE);return FALSE;}else{m_dwSizeImage=lpBMIH->biSizeImage;
2016-05-30
原文:}else{m_nColorTableEntries=m_lpBMIH->biClrUsed;}ASSERT((m_nColorTableEntries>=0)&&(m_nColorTableEntries<=256));}void CDib:ComputeMetrics(){if(m_lpBMIH->biSize!=sizeof(BITMAPINFOHEADER)){TRACE("Not a valid Windows bitmap--probably an OS/2 bitmap\n");//抛出一个新的CException例外}m_dwSizeImage=m_lpBMIH->biSizeImage;if(m_dwSizeImage==0){DWORD
dwBytes=((DWORD)m_lpBMIH->biWidth *m_lpBMIH->biBitCount)/32;if(((DWORD)m_lpBMIH->biWidth *m_lpBMIH->biBitCount)%32){dwBytes++;}dwBytes*=4;m_dwSizeImage=dwBytes *m_lpBMIH->biHeight;//no compression}