为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

可视化编程课件_03

2012-01-03 50页 ppt 2MB 21阅读

用户头像

is_510653

暂无简介

举报
可视化编程课件_03null第3章 边框窗口、文档与视图第3章 边框窗口、文档与视图边框窗口 文档与视图 弹出菜单与快捷菜单 滚动与缩放显示 窗口分割 多文档窗口处理 边框窗口(1)边框窗口(1)单文档界面(SDI)程序 CFrameWnd 多文档界面(MDI)程序 CMDIFrameWnd与CMDIChildWnd 对话框(Dialog)程序 CDialog边框窗口(2)边框窗口(2)主边框窗口=文档边框窗口边框窗口(3)边框窗口(3)主边框窗口->子边框窗口->文档边框窗口边框窗口(4)边框窗口(4)主边框窗口与文档边框窗口 边框窗口的创建和...
可视化编程课件_03
null第3章 边框窗口、文档与视图第3章 边框窗口、文档与视图边框窗口 文档与视图 弹出菜单与快捷菜单 滚动与缩放显示 窗口分割 多文档窗口处理 边框窗口(1)边框窗口(1)单文档界面(SDI)程序 CFrameWnd 多文档界面(MDI)程序 CMDIFrameWnd与CMDIChildWnd 对话框(Dialog)程序 CDialog边框窗口(2)边框窗口(2)主边框窗口=文档边框窗口边框窗口(3)边框窗口(3)主边框窗口->子边框窗口->文档边框窗口边框窗口(4)边框窗口(4)主边框窗口与文档边框窗口 边框窗口的创建和销毁 管理当前视图 管理选单、控件栏和加速键 定制边框窗口边框窗口(5)边框窗口(5)主边框窗口的例子 WS_VISIBLE、GetParent()、BS_RADIOBUTTON 在CMainFrame类定义中 在CMainFrame::OnCreate()中m_Button.Create("new button",WS_CHILD| BS_DEFPUSHBUTTON,CRect(0,0,100,50),this,123); m_Button.ShowWindow(SW_SHOWNORMAL);例3-1CButton m_Button;边框窗口(6)边框窗口(6)主边框窗口的例子边框窗口(7)边框窗口(7)定制边框窗口的例子 高度、宽度、初始位置、样式 在CMainFrame::PreCreateWindow()中cs.cx=400; cs.cy=400; cs.x=0; cs.y=0; cs.style &= ~WS_MAXIMIZEBOX;边框窗口(8)边框窗口(8)typedef struct tagCREATESTRUCT //边框窗口类 { LPVOID lpCreateParams; HINSTANCE hInstance; HMENU hMenu; HWND hwndParent; int cy,cx; //窗口高度与宽度 int y,x; //窗口左上角坐标 LONG style; //窗口样式 LPCTSTR lpszName; LPCTSTR lpszClass; DWORD dwExStyle; }CREATESTRUCT;文档与视图(1)文档与视图(1)文档/视图是MFC中最常用的类 文档类负责数据管理,包括数据的读取、存储和修改 视图类负责与用户交互,将文档类数据以某种方式显示文档与视图(2)文档与视图(2)文档类的基类是CDocument 视图类的基类是CView文档与视图(3)文档与视图(3)文档对象管理来自数据源的数据,例如磁盘、串行口、网卡等 串行化(Serialize) 从对象写入字节流,或从字节流读到对象文档与视图(4)文档与视图(4)视图为用户提供文档的显示,将部分或全部文档显示在窗口 每个文档都有一个或多个视图,视图可以输出到窗口或打印机文档与视图(5)文档与视图(5)CWinApp维护框架窗口、文档与视图关系文档与视图(6)文档与视图(6)CView通过GetDocument()获得CDocument对象指针,通过该指针访问CDocument数据 CDocument通过UpdateAllViews()以消息形式视图数据变化,需要重新显示 CDocument可以获得CView对象指针,直接访问视图类成员变量,或调用视图类成员单文档窗口实例(1)单文档窗口实例(1)在CTestDoc类定义中 在CTestDoc构造函数中 在CTestView::OnDraw()中public: CString m_str;m_str="SDI Test Sample!";CRect rect; GetClientRect(&rect); CSize size=rect.Size(); CSize sizeText=pDC->GetTextExtent(pDoc->m_str); pDC->TextOut((size.cx-sizeText.cx)/2,(size.cy-sizeText.cy)/2,pDoc->m_str);单文档窗口实例(2)单文档窗口实例(2)在CTestDoc::Serialize()中 在工具栏中添加按钮,清空客户区显示if(ar.IsStoring()) //写操作 ar<>m_str;m_str=""; UpdateAllViews(NULL);单文档窗口实例(3)单文档窗口实例(3)单文档窗口实例(4)单文档窗口实例(4)CSingleDocTemplate* pDocTemplate; //创建对象 pDocTemplate=new CSingleDocTemplate (IDR_MAINFRAME, RUNTIME_CLASS(CSDITestDoc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CSDITestView)); AddDocTemplate(pDocTemplate); //加载模板对象 CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); if(!ProcessShellCommand(cmdInfo)) //启动程序 return FALSE; m_pMainWnd->ShowWindow(SW_SHOW); //显示窗口 m_pMainWnd->UpdateWindow(); //更新窗口单文档窗口实例-2(1)单文档窗口实例-2(1)在CTestDoc类定义中 增加成员访问函数例3-2private: CPoint m_point; CString m_string;public: void Set(CPoint point,CString string); void Get(CPoint &point,CString &string);单文档窗口实例-2(2)单文档窗口实例-2(2)在CTestDoc构造函数中 实现两个成员函数void CTestDoc::Set(CPoint point,CString string) { m_point=point; m_string=string; } void CTestDoc::Get(CPoint &point,CString &string) { point=m_point; string=m_string; }m_point=CPoint(0,0); m_string.Empty();单文档窗口实例-2(3)单文档窗口实例-2(3)在CTestView::OnLButtonDown()中CTestDoc* pDoc=GetDocument(); ASSERT_VALID(pDoc); CString str; str.Format("(%d,%d)单击鼠标左键", point.x,point.y); pDoc->Set(point,str); InvalidateRect(NULL); 单文档窗口实例-2(4)单文档窗口实例-2(4)在CTestView::OnDraw()中 在CTestDoc::Serialize()中CPoint pt; CString str; pDoc->Get(pt,str); pDC->TextOut(pt.x,pt.y,str);if(ar.IsStoring() ar<>m_point>>m_str; 单文档窗口实例-2(5)单文档窗口实例-2(5)单文档窗口实例-2(6)单文档窗口实例-2(6)单文档窗口实例-2(7)单文档窗口实例-2(7)菜单操作(1)菜单操作(1)GetMenu() - 获得菜单 GetSubMenu() - 获得子菜单 GetSystemMetrics() - 获得菜单长宽 CheckMenuItem() - 标记菜单 SetDefaultItem() - 默认菜单 EnableMenuItem() - 有效化菜单 SetMenuItemBitmaps() - 设置位图菜单 SetMenu() - 设置菜单(移除或加载)菜单操作(2)菜单操作(2)设置标记与默认菜单 在CMainFrame::OnCreate()中GetMenu()->GetSubMenu(0)->CheckMenuItem (0,MF_BYPOSITION|MF_CHECKED); GetMenu()->GetSubMenu(0)->CheckMenuItem (ID_FILE_OPEN,MF_BYCOMMAND|MF_CHECKED); GetMenu()->GetSubMenu(0)->SetDefaultItem(2,true); GetMenu()->GetSubMenu(0)->SetDefaultItem (ID_FILE_SAVE_AS); GetMenu()->GetSubMenu(0)->SetDefaultItem(4,true);例3-3菜单操作(3)菜单操作(3)菜单操作(4)菜单操作(4)设置位图菜单 在CMainFrame::OnCreate()中m_bitmap.LoadBitmap(IDB_BITMAP1); GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps (5,MF_BYPOSITION,&m_bitmap,&m_bitmap); CString str; str.Format("x=%d,y=%d",GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK)); MessageBox(str);例3-4菜单操作(5)菜单操作(5)菜单操作(6)菜单操作(6)禁用菜单项 在CMainFrame构造函数中 在CMainFrame::OnCreate()中GetMenu()->GetSubMenu(0)->EnableMenuItem (5,MF_BYPOSITION|MF_DISABLED); GetMenu()->GetSubMenu(0)->EnableMenuItem (5,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);例3-5m_bAutoMenuEnable=false;菜单操作(7)菜单操作(7)菜单操作(8)菜单操作(8)移除与加载菜单 在CMainFrame::OnCreate()中//移除菜单 SetMenu(NULL); //加载菜单 CMenu menu; menu.LoadMenu(IDR_MAINFRAME); SetMenu(&menu);菜单操作(9)菜单操作(9)浮动菜单(1)浮动菜单(1)用户单击鼠标右键时,弹出浮动菜单(弹出菜单、快捷菜单) 浮动菜单创建方式 隐式菜单 非隐式菜单 弹出菜单消息WM_CONTEXTMENU 消息中的坐标是屏幕坐标浮动菜单(2)浮动菜单(2)创建菜单IDR_MYPOPUPMENU 在CTestView::OnContextMenu()中一级菜单:PopMenu 二级菜单:Line(菜单项ID: ID_LINE) Circle(菜单项ID: ID_CIRCLE)CMenu PopMenu; PopMenu.LoadMenu(IDR_POPMENU); CMenu *pPopMenu=PopMenu.GetSubMenu(0); pPopMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x,point.y,this); 浮动菜单(3)浮动菜单(3)在CTestView::OnLine()中 在CTestView::OnCircle()中 CDC *pDC=GetDC(); pDC->MoveTo(100,100); pDC->LineTo(200,200); ReleaseDC(pDC);CDC *pDC=GetDC(); pDC->Ellipse(100,100,200,200); ReleaseDC(pDC);浮动菜单(4)浮动菜单(4)浮动菜单(5)浮动菜单(5)非隐式浮动菜单(鼠标右键消息)CMenu PopMenu; PopMenu.CreatePopupMenu(); PopMenu.AppendMenu(MF_DISABLED,ID_LINE,"Line"); PopMenu.AppendMenu(MF_ENABLED,ID_CIRCLE, "Circle"); CPoint pos; GetCursorPos(&pos); PopMenu.TrackPopupMenu(TPM_RIGHTALIGN,pos.x, pos.y,this);派生视图类(1)派生视图类(1)MFC提供的视图派生类 CScrollView:视图滚动和缩放显示 CFormView:控件组成的单视图 CRecordView和CDaoRecordView:数据库字段的表单视图派生视图类(2)派生视图类(2)CCtrlView是带列表框、树状控件的视图类 CScrollView是带滚动条的视图类编辑视图(1)编辑视图(1)CTestView的基类设为CEditView 在菜单中增加菜单项,或工具栏中增加按钮 在菜单消息处理函数中CDC* pDC=GetDC(); CString str; GetWindowText(str); pDC->TextOut(50,50,str);编辑视图(2)编辑视图(2)在菜单消息处理函数中CString str1,str2; GetWindowText(str1); str2.Empty(); for(int i=str1.GetLength()-1;i>=0;i--) { if(str1.GetAt(i)==0x0a) { str2+='\0'; i--; } else str2+=str1.GetAt(i); } str1.Empty(); str1+="字符串反转后的结果:"+str2; SetWindowText(str1);编辑视图(3)编辑视图(3)滚动显示(1)滚动显示(1)滚动显示可浏览比视图窗口大的文档,需要从CScrollView类派生 在创建滚动视图时,需要重载CView成员函数OnInitialUpdate(),调用SetScrollSizes()计算视图大小 OnInitialUpdate()是虚函数,用户选择File →New或Open后调用,初始化视图对象,调用OnUpdate()函数滚动显示(2)滚动显示(2)CTestView的基类设为CScrollView 在CTestView::OnDraw()中CRect rect; GetClientRect(&rect); CString str; str.Format("View Size(%d,%d,%d,%d)", rect.left,rect.top,rect.right,rect.bottom); pDC->TextOut(10,10,str);滚动显示(4)滚动显示(4)在CTestView::OnInitialUpdate()中CSize sizeTotal; sizeTotal.cx=300; sizeTotal.cy=300; SetScrollSizes(MM_TEXT,sizeTotal);滚动显示(5)滚动显示(5)缩放显示(1)缩放显示(1)视图自动适应边框窗口大小 在缩放显示时,视图没有滚动条 重载OnInitialUpdate()函数 调用SetScaleToFitSize()函数缩放显示(2)缩放显示(2)在CTestView::OnDraw()中 在CTestView::OnInitialUpdate()中 缩放 显示x=实际x*ViewWidth/sizeTotal.cx 显示y=实际y*ViewLength/sizeTotal.cypDC->Rectangle(100,100,200,200);sizeTotal.cx=sizeTotal.cy=300; SetScaleToFitSize(sizeTotal);缩放显示(3)缩放显示(3)分割窗口(1)分割窗口(1)窗口可以分割成多个面板,每个面板是同一文档的独立视图 动态分割 面板使用同一视图类,用CSplitterWnd的Create()函数 静态分割 面板使用不同视图类,用CSplitterWnd的CreateStatic()函数分割窗口(2)分割窗口(2)在主边框窗口类定义中 重载主边框窗口的OnCreateClient()CSplitterWnd m_splitter;return m_splitter.Create(this,2,2, CSize(20,20),pContext);分割窗口(3)分割窗口(3)多文档窗口实例(1)多文档窗口实例(1)CMDITestView的基类设为CEditView 定义扩展名“myt”多文档窗口实例(2)多文档窗口实例(2)在ClassWizard中定义新类 CMDITestDoc2的基类为CDocument CMDITestView2基类为CScrollView 在Resource.h中添加资源ID #define IDR_MDITESTYPE2 135 在MDITest.rc中添加资源模板串 IDR_MDITESTYPE2 "\nMDITes2\nMDITes2\ nMDITes2 文件 (*.tst)\n.tst \nMDITest2.Document\nMDITes2 Document"多文档窗口实例(3)多文档窗口实例(3)添加菜单IDR_MDITESTYPE2 在InitInstance()中加载文档模板#include "MDITestDoc2.h" #include "MDITestView2.h“ …… CMultiDocTemplate* pDocTemplate2; pDocTemplate2 = new CMultiDocTemplate( IDR_MDITESTYPE2, RUNTIME_CLASS(CMDITestDoc2), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CMDITestView2)); AddDocTemplate(pDocTemplate2);多文档窗口实例(4)多文档窗口实例(4)在OnDraw()中显示文本#include "MDITestDoc2.h" …… CMDITestDoc2 *pDoc=(CMDITestDoc2 *)GetDocument(); CRect rect; GetClientRect(rect); CSize size=rect.Size(); CSize sizeText=pDC->GetTextExtent(pDoc->m_str); pDC->TextOut((size.cx-sizeText.cx)/2,(size.cy-sizeText.cy)/2,pDoc->m_str);多文档窗口实例(5)多文档窗口实例(5)第3次作业第3次作业设计单文档窗口程序,用户通过菜单打开一个对话框,在其中的编辑框控件中输入文本,并单击“确定”按钮,在客户区输出相应文本 设计单文档窗口程序,带有(Line、Ellipse、Rectangle)浮动选单,用户选择菜单中某项时,在客户区输出相应图形,并将图形类型与坐标保存到文档中 谢谢大家谢谢大家
/
本文档为【可视化编程课件_03】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索