[信息与通信]第12章+设计用户界面v2.ppt

上传人:音乐台 文档编号:2001048 上传时间:2019-01-30 格式:PPT 页数:72 大小:1,016KB
返回 下载 相关 举报
[信息与通信]第12章+设计用户界面v2.ppt_第1页
第1页 / 共72页
[信息与通信]第12章+设计用户界面v2.ppt_第2页
第2页 / 共72页
[信息与通信]第12章+设计用户界面v2.ppt_第3页
第3页 / 共72页
亲,该文档总共72页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[信息与通信]第12章+设计用户界面v2.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]第12章+设计用户界面v2.ppt(72页珍藏版)》请在三一文库上搜索。

1、第12章 设计用户界面,第12章 设计用户界面,12.1 菜单和加速键 12.2 工具栏 12.3 状态栏 12.6 通用对话框,资源,在Windows的可执行文件中,资源是独立于代码的,使用单独的Resource Compiler进行编译,并嵌入到可执行文件中。 在编程过程中,代码是可复用的,资源也是可复用的,通过资源的“导入”和“导出”功能来实现资源的可复用。 程序的国际化,也是通过资源来实现的。,获取资源的一个样例,查看Windows(98/2000)系统中自带的纸牌游戏中的图片资源: c:Windowscards.dll 或 c:WINNTSystem32,12.1 菜单和加速键,12

2、.1.1 使用菜单,Hello World!,ID_COLOR_RED ID_COLOR _GREEN ID_COLOR_BLUE,ID_OPER_SHOW,属性选择Pop-up,在My_ResView.h中的 class CMy_ResView : public Cview 中的public处加入如下声明,添加成员变量:,COLORREF m_nColor; /用户可选颜色数组 CString m_strShow; / 显示的字符内容 BOOL m_bShow; / 是否显示,在构造函数CMy_ResView:CMy_ResView () 中初始化成员变量: m_nColor=RGB(255

3、,0,0); / 红 m_strShow = “Hello World!“; / 显示内容 m_bShow = TRUE; / 初始化为显示,在函数void CMy_ResView :OnDraw(CDC* pDC)中加入如下代码,绘制字符串: if(m_bShow) / 若显示 pDC-SetTextColor(m_nColor); / 设置输出字符串颜色 pDC-TextOut(100,100,m_strShow); / 输出字符串 ,菜单消息响应,若编译运行程序,可看到程序输出一行红色的字符串,但颜色设置菜单项还没有起作用。 下面介绍如何通过菜单项来控制程序,在介绍菜单项的响应时,必须先

4、了解几个消息响应机制: COMMAND消息的响应 UPDATE_COMMAND_UI消息的响应,1. COMMAND消息的响应,(1)添加了对COMMAND消息的响应后,My_ResView.h变化(声明消息处理函数): / Generated message map functions protected: /AFX_MSG(CMy_ResView) afx_msg void OnOperShow(); /成员函数 afx_msg void OnColorBlue(); afx_msg void OnColorGreen(); afx_msg void OnColorRed(); /AFX_

5、MSG,(2)在My_ResView.cpp文件中,ID_OPER_SHOW对应的COMMAND消息的绑定,代码如下(完成消息映射) : BEGIN_MESSAGE_MAP(CMy_ResView, CView) /AFX_MSG_MAP(CMy_ResView) ON_COMMAND(ID_OPER_SHOW, OnOperShow) /菜单和对应COMMAND消息的绑定 ON_COMMAND(ID_COLOR_BLUE, OnColorBlue) ON_COMMAND(ID_COLOR_GREEN, OnColorGreen) ON_COMMAND(ID_COLOR_RED, OnColo

6、rRed) /AFX_MSG_MAP / Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint) END_MESSAGE_MAP(),(3)在My_ResView.cpp文件的最后加入如下代码(加入消息处理函数): void CMy_ResView:OnOperShow() m_bShow = !m_bShow; / 前面定义有:BOOL m_bshow; m_bshow=true; Invalidate(); / 强制程序刷新窗口 void CMy_ResView :OnColorBlue() m_nCo

7、lor=RGB(0,0,255); /设定当前颜色为蓝色 Invalidate(); / 刷新窗口 void CMy_ResView :OnColorGreen() m_nColor=RGB(0,255,0); /设定当前颜色为绿色 Invalidate(); / 刷新窗口 void CMy_ResView :OnColorRed() m_nColor=RGB(255,0,0); /设定当前颜色为红色 Invalidate(); / 刷新窗口,菜单消息响应实现步骤,在头文件中声明消息处理函数 在实现文件中完成消息映射 在实现文件中加入消息处理函数,2. UPDATE_COMMAND_UI消息的

