文档库 最新最全的文档下载
当前位置:文档库 › MFC 单文档中动态添加菜单项和响应菜单事件

MFC 单文档中动态添加菜单项和响应菜单事件

MFC 单文档中动态添加菜单项和响应菜单事件
MFC 单文档中动态添加菜单项和响应菜单事件

MFC 单文档中动态添加菜单项和响应菜单事件

新建一个单文档程序

在查看菜单项中增加两个子菜单,分别为隐藏工具栏(ID_HIDE),新建菜单(ID_NEWMENU) 在Resource.h中增加一个ID_NEWMENU宏

#define ID_NEWMENU WM_USER+101

操作工具栏和状态栏

使用GetDescendantWindow函数获取工具栏和状态栏的指针为ID_HIDE添加消息映射,编辑代码如下

static bool m_Hide=false;

m_Hide=!m_Hide;

//获取工具栏指针

CWnd* pWndToolBar=(CWnd*)GetDescendantWindow(AFX_IDW_TOOLBAR);

//获取状态栏指针

CWnd* pWndStatusBar=(CWnd*)GetDescendantWindow(AFX_IDW_STATUS_BAR);

CMenu* pMenu=GetMenu();

CMenu* pSubMenu=pMenu->GetSubMenu(2);

if(m_Hide)

{

pSubMenu->ModifyMenu(ID_HIDE,MF_BYCOMMAND,ID_HIDE,"显示工具栏");

if(pWndStatusBar!=NULL) pWndStatusBar->SetWindowText("隐藏工具栏");

if(pWndToolBar!=NULL) pWndToolBar->ShowWindow(SW_HIDE);

}

else

{

pSubMenu->ModifyMenu(ID_HIDE,MF_BYCOMMAND,ID_HIDE,"隐藏工具栏");

if(pWndStatusBar!=NULL) pWndStatusBar->SetWindowText("显示工具栏");

if(pWndToolBar!=NULL) pWndToolBar->ShowWindow(SW_SHOW);

}

动态添加子菜单

为ID_NEWMENU增加消息映射,编辑代码如下

static UINT m_NewMenu=ID_NEWMENU+1;

//获取菜单

CMenu* pMenu=GetMenu();

//获取索引为2的菜单项,即第3列菜单

CMenu* pSubMenu=pMenu->GetSubMenu(2);

char buffer[1];

itoa(m_NewMenu-ID_NEWMENU,buffer,10);

if(m_NewMenu<=ID_NEWMENU+5)

{

pSubMenu->AppendMenu(MF_SEPARATOR); //分隔线

pSubMenu->AppendMenu(MF_STRING | MF_ENABLED,m_NewMenu++,

CString("新的菜单")+buffer);

}

//如果m_bAutoMenuEnable为true,则会依次检查View、Document、Frame的

//消息映射表是否有这个弹出菜单中每个菜单项的处理函数,澳门新濠天地官网https://www.wendangku.net/doc/76846352.html, 如果没有就会把那一项改为灰的

m_bAutoMenuEnable=false;

添加OnCommand的消息映射用来响应添加的子菜单项,代码如下UINT uMsg=LOWORD(wParam);

for(UINT i=ID_NEWMENU+1;i<=ID_NEWMENU+5;i++)

if(uMsg==i)

{

char buffer[1];

itoa(i-ID_NEWMENU,buffer,10);

MessageBox(CString("新的菜单") + buffer);

}

右键菜单

在View类中添加OnRButtonDown的消息映射,代码如下

CMenu pPopMenu;

pPopMenu.CreatePopupMenu();

if(pPopMenu==NULL);

pPopMenu.AppendMenu(MF_STRING,ID_NEWMENU+6,"右键菜单");

this->ClientToScreen(&point);

pPopMenu.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);

在View类中添加OnCommand的消息映射用来响应右键菜单的事件UINT uMsg=LOWORD(wParam);

if(uMsg==ID_NEWMENU+6)

MessageBox(CString("右键菜单"));

MFC对话框向主窗体传递消息机制

对话框向主窗体传递消息,在视图中显示 现举例说明对话框向主窗体传递消息,以及主窗体响应消息的过程。我们拿单文档来说明,我们要实现下列功能:通过对话框,在文本框中输入字符串,在视图中显示刚才输入的字符串。 1、在应用程序向导中选择单个文档,然后完成。我这里的项目名称为mybook 2、在资源视图中,插入一对话框,对话框名称为dlg_wzm。 3、在刚才生成的对话框中插入一文本框,设置好相应的类和变量。为确认按钮生成响应函数。同时在mybook.cpp的BOOL CMyBookApp::InitInstance()函数中让该对话框启动,也就是加入CDlg_wzm dlg; dlg.DoModal();两行程序,当然在前面的要加入#include "dlg_wzm.h"。(详细过程略) 4、下面重点在于点击该对话框的确认按钮向主窗体发送消息。要现定义一个消息名称。

