可视化编程课件_03

上传人:101****457 文档编号:53775165 上传时间:2018-09-05 格式:PPT 页数:49 大小:977KB
返回 下载 相关 举报
可视化编程课件_03_第1页
第1页 / 共49页
可视化编程课件_03_第2页
第2页 / 共49页
可视化编程课件_03_第3页
第3页 / 共49页
可视化编程课件_03_第4页
第4页 / 共49页
可视化编程课件_03_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《可视化编程课件_03》由会员分享,可在线阅读,更多相关《可视化编程课件_03(49页珍藏版)》请在金锄头文库上搜索。

1、1,第3章 边框窗口、文档与视图,边框窗口 文档与视图 主菜单与快捷菜单 滚动与缩放显示 窗口分割 多文档窗口处理,2,边框窗口(1),单文档界面(SDI)程序 CFrameWnd 多文档界面(MDI)程序 CMDIFrameWnd与CMDIChildWnd 对话框(Dialog)程序 CDialog,3,边框窗口(2),主边框窗口视图窗口,4,边框窗口(3),主边框窗口子边框窗口视图窗口,5,边框窗口(4),主边框窗口例子 GetParent()、BS_RADIOBUTTON 在CMainFrame类中 在CMainFrame:OnCreate()中,m_button.Create(L“ne

2、w button“,WS_VISIBLE| BS_DEFPUSHBUTTON,CRect(0,0,100,50),this,0);,例3-1,CButton m_button;,6,边框窗口(5),主边框窗口的例子,7,边框窗口(6),typedef struct tagCREATESTRUCT LPVOID lpCreateParams; HINSTANCE hInstance; HMENU hMenu; HWND hwndParent; int cy,cx; int y,x; LONG style; LPCTSTR lpszName; LPCTSTR lpszClass; DWORD dw

3、ExStyle; CREATESTRUCT;,8,边框窗口(6),定制边框窗口的例子 窗口样式(WS_SYSMENU、WS_MAXIMIZEBOX、WS_MINIMIZEBOX) 在CMainFrame:PreCreateWindow()中,cs.cx=500; cs.cy=400; cs.x=0; cs.y=0; cs.style,9,文档与视图(1),文档/视图是MFC中最常用的类 文档类负责数据管理,包括数据的读取、修改与保存 视图类负责与用户交互,将文档类数据以某种方式显示,10,文档与视图(2),文档类基类CDocument,视图类基类CView,11,文档与视图(3),文档对象管理

4、来自数据源的数据,例如磁盘、串口、网卡等 串行化(Serialize)从对象写入字节流,或从字节流读到对象,12,文档与视图(4),13,文档与视图(6),CView通过GetDocument()获得CDocument对象指针,通过该指针访问CDocument数据 CDocument通过UpdateAllViews()以消息形式通知视图数据变化,需要重新显示 CDocument可获得CView对象指针,直接访问视图类成员变量,或调用视图类成员函数,14,单文档窗口实例1(1),在CTestDoc类定义中 在CTestDoc构造函数中 在CTestView:OnDraw()中,public: C