8、响应,为ID_OPER_SHOW添加UPDATE_COMMAND_UI消息。在自动生成消息处理函数中加入如下代码: 随着m_bShow的值的改变,显示菜单项的状态与实际是否显示字符串的状态一致了,通过菜单项前面的“”标记来体现。,void CMy_ResView:OnUpdateOperShow(CCmdUI* pCmdUI) pCmdUI-SetCheck(m_bShow); / 显示选中标志 void CMy12_1View:OnUpdateColorRed(CCmdUI* pCmdUI) pCmdUI-SetRadio(m_nColor=RGB(255,0,0); void CMy12_

9、1View:OnUpdateColorGreen(CCmdUI* pCmdUI) pCmdUI-SetRadio(m_nColor=RGB(0,255,0); void CMy12_1View:OnUpdateColorBlue(CCmdUI* pCmdUI) pCmdUI-SetRadio(m_nColor=RGB(0,0,255);,void Enable( BOOL bOn = TRUE ) 禁止或者允许该菜单项 void SetCheck( int nCheck = 1 ) 设置菜单项/工具条按钮的check状态,显示标志为“” void SetRadio( BOOL bOn = TR

10、UE ) 与SetCheck功能类似,显示标志为“ ” void SetText( LPCTSTR lpszText ) 设置菜单项的Caption属性,CCmdUI类常用的方法,12.1.2 定义加速键,(1) 将项目工作区切换到资源视图,选择Accelerator资源类型,双击IDR_MAINFRAME加速键资源,打开加速键编辑窗口。 (2) 编辑加速键资源。 在ID下拉列表框中选择AFX_ID_COLOR_RED,在Key一栏中输入R,选择Ctrl复选框和VirtKey单选按钮,以完成加速键设置。 (3) 关闭加速键编辑窗口。,字符串资源的使用,字符串资源主要是用于程序的多语言版本。如果

11、要动态切换界面语言,使用字符串资源是很好的选择。 在MFC中,可以通过CString类的LoadString方法来从资源载入字符串。 具体操作: 打开ResourceViewString Table,在表中的空白高亮处双击,在弹出的String Properties对话框中的ID编辑框中输入IDS_STRING_HELLO,Caption编辑框中输入“Hello VC!”。,字符串资源的使用,在My_ResView.cpp文件的构造函数中,将原来的 m_strShow = “Hello World!“; 改为: m_strShow.LoadString(IDS_STRING_HELLO); 程

12、序的输出变为“Hello VC!”,使用字符串资源的好处是不需要在整个程序中去寻找某个字符串;如果某些字符串可能在将来会发生变更,那么最好将它写在字符串资源中。,对话框资源的创建及其应用,在上例的基础上编写一个对话框用于接收用户输入,然后用此输入替换主程序原来显示的字符串。,创建完对话框资源之后,需要生成一个相关的对话框类。ViewClassWizard Create a New Class OK,在Name中填入“CInputDlg” 。,(1)在InputDlg.h文件中,MFC加入了如下代码: / Dialog Data /AFX_DATA(CInputDlg) enum IDD = I

13、DD_DIALOG_NEW ; CString m_strInput; /变量声明 /AFX_DATA,将对话框上的IDC_EDIT_INPUT控件与一个CString类型的m_strInput变量绑定,建立一种映射关系。 上面的操作使MFC在幕后作了些什么?,(3)在InputDlg.cpp文件的DoDataExchange函数中,MFC加入了如下代码: /AFX_DATA_MAP(CInputDlg) DDX_Text(pDX, IDC_EDIT_INPUT, m_strInput);/数据交换 /AFX_DATA_MAP 在函数DDX_Text中,完成了控件与变量之间的数据交换。,(2)

14、在InputDlg.cpp的构造函数中,MFC加入了如下代码: /AFX_DATA_INIT(CInputDlg) m_strInput = _T(“); /对m_strInput初始化 /AFX_DATA_INIT,下面要在CMy_ResView中使用新创建的对话框,(1)为“操作”菜单增加菜单项“修改字符串”,其ID为ID_OPER_STRING。增加COMMAND消息响应函数OnOperString。 ( 2 ) 在My_ResView.cpp文件头部include部分最后加入: #include “InputDlg.h“ ( 3 )在OnOperString中加入如下代码: void

15、CMy_ResView:OnOperString() CInputDlg dlgInput; / 声明对话框变量 if(dlgInput.DoModal() = IDOK) / 弹出模态对话框,若用户点击OK按钮 m_strShow = dlgInput.m_strInput; / 更改显示的字符串 Invalidate(); / 强制重绘 ,12.2 工具栏,12.2.1 工具栏类的结构及其方法,CToolBar由CControlBar类派生。,构造方法用于建立Windows工具栏CToolBar对象,并在运行时将它们附加到框架窗口上。,工具栏按钮的操作方法是用来处理某一工具栏按钮。,构造方

16、法的功能,1Create()函数 作用:创建并初始化工具栏对象。 与其他创建过程类似,采用两步法生成: 声明对象 调用初始化函数CToolBar : Create()生成工具栏对象 函数原型:,BOOL Create( CWnd *pParentWnd, /pParentWnd为指向工具栏所在父窗口的指针 DWORD dwStyle = WS_CHILD|WS_VISIBLE|CBRS_TOP, /dwStyle为工具栏的风格,如表12-3所示 UINT nIDAFX_IDW_TOOLBAR /nID表示工具栏子窗口的ID号 );,工具栏风格,2LoadToolBar()函数 作用:装载工具栏

17、资源 先调用初始化函数CToolBar:Create 再调用该函数装载资源 函数原型:,BOOL LoadToolBar(LPCTSTR lpszResourcName); /lpszResourcName为字符串形式定义的资源 BOOL LoadToolBar(UINT nIDResource); /nIDResource为整型形式定义的资源,3SetBarStyle()函数 作用:设置工具栏风格。 如果在调用初始化函数CToolBar:Create时设置的工具栏风格不满足需要时,可以再用该函数进行设置。具体的工具栏风格与表12-l中的说明相同。 如下述代码设定工具栏的风格为:当光标在按钮上

18、暂停时,将显示工具提示和命令描述,并设定工具栏的大小是可变的。,m_wndToolBar.SetBarStyle (CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);,4LoadBitmap()函数 作用:将储存在位图资源中的按钮映像与程序的工具栏相连接。 函数原型: 如下述代码: ToolBar.LoadBitmap(IDR_TOOLS);,BOOL LoadBitmap(LPCTSTR lpszResourceName); /lpszResourceName为字符串形式定义的资源 BOOL LoadBitmap(UINT nIDResource); /

19、nIDResource为整型形式定义的资源,5工具栏的停靠,void EnableDocking(DWORD dwStyle); /参数dwStyle为工具栏停靠风格,对CToolBar类其可取值如下表所示。,实现允许用户移动工具栏的常用代码: m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking (CBRS_ALIGN_ANY),6工具栏的显隐控制 工具栏是一个窗口,其显隐控制可通过其父类CWnd的成员函数实现。,DWORD GetStyle( ) const; /函数返回当前控制栏风格 ShowWindow(SW_HIDE);

20、/实现隐藏 ShowWindow(SW_SHOWNORMAL); /实现再次显示,12.2.2 创建工具栏类实例,例12-2 在Hello应用程序框架中添加一个设置颜色的工具栏: (1) 工具条中包含四个按钮,分别对应菜单的“显示”、“红色”、“绿色”和“蓝色”菜单项。 (2) 工具条可以在窗口中任意位置停靠 (3) 当鼠标停留在工具条按钮上时,将显示该按钮的功能。,创建一个工具栏一般需要以下几个步骤: (1) 在项目中增加工具栏资源。 (2) 编辑工具栏。 (3) 为类CMainFrame加入一个CToolBar的受保护的成员变量m_colorToolBar。 (4) 在CMainFrame

21、的OnCreate()函数中加入设置工具栏的特性的代码。,1工具栏的设计 (1) 增加工具栏资源 1) Resouce View/单击右键/Insert菜单/Resource命令/显示Insert Resource对话框/选择Toolbar/单击New按钮,这样就在资源文件ToolBar中增加了一项工具栏资源。 2) 重新定义新增工具栏的ID为IDR_COLORTOOLBAR。 工具栏作为程序的一个资源一般存放在资源脚本中,在程序运行时才调用。 一般来说,工具栏的标识符ID在资源的头文件(Resource.h)中定义,例如: #define IDR_COLORTOOLBAR 132,3) 双击

22、IDR_COLORTOOLBAR,则显示一个可编辑的工具栏。,(2) 工具栏按钮的编辑 1) 加入工具栏按钮。 2) 删除工具栏按钮。 3) 分隔工具栏按钮。 4) 改变按钮的属性。 首先选中工具栏上的某个按钮(如第一个按钮) 然后选择View菜单中的 Properties命令,将显示Toolbar Button Properties对话框。,2添加代码 (1) 添加处理代码:使工具栏ID与菜单ID一致 (2) 添加设置代码 1) 在头文件MainFrame中为类CMainFrame加入一个成员变量 2)在MainFrm.cpp文件中加入代码以实现工具栏在启动程序时可见。此代码用于设置工具栏的