在stdafx.h文件中加入一行: #define WM_MYMESSAGE WM_USER+100 5、在CMainFrame的pulic申明中加入一变量CString wzmstr。目的是为了保存对话框中的字符串的值。在对话框的Onok()函数中: void CDlg_wzm::OnOK() { // TODO: Add extra validation here this->UpdateData(true); CMainFrame* pWnd=(CMainFrame*)AfxGetMainWnd(); //得到父窗体的指针 pWnd->wzmstr=this->m_input_edit; ASSERT(pWnd!=NULL); ::SendMessage(pWnd->GetSafeHwnd(), WM_MYMESSAGE,0,0); //发送消息 //注意WM_MYMESSAGE就是我们前面定义的消息。 //CDialog::OnOK(); } 6、下面我们看看主窗体怎么接受消息。我们要在主窗体中设置消息映射。 在mainfrm.h的protected声明中: afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); 在mainfrm.cpp文件中, BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code ! ON_WM_CREATE() ON_MESSAGE(WM_MYMESSAGE,OnMyMessage) //这里是我们加入的。 //}}AFX_MSG_MAP END_MESSAGE_MAP() 然后在mainfrm.cpp的文件最下面加入一个函数: void CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam) { CView *pView=this->GetActiveView(); //得到视图指针 if(pView)

用VC++MFC做文本编辑器(单文档模式)

