博文

Visual C++学习笔记--MFC文件处理机制(2006-07-09 02:17:00)

摘要:1.永久性对象与序列化永久性对象:内存中的对象以文件的形式存入存储介质,而从介质中读入时,该对象又能恢复为原来的状态。序列化:能使对象成为永久性对象的机制。2.Serialize函数Serialize函数是CObject类提供的虚函数,凡是希望具有序列化能力的类,都必须以CObject类或其派生类为基类。由于应用程序的数据一般由文档对象来管理的,每当用户新建,打开或保存文档时,程序就会自动调用文档类对象的Serialize函数。3.对象的序列化对象的序列化的操作过程封装成了一个类CArchive,实际上把类信息表跟类对象打包成文件的工作就是由CArchive类的对象在Serialize函数中完成的。Serialize函数原型:virtual void Serialize(CArchive &ar);当需要存取或读取一个对象时,必须在Serialize函数中进行。例如某类A为永久化类,具体编码过程如下:Class A::CObject{ DECLARE_SERIAL(A);  //声明了序列化 private:  int m_X,m_Y;  ... public:  Serialize(CArchive&ar); //重写序列化虚函数};IMPLEMENT_SERIAL(A,CObject,1);  //实现序列化重写的序列化函数Serialize的实现:A::Serialize(CArchive&Aar){ if(ar.IsStoring())  //存储数据 {  ar<<m_X;  ar<<m_Y; } else    //读取数据 {  ar>>m_X;  ar>>m_Y: }}......

阅读全文(3990) | 评论:0

Visual C++学习笔记--菜单(2006-07-09 02:16:00)

摘要:1.菜单资源的描述文件:文件中的BEGIN和END是菜单的分隔苻,在BEGIN前面书写的是菜单的标题。菜单可嵌套定义。2.菜单的定义: 标志符 MENU 载入特性选项菜单的可选加载特性:DISCARDABLE  当应用程序不再需要时,应用程序可丢弃该菜单FIXEDP   把菜单保存在内存的固定位置LOADONCALL  只在应用程序需要时才加载菜单MOVEABLE  菜单在内存中可移动PRELOAD   立即加载菜单......

阅读全文(2770) | 评论:0

Visual C++学习笔记--资源和资源文件(2006-07-09 02:15:00)

摘要:1.资源文件:描述资源的文件,是一个文本文件,名称一般与工程项目名称相同,扩展名为.rc对于一般资源数据来说,只用资源脚本文件来描述即可。然而对于位图,图标这类复杂的图形数据,需另外的工具制作成单独的文件保存在应用程序的res文件夹中,而在资源脚本文件中只需说明它的位置。2.资源头文件:对不同资源加以区别,必须为资源命名资源标识府,通常这些资源标识苻放在头文件Resource.h中。命名资源标识苻的规则:资源标识苻的前缀如下:IDR_   主菜单,工具栏加速键表和应用程序图标IDD_   对话框IDC_   控键和光标IDS_   字符串IDP_   消息框提示字符串ID_   菜单命令......

阅读全文(2763) | 评论:0

Visual C++学习笔记--鼠标和键盘(2006-07-09 02:15:00)

摘要:1.客户区鼠标消息在文档类添加数据成员,并初始化。添加消息响应函数的方法:在工程管理窗口的Class Views卡中,右击视图类,选择Add Windows Message Handler在选项中选择要添加的消息函数。在消息映射函数中添加代码。2.非客户区鼠标消息WM_NCLBUTTONDBCLK  双击鼠标左键WM_NCLBUTTONDOWN  按下鼠标左键WM_NCLBUTTONUP   释放鼠标左键WM_NCMOUSEMOVE   在客户区移动鼠标WM_NCRBUTTONDBCLK  双击鼠标右键WM_NCRBUTTONDOWN  按下鼠标右键WM_NCRBUTTONUP   释放鼠标右键Windows 并不希望用户使用非客户区鼠标消息,所以Visual C++没有提供使用非客户区鼠标消息的编程工具。如果非要使用非客户区鼠标消息的话,则程序员必须用手工方法在程序中添加非客户区鼠标消息映射宏和对应的消息响应函数。3.鼠标消息的捕获为了当鼠标移出应用程序窗口外时,应用程序也能接收到鼠标消息,而使用捕获鼠标消息的函数:CWnd* SetCapture();捕获鼠标消息并完成所做的工作后,应用程序应及时释放鼠标。以使鼠标可以按系统预定的正常方式发送。否则将使鼠标一些正常的作用失效。(例如,当鼠标单击窗口的关闭按钮时,程序却不能关闭。)释放鼠标的函数:BOOL ReleaseCapture();4.处理键盘消息扫描码:按下某个键时,键盘的接口产生的与该键对应的编码。扫描码与设备有关。虚拟码:为方便程序设计,Windows 对每个按键定义的与设备无关的编码。键盘上的部分虚拟码:VK_ADD    '+'键 VK_BACK    BackSpaceVK_CONTROL   CtrlVK_F1~VK_F12   F1~F12一般按键消息:WM_CHAR    当敲击键盘上的字符键时,产生该消息 WM_KEYDOW......

阅读全文(4837) | 评论:0

Visual C++学习笔记--应用程序界面(2006-07-09 02:14:00)

摘要:1.在函数PreCreateWindow中修改窗口的样式2.可拆分为小窗口的SDI界面3.拆分窗口的同步更新功能:UpdateAllViews4.提高拆分窗口的更新效率的方法: InvalidateRect5.创建带有滚动条的窗口......

阅读全文(2494) | 评论:1

Visual C++学习笔记--滚动条窗口(2006-07-09 02:13:00)

摘要:1.为了方便的创建各种不同形式的程序界面,以CView类派生了具有增强功能的派生类,如下:CEditViewCFormViewCListViewCRecordViewCRichEditViewCscrollViewCTreeView 2.在选择增强类CSrollView类作为应用程序视图类的基类,那么在视图类中含有一个成员函数OnInitialUpdate,该函数是一个虚函数,它只生成视图对象 且与文档结合时,被程序框架调用一次,因此这是初始化滚动条参数的地方。 3.对滚动条初始化函数SetScrollSizesvoid SetScrollSizes( int nMapMode,    //映射模式,一般为MM_TEXT SIZE sizeTotal,    //文档的尺寸 const SIZE& sizePage=sizeDefault, //没滚动一页的尺寸 const SIZE& sizeLine=sizeDefault); //没滚动一行的尺寸例:::OnInitialUpdate(){ CSize sizeTotal(3000,2000); CSize sizePage(50,50); CSize sizeLine(10,10); SetScrollSizes(MM_TEXT,sizeTotal,sizePage,sizeLine);}4.设备坐标与逻辑坐标的转换void DPtoLP(LPPOINT lpPoints,int nCount=1)const;void DPtoLP(LPRECT lpRect)const;void DPtoLP(LPSIZE lpSize)const;和void LPtoDP(LPPOINT lpPoints,int nCount=1)const;void LPtoDP(LPRECT lpRect)const;void LPtoDP(LPSIZE lpSize)const;......

阅读全文(4306) | 评论:0

Visual C++学习笔记--MFC通用类(2006-07-09 02:13:00)

摘要:MFC的通用类1.简单数据类点类CPoint:CPoint(int x,int y);和 CPoint(POINT initPt);矩形类CRect:CRect(int l,int t,int r,int b); 和 CRect(const RECT & srcRect);CRect常用操作:Width,Height,TopLeft,BottomRight,CenterPoint;尺寸类CSize:CSize(int cx,int cy); 和 CSize(SIZE initSize);字符串类CString:CString();和 CString(const unsigned char * psz);CString 类提供的部分方法和运算:Empty(),GetAt(),GetLength(),SetAt();例:CString str1="hello world";    CString str2="University";    CString str3=str1+" "+str2;2.群体数据类头文件afxtempl.h提供了基于模板的和非基于模板的群体数据类;基于模板的群体数据类:CArray,CList,CMap;CArray类对象的语法:CArray<数组元素的数据类型,成员函数的行参的数据类型>对象名;例如:CArray<CPoint,CPoint&>m_p;应用实例见:例5-23.数据在文档/视图结构中的位置文档对象用来存储,管理和维护数据;视图对象用来显示和操作数据;......

阅读全文(2902) | 评论:0

Visual C++学习笔记--图形(2006-07-09 02:10:00)

摘要:图形1.CDC类几种派生的CDC类:CClientDC: 在相应除WM_PAINT消息之外的消息处理函数中,提供窗口客户区的设备描述环境;CMetaFileDC: Windows图元文件的设备描述环境;CPaintDC: OnDraw()函数中使用;CWindowDC:输出字符串:视图类的OnDraw()函数中pDC->TextOut(, , );2.CPen类创建画笔:CPen newPen(style,COLORREF,color);  //颜色为RGB值画笔载入:CPen *oldPen=pDC->SelectObject(&newPen);使用新画笔绘制线条之后,如果要恢复原画笔则:pDC->SelectObject(oldPen);2.1直线的画法:pDC->MoveTo(,); pDC->LineTo(,);3.CBrush类创建画刷:CBrush(COLORREF color) 和 CBrush(int style,COLORREF color)   CBrush newBrush(color);画刷载入:CBrush *oldBrush=pDC->SelectObject(&newBrush);恢复原画刷 :pDC->SelectObject(oldBrush);3.1矩形的画法:CRect rect(30,30,300,300);pDC->Rectangle(&rect); 或者 pDC->Rectangle(30,30,300,300);4.绘图模式:绘图的最终效果通过不同的绘图模式来修饰,设置绘图模式的CDC成员函数为:SetROP2(int DrawMode); 常用的绘图模式见表项:5.文本和CFont类显示文本:BOOL TextOut(int x,int y,CString &str);设置文本颜色:virtual COLORREF SetTextColor(COLORREF color);//color 为RGB值获得当前文本颜色:COLORREF GetTextColor() const;设置文本背景颜色:virtual COLORREF SetBkColor(COLORREF ......

阅读全文(3390) | 评论:0

Visual C++学习笔记--句柄(2006-07-09 02:10:00)

摘要:windows的数据类型-句柄windows应用程序中存在许多诸如窗口,按钮,滚动条等复杂的对象和实例,为了在程序中区分和使用它们,必须对他们进行标识。常用的句柄类型:HWND  窗口句柄 HINSTANCE 当前应用程序实例HCURSOR  光标句柄HFONT  字体句柄HPEN  画笔句柄HBRUSH  画刷句柄HDCHBITMAPHICONHIMENUHFILE windows定义的数据类型的别名DWORD  unsigned longBOOL  intBYTE  unsigned charWORD  unsigned shortUINT  unsigned int......

阅读全文(2976) | 评论:0