23、特性。,protected: / control bar embedded members CToolBar m_colorToolBar;,int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) if (!m_colorToolBar.Create(this) | !m_colorToolBar.LoadToolBar(IDR_COLORTOOLBAR) TRACE0(“Failed to create status barn“); return -1; ,(3) 添加浮动代码 为了使工具栏成为可“浮动”工具栏,即在应用程序窗口中,把它从

24、一个地方移动到另一个地方,可在CMainFrame的OnCreate()函数中修改并加入以下代码:,int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) if (!m_colorToolBar.Create(this,TBSTYLE_FLAT,WS_CHILD| WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) | !m_colorToolBar.LoadToolBar(IDR_COLORTOOLBAR) TRACE

25、0(“Failed to create status barn“); return -1; / fail to create m_colorToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar( ,12.3 状态栏,12.3.1 状态栏的结构及其方法,状态栏实际是一个窗口,一般分为几个窗格,每个窗格显示不同的信息。 VC+在Afxext.h中定义CStatusBar类的结构 默认状态栏包含窗格: 默认显示状态栏提示 CAPS LOCK键的状态 NUM LOCK键的状态 SCROL

26、L LOCK键的状态,12.3.2 利用AppWizard自动创建状态栏,利用AppWizard生成应用程序项目时,只要选择了初始化状态栏选项,AppWizard便可自动生成状态栏的内容。 包括: 1为CMainFrame类定义状态栏成员,class CMainFrame : public CFrameWnd protected: / control bar embedded members CStatusBar m_wndStatusBar; ;,2定义把状态栏分割为窗格的外部静态数组 在MainFrame.cpp文件中有以下一段代码:,static UINT indicators = ID

27、_SEPARATOR, / status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, ;,3创建状态栏窗口 状态栏窗口的创建与工具栏一样,也是在CMainFrame:OnCreate()函数中完成的。代码如下:,int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CFrameWnd:OnCreate(lpCreateStruct) = -1) return -1; if (!m_wndStatusBar.Create(this) |

28、 !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT) TRACE0(“Failed to create status barn“); return -1; / fail to create return 0; ,12.3.3 自定义状态栏实例,例12-3 下面我们将对Hello程序中已有的状态栏m_wndStatusBar进行修改,增加以下内容: (1) 当鼠标在窗口工作区移动时,在状态栏的第一窗格显示鼠标位置X、Y坐标。 (2) 在状态栏的第5窗格实时显示当前时间(hh:mm:ss)。 具体的操作

29、步骤如下:,1修改indicators数组 在MainFrm.cpp文件中,在已生成的数组中增加一个元素ID_INDICATOR_TIMER。,static UINT indicators = ID_SEPARATOR, / status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, ID_INDICATOR_TIMER, ;,2定义新增加的ID 选择菜单中ViewResource Symbols命令,将弹出Resource Symbols对话框。 单击New按钮,将弹出New Symbol对话框,

30、3为新增ID定义字符串资源 增加新的字符串后,修改属性,即在Caption文本框中输入字符串00:00:00,如图所示。,4确认已经自动生成的内容存在 需要确认的内容其实是AppWizard已经生成的、不需要修改的部分,包括: (1) 在CMainFrame类定义了成员m_wndStatusBar。,class CMainFrame : public CFrameWnd protected: CStatusBar m_wndStatusBar; ;,现在需要将m_wndStatusBar的访问属性改成public,class CMainFrame : public CFrameWnd publ

31、ic: CStatusBar m_wndStatusBar; ;,(2) 在CMainFrame:OnCreate函数中生成了创建状态栏窗口的代码。,int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) if (!m_wndStatusBar.Create(this) | !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT) TRACE0(“Failed to create status barn“); return -1; / fail to