用VC++MFC做文本编辑器(单文档模式)(2007-7-6 17:06:00) 原来做过一个用对话框实现的文本编辑器,其实用MFC模板里面的单文档模板也可以做,甚至更加方便,适合入门级的爱好者试试,现介绍方法如下: 1,首先新建一个工程,选择MFC AppWizard(exe),定名字为:textview_1,程序类型选择单个文档,其他均默认完成。 2,在系统自动生成的CTextview_1Doc类里面增加一个控件,用于文本文档的暂时存放: class CTextview_1Doc : public CDocument { ...... public: CStringArray m_strContent; } 然后在CTextview_1Doc类的Serialize函数里面增加打开、保存文本文件的程序: void CTextview_1Doc::Serialize(CArchive& ar) { CString str; if (ar.IsStoring()) { // TODO: add storing code here int nLines = (int)m_strContent.GetSize(); for ( int i=0; i

菜单图标在菜单中加入图标

菜单图标:在菜单中加入图标 疯狂代码 https://www.wendangku.net/doc/76846352.html,/ ?:http:/https://www.wendangku.net/doc/76846352.html,/DeveloperUtil/Article25885.html VB菜单编辑器所提供的默认菜单是不能在菜单项中加入图标的,而许多流行的软件大都采用了漂亮的带有小图标的菜单,如果想利用VB实现这种效果就必须要调用API函数来实现了。例中我们使用了三个与菜单操作有关的函数:GetMenu、SetMenuItemBitmaps、GetSubMenu。 我们先来声明API函数,本例中用到的三个函数声明如下: Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long Private Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long GetMenu函数的作用得到一个窗口中的菜单的句柄(这个菜单句柄应理解为处于某个窗体上的所有菜单的入口),其中各个参数的意义如下表所示: 参数 意义 hwnd Long,窗口句柄。对于vb,这应该是一个窗体句柄 返回值 Long,依附于指定窗口的一个菜单的句柄(如果有菜单);否则返回零 GetSubMenu函数用于取得一个弹出式菜单(弹出式菜单是指处于任何一级的菜单,注意不是菜单项)的句柄,它位于菜单中指定的位置,它的各个参数的意义如下: 参数 意义 hMenu Long,菜单的句柄 nPos Long,次级菜单在上级菜单中的位置。第一个位置的编号为0 返回值 Long,位于指定位置的弹出式菜单的句柄(如果有的话);否则返回零 SetMenuItemBitmaps函数用于设置一幅特定位图,令其在指定的菜单条目中使用,代替标准的复选符号(√),它的各个参数的意义如下: 参数 意义 hMenu Long,菜单的句柄

插入菜单栏学习

插入菜单栏学习 1.表选项功能及应用 ①数据透视表和数据透视图 对于选定区域的表格数据进行可筛选性的组合、排列,通过新的表、柱形图直观反应出来。 ②表 对所选区域的表格数据设定可筛选功能的新表,可在其进行更详细的操作而不影响基础表格的数据形态。 2.插图选项功能及应用 ①图片:在表格中导入本地图片格式 ②剪贴画:在剪切画中搜索需要查找的内容并插入到相应的文本中 ③形状:插入可编辑内容的形状和样式 ④smartart图:用做ABC列表分栏、流程渐进、循环结构、层次递进、关系示意、矩阵安排以及棱锥式金字塔图。 3.图表选项功能及应用 柱形图(纵向)/条形图(横向):分为二维柱形图、三维柱形图、圆柱图、圆锥图和棱锥图 柱形图主要用于比较两个或两个以上的价值在不同时间或者在不同条件下的大小,只有一个变量,通常用于较小的数据集分析 折线图:显示在单位变量间隔下数据值的变化趋势 散点图:显示若干数据系列中各数值之间的关系

饼状图:显示在整个数据系统中,每个个体所占的权重 面积图:显示单位时间内变动的增幅 股价图:显示股票价格,运用股价图不仅可以显示图表并且可以显示出数据,使分析者一目了然的掌握 曲面图:立体显示数据值与中心数据值的偏离程度 圆环图:类似饼状图 气泡图:类似散点图 雷达图:显示数据值与中心数据值之间的变动 4.超链接图标功能及应用 超链接用于关联表格、文件、网站的跳转 5.文本图标功能及应用 ①文本框:分为横竖两种型式,可移动式备注、佐助等文本编辑,插入文本框后点击对应的文本框会出现格式菜单栏对其进行外形和样式进行设计(具体为:1.形状外形类:包括框中框、框中分割、框中形状等;2.形状样式:形状填充、形状轮廓、形状效果;) ②艺术字:插入具有字体格式的文本框(点击艺术字文本框出现格式菜单栏后,可以对艺术字进行文本填充、文本轮廓、文本效果、大纲样式、阴影、三维格式、三维旋转、文本框设置) ③对象:重要学习内容,可以在当前表格中插入各种OFFICE办公软件格式文本,创建类似于超链接的图片、文字连接格式,亦或建立表中表,表中文档等相关联的可操作的文本 ④符号插入(具有代码查询的符号、简图、表情等)

VS2010和MFC编程入门之2(利用MFC向导生成单文档应用程序框架)

VS2010/MFC编程入门之二(利用MFC向导生成单文档 应用程序框架) 这里给大家一个简单的例子,演示如何生成单文档应用程序框架。 解决方案与工程 在VS2010的使用介绍中已经讲了解决方案与工程的概念,这里再重提一下。每个应用程序都作为一个工程来处理,它包含了头文件、源文件和资源文件等,这些文件通过工程集中管理。在VS2010中,工程都是在解决方案管理之下的。一个解决方案可以管理多个工程,可以把解决方案理解为多个有关系或者没有关系的工程的集合。VS2010提供了一个Solution Explorer解决方案浏览器视图,可以显示当前解决方案的内容,当新建一个工程时可以选择新建一个解决方案还是加入当前解决方案。 下图左侧面板中正在显示的视图就是Solution Explorer,视图中有一个解决方案-HelloWorld,此解决方案下有一个同名的工程-HelloWorld。 在应用程序向导生成应用程序后,VS2010会在用户设置的路径下,以解决方案名为名称建立一个目录,里面存放自动生成的文件。 使用VS2010应用程序向导生成单文档应用程序框架

这里简略演示下怎样生成单文档应用程序框架,让大家先有个直观的了解,有不理解的地方可以留着以后回来再看。下面按照操作步骤一步步讲解: 1.点菜单栏File->New->Project,弹出New Project对话框,我们可以选择工程类型。 如果安装完VS2010以后第一启动时已经设置为VC++,则Installed Templates->Visual C++项会默认展开,而如果没有设置VC++,则可以展开到Installed Templates->Other Languages->Visual C++项。因为我们要生成的是MFC程序,所以在“Visual C++”下选择“MFC”,对话框中间区域会出现三个选项:MFC ActiveX Control、MFC Application和MFC DLL。MFC ActiveX Control用来生成MFC ActiveX控件程序。MFC Application用来生成MFC应用程序。MFC DLL用来生成MFC动态链接库程序。当然我们要选择MFC Application。 在对话框下部有Name、Location和Solution name三个设置项。意义如下:Name--工程名,Location--解决方案路径,Solution name--解决方案名称。这里Name 我们设为“HelloWorld”,Location设置为“桌面”的路径,Solution name默认和Name一样,当然可以修改为其他名字,这里我们不作修改,也使用“HelloWorld”。点“OK”按钮。

VS2010MFC编程入门之十一(对话框:模态对话框及其弹出过程)

加法计算器对话框程序大家照着做一遍后,相信对基于对话框的程序有些了解了,有个好的开始对于以后的学习大有裨益。趁热打铁,鸡啄米这一节讲讲什么是模态对话框和非模态对话框,以及模态对话框怎样弹出。 一.模态对话框和非模态对话框 Windows对话框分为两类:模态对话框和非模态对话框。 模态对话框是这样的对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。 非模态对话框则是,它弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等。 大家对Windows系统很了解,相信这两种对话框应该都遇到过。之前的加法计算器对话框其实就是模态对话框。 二.模态对话框是怎样弹出的 毕竟加法计算器程序大部分都是MFC自动生成的,对话框怎么弹出来的大家可能还不是很清楚。鸡啄米下面简单说说它是在哪里弹出来的,再重新建一个新的对话框并弹出它,这样大家实践以后就能更灵活的使用模态对话框了。 大家打开Addition.cpp文件,可以看到CAdditionApp类有个InitInstance()函数,在M FC应用程序框架分析中提到过此函数,不过那是单文档应用程序App类中的,函数体不太相同,但都是进行App类实例的初始化工作。

InitInstance()函数的后半部分有一段代码就是定义对话框对象并弹出对话框的,鸡啄米下面给出这段代码并加以注释: 弹出对话框比较关键的一个函数,就是对话框类的DoModal()函数。CDialog::DoModa l()函数的原型为:

virtual INT_PTR DoModal(); 返回值:整数值,指定了传递给CDialog::EndDialog(该函数用于关闭对话框)的nR esult参数值。如果函数不能创建对话框,则返回-1;如果出现其它错误,则返回IDABOR T。 调用了它对话框就会弹出,返回值是退出对话框时所点的按钮的ID,比如,我们点了“退出”按钮,那么DoModal返回值为IDCANCEL。 三.添加一个新对话框并弹出它 鸡啄米再为加法计算器程序添加一个对话框,以在计算之前询问用户是否确定要进行计算。大家可以完整的看下对话框的添加和弹出过程。 1.根据“创建对话框模板和修改对话框属性”中所讲的方法,在Resource View中的“Di alog”上点右键选择“Insert Dialog”,创建一个新的对话框模板,修改其ID为IDD_TIP_DIA LOG,Caption改为“提示”,然后参考“为对话框添加控件”中所讲,在对话框模板上添加一个静态文本框(static text),Caption改为“您确定要进行加法计算吗?”,接下来修改OK 按钮的Caption为“确定”,Cancel按钮的Caption为“取消”,最后调整各个控件的位置和对话框的大小。最终的对话框模板如下图: 2.根据“创建对话框类和添加控件变量”中创建对话框类的方法,在对话框模板上点右键选择“Add Class...”,弹出添加类的对话框,设置“Class name”为CTipDlg,点“OK”。在S olution Explorer中可以看到生成了CTipDlg类的头文件TipDlg.h和源文件TipDlg.cpp。 3.我们要在点“计算”按钮之后弹出此提示对话框,那么就要在“计算”按钮的消息处理函数OnBnClickedAddButton()中访问提示对话框类,所以为了访问CTipDlg类,在Addition Dlg.cpp中包含CTipDlg的头文件:#include "TipDlg.h"。 4.修改OnBnClickedAddButton()的函数体,在所有代码前,构造CTipDlg类的对象tip Dlg,并通过语句tipDlg.DoModal();弹出对话框,最后判断DoModal()函数的返回值是IDO K还是IDCANCEL来确定是否继续进行计算。OnBnClickedAddButton()函数修改后如下: C++代码

MFC简单的登录对话框

登录对话框 我们利用MFC编写一个简单的登录对话框。主窗体是单文档界面。程序运行的时候,先弹出一个简单的登录对话框,输入用户名和密码后主窗体显示出来。 1、开打VC++6.0。点击文件,新建,点击工程中的MFC AppWizard(exe),在右边选择工程保存的位置,并且为工程取好名字。 2、点击确定后,选择单个文档,你可以一直点击下一步,直到完成,或者在这里直接点击完成即可,完成后界面如下。 3、点击工具栏中的“!”号试着编译运行一次,看是否有问题。如果没有问题,我们继续。点击左边的ResourceView,在Dialog上面鼠标右键单击弹出一弹出框,单击Insert Dialog。

4、在右边新增的对话框中,适当改变窗口大小,加入静态文本框和文本编辑框。 输入用户名:。然后回车

同样在下面的第二个静态文本框的属性标题改为:输入密码:。然后回车。 6、在第一个文本编辑框上右键单击,点击属性,把ID框中的IDC_EDIT1改为容易理解的名字,如:IDC_EDIT_NAME,注意前面的IDC_EDIT最好不要去掉,这样容易见名而知义。同样,对第二个文本编辑框的属性中的IDC_EDIT2改为:IDC_EDIT_PWD 7、在对话框上的任何空白的地方右键单击,点击建立类向导。

然后弹出 选择建立Create a new class,点击OK。 这是为这个对话框创建一个新的类。在Name中,为该对话框类取个名字:CDlg_login。下面的Base class以及Dialog ID不要随便改动。然后点击OK。这样新的类CDlg_login就与本对话框建立起了联系。

MFC 单文档中动态添加菜单项和响应菜单事件

MFC 单文档中动态添加菜单项和响应菜单事件 新建一个单文档程序 在查看菜单项中增加两个子菜单,分别为隐藏工具栏(ID_HIDE),新建菜单(ID_NEWMENU) 在Resource.h中增加一个ID_NEWMENU宏 #define ID_NEWMENU WM_USER+101 操作工具栏和状态栏 使用GetDescendantWindow函数获取工具栏和状态栏的指针为ID_HIDE添加消息映射,编辑代码如下 static bool m_Hide=false; m_Hide=!m_Hide; //获取工具栏指针 CWnd* pWndToolBar=(CWnd*)GetDescendantWindow(AFX_IDW_TOOLBAR); //获取状态栏指针 CWnd* pWndStatusBar=(CWnd*)GetDescendantWindow(AFX_IDW_STATUS_BAR); CMenu* pMenu=GetMenu(); CMenu* pSubMenu=pMenu->GetSubMenu(2); if(m_Hide) { pSubMenu->ModifyMenu(ID_HIDE,MF_BYCOMMAND,ID_HIDE,"显示工具栏"); if(pWndStatusBar!=NULL) pWndStatusBar->SetWindowText("隐藏工具栏"); if(pWndToolBar!=NULL) pWndToolBar->ShowWindow(SW_HIDE); } else { pSubMenu->ModifyMenu(ID_HIDE,MF_BYCOMMAND,ID_HIDE,"隐藏工具栏"); if(pWndStatusBar!=NULL) pWndStatusBar->SetWindowText("显示工具栏"); if(pWndToolBar!=NULL) pWndToolBar->ShowWindow(SW_SHOW); } 动态添加子菜单 为ID_NEWMENU增加消息映射,编辑代码如下 static UINT m_NewMenu=ID_NEWMENU+1; //获取菜单 CMenu* pMenu=GetMenu(); //获取索引为2的菜单项,即第3列菜单 CMenu* pSubMenu=pMenu->GetSubMenu(2); char buffer[1]; itoa(m_NewMenu-ID_NEWMENU,buffer,10); if(m_NewMenu<=ID_NEWMENU+5) { pSubMenu->AppendMenu(MF_SEPARATOR); //分隔线 pSubMenu->AppendMenu(MF_STRING | MF_ENABLED,m_NewMenu++, CString("新的菜单")+buffer); } //如果m_bAutoMenuEnable为true,则会依次检查View、Document、Frame的 //消息映射表是否有这个弹出菜单中每个菜单项的处理函数,澳门新濠天地官网https://www.wendangku.net/doc/76846352.html, 如果没有就会把那一项改为灰的 m_bAutoMenuEnable=false;

MFC单文档打开文件

在向导创建的应用程序中,程序的默认菜单有“文件”、“编辑”、“视图”和“帮助”。当运行程序后,打开“文件”菜单中的“打开”命令时,应用程序会自动打开相应的“打开”文件通用对话框。之所以有这功能,是因为向导创建的应用程序框架中,自动将“打开”菜单命令与CWinApp的OnFileOpen 成员函数相关联。 当用户在通用“打开”文件对话框中指定一个文件后,应用程序将调用文档对象的 CDocument::OnOpenDocument虚成员函数。该函数将打开文件,并调用DeleteContents清除文档对象的内容,然后创建一个CArchive(归档类)对象用于数据的读取,接着又自动调用Serialize函数。之后便调用视图对象的CView::OnInitialUpdate虚成员函数。 上述的Serialize函数是一个很特别的函数,它既可以从中读取文档数据,也可以保存文档数据,称为“序列化”函数。它被添加用户的文档类中,用来根据CArchive内部的一个标志来决定文档数据的流向(读或写), 打开机制:可以看到消息映射ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen),如果你没有映射ID_FILE_OPEN消息,就会调用CWinApp::OnFileOpen,否则调用你的消息映射函数。在CWinApp::OnFileOpen中调用CDocManager::OnFileOpen(),这样函数完成以下任务:1。弹出对话框让用户选择待打开的文件,返回该文件的全路径名称, 供下面函数调用时使用2。调用应用程序的 OpenDocumentFile(LPCTSTR lpszFileName)。至此,这个对话框的出处就真相大白了。 文档数据的读操作 对于上述过程,我们所做的仅仅是在文档类的Serialize函数中添加文档数据读取(加载)和存储的代码。需要说明的是,Serialize函数的参数ar是一个CArchive类的引用对象。CArchive类提供了“<<”和“>>”运算符,分别可以向文档对象写入数据或从文档对象中读取数据。它们的含义与C++中的“<<”和“>>”运算符相同,只不过CArchive支持更多的数据类型,如:CObject、CString等。除此之外CArchive类还提供ReadString和WriteString成员函数来读写文档中的一行文本。 文档数据的显示方法和技巧 用户的视图类是负责显示文档数据的,目前常用的显示方法有二个:一是在视图的客户区中使用编辑控件,二是直接调用CDC类的文本输出函数绘制所有的文本内容。 1.使用编辑控件 “编辑控件”是一个可以让用户从键盘输入和编辑文本的控件,通过它可以输入各种文本、数字或者口令,也可使用它来编辑和修改简单的文本内容。MFC类CEdit封装了编辑控件的全部操作。 使用编辑控件实现文档数据的显示的思路是,先在视图中创建一个与视图客户区大小相同的编辑控件,然后把文档的文本内容转送到编辑控件中。 2. 直接控制文本的输出(详细) (1)重写OnOpenDocument函数,读取文本文件到字符串变量 BOOL CMFCDoc::OnOpenDocument(LPCTSTR lpszPathName) { if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE; // TODO: 在此添加您专用的创建代码 if(lpszPathName!=NULL) { CFile pCFile; int hResult=pCFile.Open(lpszPathName, CFile::modeReadWrite); //以读写方式打开文件 if(hResult != 0) { // AfxMessageBox("打开文件成功"); }

在VB中添加菜单

在VB中添加菜单 在Windows应用程序中,我们可以方便地通过菜单进行操作。就像我们常用的办公软件WORD: 程序的功能菜单在VB中可以借助菜单编辑器方便地生成菜单,下面随着我一步一步地操作,为自己的应用程序添加一个菜单。 首先新建一个工程,然后将窗体标题修改为“菜单程序示例”,如图: 当然这不是必须的! 在VB的菜单栏的“工具”菜单中选择“菜单编辑器”或直接点击快捷键CTRL+E打开。打开后的菜单编辑器是这样的: 此时还没有添加任何内容,下面我们为这个应用程序添加菜单内容,假设这个应用程序的菜单结构如下: 文件 ……新建 ……打开 ……保存 ……退出 编辑 ……剪切 ……复制 ……粘贴 帮助 ……关于前面有“……”标记的表示这是子菜单。现在我们就把这个结构用菜单编辑器来实现吧。 在打开的菜单编辑器的标题中输入“文件”,名称是供以后在程序中调用的,所以最好取个好记的与本菜单项相关的有意义的名称,我将它命名为“menu_File”,效果如图: 如果你用过WORD等程序,你会发现很多菜单上提供了一个快捷键,就是在菜单项的后面紧跟一对括号,其中指定一个字母,操作时只要用ALT键加上这个字母就可以打开这个菜单项了,如:文件(F)。这怎么实现呢?很简单,在上面的标题“文件”后输入“(&F)”就行了,试试吧。不要确定保存,我们还没有添加完呢。点击“下一个”按钮,将选择条移动到“文件”的下一行,然后用同样的方法输入“新建”菜单项,如果此时你点击保存,主窗口中将带有刚生成的菜单了,同时你也会发现“新建”菜单项和“文件”菜单项处于同一排,而不是以子菜单的形式生成在“文件”菜单项之内的,那怎么办呢?请仔细看看菜单编辑器中提供的各种功能吧(如图) 我们只要选中准备设置为子菜单的那一项(“新建”菜单项),点击上面的右箭头就行,点一次添加一级,如果点两次则是子子菜单,相应的菜单项前会用“…………”表示。用同样的方法把上面的菜单项添加到菜单编辑器中,效果如图: 在Windows应用程序中,有些菜单项被分隔条隔开,这样的效果怎么实现呢?我们在“文件”菜单中的“退出”菜单项上方添加一分隔条吧,选中“退出”菜单项,然后点击“插

MFC之编写一个简单的登录对话框(连数据库)

编写一个简单的登录对话框 大家好,我们利用MFC编写一个简单的登录对话框。主窗体是单文档界面。程序运行的时候,先弹出一个简单的登录对话框,输入用户名和密码后主窗体显示出来。 1、开打VC++6.0。点击文件,新建,点击工程中的MFC AppWizard(exe),在右边选择工程保存的位置,并且为工程取好名字。 2、点击确定后,选择单个文档,你可以一直点击下一步,直到完成,或者在这里直接点击完成即可,完成后界面如下。 3、点击工具栏中的“!”号试着编译运行一次,看是否有问题。如果没有问题,我们继续。点击左边的ResourceView,在Dialog上面鼠标右键单击弹出一弹出框,单击Insert Dialog。

4、在右边新增的对话框中,适当改变窗口大小,加入静态文本框和文本编辑框。 输入用户名:。然后回车

同样在下面的第二个静态文本框的属性标题改为:输入密码:。然后回车。 6、在第一个文本编辑框上右键单击,点击属性,把ID框中的IDC_EDIT1改为容易理解的名字,如:IDC_EDIT_NAME,注意前面的IDC_EDIT最好不要去掉,这样容易见名而知义。同样,对第二个文本编辑框的属性中的IDC_EDIT2改为:IDC_EDIT_PWD 7、在对话框上的任何空白的地方右键单击,点击建立类向导。

然后弹出 选择建立Create a new class,点击OK。 这是为这个对话框创建一个新的类。在Name中,为该对话框类取个名字:CDlg_login。下面的Base class以及Dialog ID不要随便改动。然后点击OK。这样新的类CDlg_login就与本对话框建立起了联系。

怎么在右键菜单中添加word。excel

把横线中的信息复制的记事本中,然后另存为*.reg格式的文件。 -----------------------------------Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.doc] @="Word.Document.8" "Content Type"="application/msword" [HKEY_CLASSES_ROOT\.doc\OpenWithList] [HKEY_CLASSES_ROOT\.doc\OpenWithList\WordPad.exe] @="" [HKEY_CLASSES_ROOT\.doc\PersistentHandler] @="{98de59a0-d175-11cd-a7bd-00006b827d94}" [HKEY_CLASSES_ROOT\.doc\ShellNew] [HKEY_CLASSES_ROOT\.doc\Word.Document.6] [HKEY_CLASSES_ROOT\.doc\Word.Document.6\ShellNew] "FileName"="winword.doc" [HKEY_CLASSES_ROOT\.doc\Word.Document.8] [HKEY_CLASSES_ROOT\.doc\Word.Document.8\ShellNew] "FileName"="winword8.doc" [HKEY_CLASSES_ROOT\.doc\WordDocument] [HKEY_CLASSES_ROOT\.doc\WordDocument\ShellNew] "FileName"="winword2.doc" [HKEY_CLASSES_ROOT\.doc\WordPad.Document.1] [HKEY_CLASSES_ROOT\.doc\WordPad.Document.1\ShellNew] "NullFile"="" -----------------------------------以下是新建EXCEL文档的注册信息(.xls) -----------------------------------Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.xls] "Content Type"="application/vnd.ms-excel" @="Excel.Sheet.8" [HKEY_CLASSES_ROOT\.xls\Excel.Sheet.5] [HKEY_CLASSES_ROOT\.xls\Excel.Sheet.5\ShellNew] "FileName"="excel.xls" [HKEY_CLASSES_ROOT\.xls\Excel.Sheet.8] @="" [HKEY_CLASSES_ROOT\.xls\Excel.Sheet.8\ShellNew] "FileName"="excel9.xls" [HKEY_CLASSES_ROOT\.xls\ExcelWorksheet] [HKEY_CLASSES_ROOT\.xls\ExcelWorksheet\ShellNew] "FileName"="excel4.xls" [HKEY_CLASSES_ROOT\.xls\PersistentHandler]