5、String m_str;,m_str=L“SDI Test Sample!“;,CRect rect; GetClientRect(,例3-2,15,单文档窗口实例1(2),在CTestDoc:Serialize()中 在工具栏中添加按钮,清空客户区显示,if(ar.IsStoring() arm_str;,m_str=“; UpdateAllViews(NULL);,16,单文档窗口实例1(3),17,单文档窗口实例2(1),在CTestDoc类定义中,private: CPoint m_point; CString m_str; public: void Set(CPoint ,例3-3

6、,18,单文档窗口实例2(2),在CTestDoc构造函数中 在CTestDoc:Set()与Get()中,void Set(CPoint ,m_point=CPoint(0,0); m_str.Empty();,19,单文档窗口实例2(3),在CTestView:OnLButtonDown()中,CTestDoc* pDoc=GetDocument(); CString str; str.Format(L“Mouse Click at (%d,%d)“, point.x,point.y); pDoc-Set(point,str); Invalidate(true);,20,单文档窗口实例2(

7、4),在CTestView:OnDraw()中 在CTestDoc:Serialize()中,CPoint point; CString str; pDoc-Get(point,str); pDC-TextOutW(point.x,point.y,str);,if(ar.IsStoring() arm_pointm_str;,21,单文档窗口实例2(5),22,单文档窗口实例2(6),23,单文档窗口实例2(7),24,菜单操作(1),GetMenu():获得菜单 GetSubMenu():获得子菜单 CheckMenuItem():标记菜单 SetDefaultItem():默认菜单 Ena

8、bleMenuItem():有效化菜单 SetMenuItemBitmaps():设置位图菜单 SetMenu():设置菜单,25,菜单操作(2),GetMenu()-GetSubMenu(0)-CheckMenuItem (0,MF_BYPOSITION|MF_CHECKED); GetMenu()-GetSubMenu(0)-CheckMenuItem (ID_FILE_NEW,MF_BYCOMMAND|MF_CHECKED); GetMenu()-GetSubMenu(0)-SetDefaultItem(1,true); GetMenu()-GetSubMenu(0)-SetDefaul

9、tItem (ID_FILE_OPEN);,设置标记与默认菜单 在CMainFrame:OnCreate()中,例3-4,26,菜单操作(3),27,菜单操作(4),设置位图菜单 在CMainFrame:OnCreate()中,m_bitmap.LoadBitmapW(IDB_MYBITMAP); GetMenu()-GetSubMenu(0)-SetMenuItemBitmaps (3,MF_BYPOSITION,28,菜单操作(5),29,菜单操作(6),禁用菜单项 在CMainFrame构造函数中 在CMainFrame:OnCreate()中,GetMenu()-GetSubMenu(

10、0)-EnableMenuItem (2,MF_BYPOSITION|MF_DISABLED); GetMenu()-GetSubMenu(0)-EnableMenuItem (ID_FILE_SAVE_AS,MF_BYCOMMAND|MF_DISABLED);,m_bAutoMenuEnable=false;,30,浮动菜单(1),用户单击鼠标右键时,弹出浮动菜单(弹出菜单、快捷菜单) 浮动菜单创建方式 隐式菜单 非隐式菜单 弹出菜单消息WM_CONTEXTMENU 消息中的坐标是屏幕坐标,31,浮动菜单(2),创建菜单IDR_POPUPMENU 在CTestView:OnContextMe

11、nu()中,一级菜单:Popup 二级菜单:Line(&L) ID_POPUP_LINE Circle(&C) ID_POPUP_CIRCLE,CMenu menu; menu.LoadMenu(IDR_POPUPMENU); CMenu* pMenu=menu.GetSubMenu(0); pMenu-TrackPopupMenu(TPM_LEFTALIGN, point.x,point.y,this);,例3-5,32,浮动菜单(3),在CTestView:OnPopupLine()中 在CTestView:OnPopupCircle()中,CDC* pDC=GetDC(); pDC-Mo

12、veTo(100,100); pDC-LineTo(200,200); ReleaseDC(pDC);,CDC* pDC=GetDC(); pDC-Ellipse(100,100,200,200); ReleaseDC(pDC);,33,浮动菜单(4),34,浮动菜单(5),非隐式浮动菜单(鼠标右键消息),CMenu menu; menu.CreatePopupMenu(); menu.AppendMenu(MF_ENABLED,ID_LINE,L“Line“); menu.AppendMenu(MF_ENABLED,ID_CIRCLE, L“Circle“); CPoint pt; GetC

13、ursorPos(,例3-6,35,派生视图类,MFC提供的视图派生类 CCtrlView:可编辑、列表框和树状控件 CScrollView:视图滚动和缩放显示,36,编辑视图(1),CTestView的基类设为CEditView 在菜单中增加菜单项(ID_TEST),或工具栏中增加按钮 在CTestView:OnTest()中,CDC* pDC=GetDC(); CString str; GetParent()-GetWindowText(str); pDC-TextOutW(0,0,str); ReleaseDC(pDC);,例3-7,37,编辑视图(2),CString str1,str

14、2; GetParent()-GetWindowText(str1); str2.Empty(); for(int i=str1.GetLength()-1;i=0;i-) if(str1.GetAt(i)=0) str2+=0; i-; else str2+=str1.GetAt(i); GetParent()-SetWindowText(str2);,在CTestView:OnTest()中,38,编辑视图(3),39,滚动显示(1),滚动显示可浏览比视图窗口大的文档,需要从CScrollView类派生 在创建滚动视图时,需要重载CView成员函数OnInitialUpdate(),调用S

15、etScrollSizes()计算视图大小 OnInitialUpdate()是虚函数,用户选择File New或Open后调用,初始化视图对象,调用OnUpdate()函数,40,滚动显示(2),CTestView的基类设为CScrollView 在CTestView:OnDraw()中,CRect rect; GetClientRect(,例3-8,41,滚动显示(3),在CTestView:OnInitialUpdate()中,sizeTotal.cx=sizeTotal.cy=300;,42,缩放显示(1),视图自动适应边框窗口大小 在缩放显示时,视图没有滚动条 重载OnInitial

16、Update()函数 调用SetScaleToFitSize()函数 缩放公式 显示x=实际x*ViewWidth/sizeTotal.cx 显示y=实际y*ViewLength/sizeTotal.cy,43,缩放显示(2),在CTestView:OnDraw()中 在CTestView:OnInitialUpdate()中,pDC-Rectangle(100,100,200,200);,SetScaleToFitSize(sizeTotal);,例3-9,44,分割窗口(1),窗口可以分割成多个面板,每个面板是同一文档的独立视图 动态分割:面板使用同一视图类,使用的是CSplitterWnd的Create() 静态分割:面板使用不同视图类,使用的是CSplitterWnd的CreateStatic(),45,分割窗口(2),在CMainFrame类定义中 在CMainFrame:OnCreateClient(),CSplitterWnd m_splitter;,return m_splitter.Create(this,2,2, CSize(20,20),pContext);,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号