32、create return 0; ,5更新时间窗格 (1) 定义消息处理函数OnTimer()和OnClose()。 (2) 修改OnTimer()和OnClose()函数代码。修改后代码如下(在MainFrm.cpp文件中):,int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) SetTimer(1,1000,NULL); /设置一个计时器 return 0; ,调用OnTimer()函数,NULL表示由系统调用OnTimer()函数,OnTimer()函数内容如下:,void CMainFrame:OnTimer(UINT nIDE

33、vent) CTime time; /构建了一个CTime对象 time=CTime:GetCurrentTime(); /获得当前时间 CString str_time=time.Format(“%H:%M:%S“); /设置时间格式为hh:mm:ss m_wndStatusBar.SetPaneText(m_wndStatusBar. CommandToIndex(ID_INDICATOR_TIMER), str_time); /更新时间窗格显示的正文 CFrameWnd:OnTimer(nIDEvent); ,OnClose ()函数内容如下:,void CMainFrame:OnClo

34、se() KillTimer(1); /撤销主框架窗口时应关闭计时器 CFrameWnd:OnClose();,6显示鼠标移动位置信息(View类) (1) 在My_ResView.cpp文件前面加入代码为: #include “MainFrm.h“ (2) 在CMy_ResView类中响应WM_MOUSEMOVE消息使用ClassWizard在CMy_ResView类中响应WM_MOUSEMOVE消息,并加入代码,得到函数如下:,void CHelloView:OnMouseMove(UINT nFlags, CPoint point) CMainFrame *pm=(CMainFrame