基于单文档的(MFC)窗口分割

基于单文档的窗口分割 简介部分是对于MFC应用程序的介绍,在博客上看到的,觉得受益匪浅,所以写到这里。不需要的朋友可以从第二部分程序设计开始看起。

目录 基于单文档的窗口分割 (1) 简介 (3) MFC应用程序类型简介 (3) 单文档与多视图 (5) 单文档多视图程序设计 (6) Step1:创建单文档的MFC程序 (6) Step2:声明相关的变量。 (6) Step3:重载OnCreateClient()函数,进行窗口的分割 (7) Step4:设置行列初始值 (9) 附:代码 (10)

简介 MFC应用程序类型简介 在Microsoft VC++ 6.0中,基于MFC的应用程序一般分为以下几种: 多文档界面(MDI) 单文档界面(SDI) 基于对话框的应用程序。 图1-1 应用程序类型 其中单文档又可分为单视图的和多视图的。

图1-2 单文档单视图 图1-3 单文档多视图 一般情况下,单文档仅需要单视图就够了,如Windows自带的记事本、画图程序等等,但

在一些情况下,单文档需要多视图支持,比如同时观察文档的不同部分,同时从不同的角度观察同一文档等。 在MFC的框架下,文档对象(CDocument)有一个保存其所有视图的列表,并提供了增加视图(AddView)与删除视图(RemoveView)函数,以及当文档内容改变时通知其所有视图的方法(UpdateAllViews)。 1-4 类视图 通过多文档框架的窗口复制机制和单文档框架的分割窗口机制是实现单文档多视图的主要方法。单文档与多视图 一般地,单文档与多视图有三种情况: 1)在多文档界面MDI中,每个视图位于MDI的一个独立子文档框架中,视图对象基于同一个视图类。用户可以通过“窗口|新窗口”菜单,为同一文档的视图再创建一个窗口,通过新创建的窗口,可以编辑和观察文档的另一部分,同一文档各个视图之间自动实现同步,用户修改一个视图的内容,在另外的视图中也自动更新。 MFC框架通过复制原来的子框架窗口和其中的视图来实现上面的功能,并且是完全自动的。 2)视图对象基于同一视图类,所有视图位于同一文档框架中。 分割窗口将单文档窗口的视图区分割成几个独立的视图,框架从同一视图类创建多个视图对象。Word的子窗口即属于这种类型。 3)视图对象基于不同的视图类,所有的视图位于同一文档框架中。 多个视图共享同一文档框架,但从不同的视图类创建,每个视图可以为文档提供不同的观察和编辑方法。比如在一个窗口里观察文档的不同部分,或者是在一个窗口里用不用类型的视图观察同一个文档。这种类型的实现方法是通过重载框架类CMainFrame的成员函数OnCreateClient实现,用户可以根据不同需要将窗口分为垂直或水平的多个分割窗口。

第二讲 菜单的添加及其实现

《ArcGIS Engine+C#实例开发教程》第二讲菜单的添加及其实现 时间:2009-04-03 13:23:02 来源:https://www.wendangku.net/doc/76846352.html, 作者:3SDN原创点击量:1016 在上一讲中,我们实现了应用程序基本框架,其中有个小错误,在此先跟大家说明下。在“属性”选项卡中,我们当时添加的是DataGridView 控件,这个控件是用来显示数据表的,而专门用于属性的查询和设置的控件是PropertyGrid 控件。因此请你删除“属性”选项卡中的DataGridView 控件,再把位于“工具箱| 所有Windows 窗体|PropertyGrid ”(如果没有,右击选择“选择项”以添加此控件)控件拖到该选项卡。 在这一讲中,主要讲解菜单的添加和实现。 1、添加菜单 在设计视图中,单击菜单栏,会出现“请在此处键入”的提示,单击提示就可以键入菜单名称,如“文件”,再单击“文件”,即可输入其下拉子菜单,如下所示: Tips : 每创建一个菜单,请在其属性面板中设置Name 属性,而且不要为中文,因此Name 值将是此菜单响应函数的函数名的一部分,带中文的函数名,总是不好吧。 本讲中,我们将添加新建(New )、打开(Open )、添加数据(AddData )、保存(Save )、另存为(SaveAs )、退出(Exit )这些菜单,()内为相应的Name 属性值。 Tips: 你可以在属性面板中的Text 属性中,把菜单名设置为中英文形式,如“打开O pen ”,带下划线的O 表示此项菜单的快捷键是字母O ,设置方法是在相应字母前加上“& ”字符,如“打开&Open ”。但这种快捷键只在打开此下拉菜单时才有效,即当你单击“文件”菜单弹出下拉菜单时,按下字母O 就可以定位到“打开”菜单。 还有一种在程序运行时都有效的全局快捷键,可以在属性面板中的“ShortCutKeys ”中设置。