35、*)AfxGetMainWnd(); /从视图类中获得主帧窗口类指针 CStatusBar *psb= ,MFC类中获得其它类指针,1.从视图类获得文档类的指针 CTextDoc *pDoc=(CTestDoc*)GetDocument(); 2.从文档类取得视图类的指针 CDocument类提供了两个函数用于视图类的定位:GetFirstViewPosition()和GetNextView() 3. 从主帧窗口类获得视图类指针 CFrameWnd:GetActiveView() 4.从视图类中获得主帧窗口类指针 CWnd:GetParentFrame()或AfxGetMainWnd();,M

36、FC类中获得其它类指针(2),5.在任何类中获得应用程序类 用MFC全局函数AfxGetApp()可做到。 6.从应用程序类中获得主帧窗口类 m_pMainWnd成员(CWinThread类的数据成员,派生关系:CWinThread -CWinApp -应用程序类) 注意: A.在类A中获得类B的指针时,类A应包含类B的头文件。 B.在很多时候要进行强制类型转换,并要注意括号的括法。 由于派生类和父类指针类型的兼容,使明确区分各个类变得十分重要。在拿不准的时候,最好加上强制类型转换。,12.6 通用对话框,在Windows系统中提供了一些通用对话框如:文件选择对话框,颜色选择对话框,字体选择对

37、话框。 在MFC中使用CFileDialog,CColorDialog,CFontDialog来表示。 使用时一般不需要派生新的类,因为基类已经提供了常用的功能。 在创建并等待对话框结束后可以通过成员函数得到用户在对话框中的选择。,1. CColorDialog,CColorDialog类的使用过程: (1) 构造CColorDialog类对象。 (2) 设置或修改对象的数据成员m_cc,以便初始化对话框中控件的值,m_cc的结构类型为CHOOSECOLOR。 (3) 调用成员函数DoModal显示对话框并让用户从中选择颜色。如果选择“OK”按钮,则DoModal返回IDOK;如果选择“Can

38、cel”按钮,则DoModal返回IDCANCEL,取消用户输入。,CColorDialog,(4) 如果 DoModal返回的是 IDOK,系统将用户输入信息保存在数据成员m_cc中,使用以下CColorDialog的成员函数可以获取用户的输入信息: GetColor:返回包含选择颜色值的COLORREF结构; GetCurrentColor:设置当前选择颜色为参数指定的颜色; GetSavedCustomColors:获取用户创建的定制颜色; GetStyleName:得到选择字体的风格名字; OnColorOk:验证输入到对话框中的颜色,可以在派生的子类中覆盖此函数。,CColorDia

39、log,增加菜单项“其他”,设置属性 添加消息响应函数,Hello World!,ID_COLOR_RED ID_COLOR _GREEN ID_ COLOR_BLUE ID_ COLOR_OTHER,ID_OPER_SHOW,属性选择Pop-up,CColorDialog,void CMy_ResView:OnColorOther () CColorDialog OtherColor; / 创建颜色对话框 if(OtherColor.DoModal() = IDOK) / 如果用户点击OK按钮 m_nColor=OtherColor.GetColor(); / 更改颜色 Invalidate