如何在右键菜单中添加word、excel等功能

如何在右键菜单中添加word、excel等功能 有时候重装系统或者操作不当,会发现鼠标右键新建菜单中没有word、excel等功能。如何那么在右键菜单中添加word、excel等功能?双语不用教启智园双语不用教动画片全集免费下载今天来为您分享如何在右键新建菜单中添加word、excel等功能。 (双语不用教动画片全集在线观看https://www.wendangku.net/doc/76846352.html,双语不用教动画片全集免费下载)你可以通过修改注册表来定制鼠标右键快捷菜单中的“新建”菜单所包含的项目。需要注意的是,在修改注册表以前请先将注册表备份,以免出现问题时无法恢复。 一、增加菜单项目 1.首先,决定您要增加到菜单中的文件类型,以及启动这类文件的应用程序。如果是某些在启动时会自动打开的新文件或让您可以立即使用的应用程序,如记事本、写字板或画图等,就不需要特别的准备工作。但如果是在启动时不会自动打开文件的应用程序,您必须依需求建立一个通用的文件范本,并将它保存在Windows中的ShellNew文件夹中。此文件夹在某些系统中是隐藏的,所以您可能必须先选择“查看”*“文件夹选项”,在“查看”选项卡中选取“显示所有文件”选项,单击“确定”即可。 2.选择“开始”*“运行”,输入“regedit”,打开注册表编辑器。单击“HKEY_CLASSES_ROOT”旁边的“+”号,可以看到左边窗口中有一排文件夹,都是以Windows中应用程序建立的文件的后缀名命名的(如.doc、.xls和.html等)。找出您要增加到“新建”菜单中的文件类型的后缀名,单击鼠标右键,选择“新建”*“主键”(在注册表中,每个文件夹都是一个主键),将新的主键取名为“ShellNew”。选取新建的主键,在右边视窗空白处单击鼠标右键,选择“新增”*“字符串值”。如果您使用的文件类型,其程序预设为在启动时打开空白文件,就将新字符串名称设定为“NullFile”; 如果您使用的文件类型,其程序在启动时不会自动打开空白文件的话,请将新字符串名称设定为“FileName”。双击“FileName”字符串图标(或选中后按Enter键),在“编辑字符串”对话框的“键值”文本框中输入文件类型范本的完整路径及名称。然后按确定,退出注册表编辑器。您可以立刻在“新建”菜单的文件列表中看到所做的修改。 以下是一个范例,要在桌面上或在文件夹中按右键建立新的Outlook Express 邮件。启动Outlook Express,选择“文件”*“新建”*“邮件”,再加入要放在邮件中的文字,然后选取“文件”*“另存为”,将邮件以“blank”的名称保存在\\Windows\\ShellNew文件夹中,Outlook Express 会自动为邮件加上.eml扩展名。接下来,依照前面的说明启动注册表编辑器,在HKEY_CLASSES_ROOT中找出.eml的文件夹,建立“ShellNew”主键,在此主键中新建一个字符串值,并将其名称设定为“FileName”。双击“FileName”字符串,在“编辑字符串”对话框的“键值”文本框中输入“C:\\Windows\\ShellNew\\blank.eml”(您可以自行设定路径和名称)。按下“确定”按钮,退出注册表编辑器即可。此时,您可以在桌面上按鼠标右键,选择“新建”*“Outlook Express Mail Message”(如附图所示)。桌面上就会出现一个新邮件图标,输入新邮件文件的名称并按下Enter键。双击新邮件的图标,输入邮件内容,完成之后,按下“发送”按钮即可。这一方法可用来建立电子邮件,并将邮件副本保存在Outlook Express(或其他类似的邮件程序)之外。 除了在右键菜单中添加各种功能外,有时我们会觉得右键菜单中部分功能是不需要的,这样我们就需要删除菜单项目。雅诗兰黛系列产品热销排行榜雅诗兰黛适合什么年龄为您讲讲删除菜单项目的种种方法。 (雅诗兰黛眼霜https://www.wendangku.net/doc/76846352.html,雅诗兰黛怎么样) 二、删除菜单项目 有许多种方法可以删除“新建”菜单中的文件类型列表,以下是3种方法。

MFC单文档及其简介

MFC是一个编程框架 MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序。MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法。AppWizard可以用来生成初步的框架文件。资源编辑器用于帮助直观的设计用户接口。ClassWizard用来协助添加代码到框架文件,最后,通过类库实现了应用程序特定的逻辑。 MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的。而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理。框架或者由其本身处理事件,不依赖程序员的代码,或者调用程序员的代码来处理应用程序特定的事件。 1.S DI生成 1.步骤dxq2009 首先,打开VC++6.0开发环境,然后,选择”File”菜单中的“New”子菜单,在弹出的对话框中选择“MFC AppWizard(exe)”项并在“Progect name”编辑框中输入合适的工程名字Simple1,如图,它的意思是创建一个基于MFC的应用,接着进入正式的创建过程,MFC 应用程序的创建过程有6步(基于对话框)或者6步(SDI或者MDI),下面首先介绍SDI 应用的创建过程。 (1)第一步用于选择应用的结构以及语言等。如图1,首先确定应用是否需要Doc/View Architecture Support支持,因为不使用该结构的应用不支持从磁盘文件打开文档,也没有派生于类CWnd的窗口客户区。上面3个单选按钮用于确定创建的应用类型,

包括单文档,多文档,对话框,这里选择第一个。然后从资源列表框选择应用所使用的语言种类,单击“Next”。 图1 (2)第二步为用用程序选择4项数据库支持选项之一:如图2.如果选择了数据库支持,那么单击“Data Source”按钮,选择外部的数据库表项,一般按默认即可,单击“Next”。 图2 (3)第三步选择希望包含在应用中的复合文档支持项,同时判定是否启用标准的ActiveX 资源,以及是否为应用的菜单条添加额外的自动化命令等,如图4,一般安默认,单击“Next”

相关文档
相关文档 最新文档