40、(); / 强制重绘刷新窗口 ,2. CFontDialog,CFontDialog类的使用过程: (1) 构造CFontDialog类对象。例如: CFontDialog fdFontDialog; 或从CFontDialog派生子类并使用子类的构造函数。 (2)设置或修改对象的数据成员m_cf,以便初始化对话框中控件的值或状态,m_cf的结构类型为CHOOSEFONT。 (3)调用成员函数DoModal()显示对话框并让用户从中指定字体。如果选择“OK”按钮,则DoModal()返回IDOK;如果选择“Cancel”按钮,则DoModal()返回IDCANCEL,取消用户输入。例如: if

41、(fdFontDialog.DoModal()!=IDOK) return;,CFontDialog,(4) 如果DoModal()返回的是IDOK,系统将用户输入的信息保存在数据成员m_cf中,使用以下CFontDialog的成员函数可以获取用户输入信息: GetColor 得到选择字体的颜色 GetCurrentFont 得到当前选择的字体 GetFaceName 得到选择字体的字体名字 GetStyleName 得到选择字体的风格名字 GetSize 返回选择字体的大小 GetWeight 返回选择字体的磅数 IsStrikeOut 确定字体是否带删除线; IsUnderLine 确定字

42、体是否带下划线 IsBold 确定字体是否为粗体 IsItalic 确定字体是否为斜体,CFontDialog,增加菜单项“字体”,设置属性 添加消息响应函数,ID_OPER_FONT,void CMy_ResView: CMy_ResView() m_nColor=RGB(255,0,0);/ 红 / m_strShow = “Hello World!“; / 显示内容 m_strShow.LoadString(IDS_STRING_HELLO); m_bShow = TRUE; / 初始化为显示 memset( ,在My_ResView.h中的 public处添加成员变量: 构造函数中完成

43、初始化:,LOGFONT m_lfText; /字体信息,void CMy_ResView: OnOperFont() CFontDialog dlg( / 强制重绘刷新窗口 ,void CMy_ResView:OnDraw(CDC* pDC) CFont newFont,*pOldFont; if(m_bShow) / 若显示 newFont.CreateFontIndirect( / 恢复旧字体 ,3. CFileDialog,CFileDialog类的使用过程: (1) 构造CFileDialog类对象。如果传递给构造函数的第一个参数为TRUE,则构造“打开”对话框;如果为FALSE,则

44、构造“另存为”对话框。 (2)构造函数原型如下: CFileDialog:CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );,参数意义如下: bOpenFileDialog 为TRUE则显示“打开”对话框,为FALSE则显示“另存为” 对话框。 lp

45、szDefExt 指定默认的文件扩展名。 lpszFileName 指定默认的文件名。 dwFlags 指明一些特定风格。 lpszFilter 是最重要的参数,指明可供选择的文件类型和相应的扩展名。参数格式如: “Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*|“;文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 | 指明。 pParentWnd 为父窗

46、口指针。,(3)设置或修改对象的数据成员m_ofn,以便初始化对话框中控件的值,m_ofn的结构类型为OPENFILENAME。 (4)调用成员函数DoModal()显示对话框并允许用户输入路径名和文件名。如果选择OK按钮,则DoModal()返回IDOK;如果选择Cancel按钮,则DoModal()返回IDCANCEL,取消用户输入。,CFileDialog,(5) DoModal()返回的是IDOK,系统将用户输入信息保存在数据成员m_ofn中,使用以下CFileDialog的成员函数可以获取用户的输入信息。 GetFileName:返回选择文件的文件名; GetPathName:返回选

47、择文件的路径; GetFileExt:返回选择文件的扩展名; GetNextPathName:返回下一选择文件的路径; GetReadOnlypref:返回选择文件的只读状态; GetStartPosition:返回文件列表的第一个元素的位置。,CFileDialog,CFileDialog,增加菜单项“载入字符串”,设置属性 添加消息响应函数,ID_OPER_ZRSTRING,void CMy_ResView:OnOperZRString() char szFilters=“TXT Files (*.txt)|*.txt|All Files (*.*)|*.*|“; /设置打开后缀名为txt

48、的文件 CFileDialog fileDlg (TRUE,“txt“,“*.txt“,OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this); if( fileDlg.DoModal()=IDOK ) CString pathName = fileDlg.GetPathName(); CStdioFile out; out.Open(pathName, CFile:modeRead); CString sSql=“,s; do /读取文件 out.ReadString(s); sSql=sSql+s; while (out.GetPosition()!=out.GetLength(); out.Close(); m_strShow=sSql; /显示文本 Invalidate(); ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1