精华内容
下载资源
问答
  • VC6.0 MFC框架树结构上右键点击,出现一个竖菜单,再点击其中一个菜单弹出对话框,但是对话框点不了。 如果点击一下程序以外的地方,比如桌面啥的,再回来点击对话框就可以了。求问各位大神,这是什么原因啊??...
  • 如何实现vc菜单弹出对话框

    千次阅读 2011-08-17 11:51:16
    本文例子是一个典型的C++/MFC对话框程序,设置了 EX_WM_TOOLWINDOW 扩展式样,因此在标题栏左上角看不到系统菜单图标,但通过 Ctrl+Space 或者在标题栏单击鼠标右键可以调出系统菜单。 例子程序对系统菜单进行了...
     
    

    本文例子是一个典型的C++/MFC对话框程序,设置了 EX_WM_TOOLWINDOW 扩展式样,因此在标题栏左上角看不到系统菜单图标,但通过 Ctrl+Space 或者在标题栏单击鼠标右键可以调出系统菜单。


    例子程序对系统菜单进行了定制,在原有菜单基础上添加了两个菜单命令:一个是显示“关于”对话框;另一个是“退出”。之所以要加一个“退出”菜单命令,是因为例子程序改写了对话框原来默认的“关闭”菜单命令行为(Alt-F4),用来隐藏对话框。因此必须加一个程序的“退出”出口。此外,例子程序利用一个第三方的系统托盘处理类,利用系统托盘图标可以显示/隐藏对话框。下面我们就来看看用 C++/MFC 实现的细节。


    添加菜单

    首先在资源定义文件 resource.h 中定义菜单项标示,也可以在标准头文件中定义。菜单项标示必须具有唯一性。其次,Windows 对系统菜单的处理与常规菜单的处理方法是不同的,不管是缺省的菜单还是定制的菜单,它们都没有象常规菜单命令那样的消息处理例程。假设我们要添加两个定制的系统单:

    #define IDM_ABOUT 16
    #define IDM_EXIT 17
    IDM_的意思是该定义为菜单项ID。添加菜单命令是在对话框的初始化例程以及窗口创建函数(OnInitDialog(), OnCreate())中进行的。如: BOOL CBabelOnDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();

    // 在系统菜单中添加 "关于..." 和 "退出" 菜单项


    // 解决 Windows 95 中的 bug
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

    // 命令 IDs 必须在预定义的系统菜单之后
    ASSERT(IDM_ABOUTBOX < 0xF000);

    // 解决 Windows 95 中的 bug
    ASSERT((IDM_EXIT & 0xFFF0) == IDM_EXIT);

    // 命令 IDs 必须在预定义的系统菜单之后
    ASSERT(IDM_EXIT < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    pSysMenu->AppendMenu(MF_STRING,IDM_EXIT,"退出(&x)");
    pSysMenu->AppendMenu(MF_SEPARATOR);
    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, "关于(&A)...");
    ......
    }

    ......

    //other initialization
    }
    这里在添加每个菜单前都有两个 ASSERT 语句,第一个 ASSERT 的目的是修复 Windows 95 中存在的 Bug,第二个 ASSERT 保证定制的命令 IDs 是在预定义的系统菜单之后,以免发生冲突。查一下 MSDN 库的 MFC 文档关于系统菜单的描述,你会发现下面的内容: “......所有预定义的控制菜单项(也就是系统菜单)的ID号必须大于 0xF000。如果某个应用程序要添加系统菜单,
    其系统菜单的 ID 号必须小于F000。”
    接下来,用 GetSystemMenu 函数获取系统菜单指针。调用时使用参数 FALSE 获取指针。如果用 TRUE 作为参数,那么该函数会将菜单重置回缺省状态。
    如果得到的指针有效,接着调用菜单添加命令在系统菜单后面添加菜单项,传递菜单IDs以及菜单显示时所用的字符串。

    处理定制的菜单命令

    为了让这些系统菜单命令工作起来,我们不能依赖常规的菜单消息处理机制----即便菜单项相同。通常系统菜单通过 WM_SYSCOMMAND 消息处理: void CBabelOnDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    //trap our own system menu messages
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
    CAboutDlg dlgAbout;
    dlgAbout.DoModal();
    } else if ((nID & 0xFFF0)==SC_CLOSE){
    OnClose();
    } else if ((nID & 0xFFF0)==IDM_EXIT) {
    ::PostQuitMessage(0);
    }
    else {
    CDialog::OnSysCommand(nID, lParam);
    }
    }
    通过比较传入的菜单ID进行相应的处理。注意代码中又有两个“nID & 0xFFF0”,这主要也是解决 Windows 95 的 bug。如果选择“退出”,那么会向应用程序发送退出消息:::PostQuitMessage(0)。
    注意第二个条件检查:SC_CLOSE 是个预定义的菜单常量。一般它是由 Windows 处理的,因为在例子程序中我们对它进行了定制,所以必须要自己处理它。本来 SC_CLOSE 是退出程序,但例子程序我们把它的行为改写成隐藏对话框,也就是将应用变成一个托盘小图标,处理例程见 OnClose() 函数。如果传入的菜单ID不等于任何定制的菜单项,那么就让 Windows 对它进行默认处理: CDialog::OnSysCommand(nID, lParam);
    下面是几个最常用的系统菜单命令:
    菜单 说明
    SC_CLOSE 关闭 CWnd 对象
    SC_MAXIMIZE 或者 SC_ZOOM 最大化 CWnd 对象
    SC_MINIMIZE 或者 SC_ICON 最小化 CWnd 对象
    SC_MOVE 移动 CWnd 对象
    SC_RESTORE 恢复窗口的正常位置和大小
    SC_SIZE 改变 CWnd 对象大小

    其它的几个系统菜单命令一般都是在特殊情况下才使用,有关细节请参考有关 WM_SYSCOMMAND 的文档。

    修改现有的菜单命令

    我们已经看到,系统菜单本身默认的处理行为是可以改变的,除此之外,系统菜单项的描述文本也是可以改变的,甚至还可以删除它们。为了修改才单命令的描述文本,我们可以用 pSysMenu 指针调用 ModifyMenu() 函数。例如,如果想要把“关闭”菜单项改成“隐藏”,可以象下面这么做:

    pSysMenu->ModifyMenu(SC_CLOSE, MF_BYCOMMAND,IDM_HIDE, "隐藏(&H)");
    MF_BYCOMMAND 参数告诉该函数将 SC_CLOSE 解释为命令 ID。IDM_HIDE 是新的菜单 ID。最后一个参数是菜单项的说明文本。还有一种调用 ModifyMenu() 的方法是使用 菜单项索引作为参数: pSysMenu->ModifyMenu(0,MF_BYPOSITION,IDM_HIDE,"隐藏(&H)");
    第一个参数 0 表示菜单项的索引,指第一个菜单。

    删除菜单命令

    例子程序拟将去掉系统菜单中的窗口“关闭”命令,暂且不说这样做是否合适,但是我们能做到这一点: pSysMenu->RemoveMenu(SC_CLOSE,MF_BYCOMMMAND);
    pSysMenu->RemoveMenu(0,MF_BYPOSITION);
    第一行代码删除了与 SC_CLOSE 关联的菜单命令。而第二行代码表示删除系统菜单命令中的第一项。

    用这种方式修改系统菜单尽管限定了应用程序的某些行为,但对于小型应用和实用程序来说有时是很有用的,尤其是当你想要从任务栏存取菜单命令时----也就是程序在后台运行或者以最小化方式运行,右键单击任务栏图标将弹出系统菜单。

     
    展开全文
  • VC弹出对话框

    2012-11-19 11:01:06
    本文例子是一个典型的C++/MFC对话框程序,设置了 EX_WM_TOOLWINDOW 扩展式样,因此在标题栏左上角看不到系统菜单图标,但通过 Ctrl+Space 或者在标题栏单击鼠标右键可以调出系统菜单
  • vc6.0下建立MFC单一对话框,实现单击菜单项,弹出对话框
  • 本文例子是一个典型的C++/MFC对话框程序,设置了 EX_WM_TOOLWINDOW 扩展式样,因此在标题栏左上角看不到系统菜单图标,但通过 Ctrl+Space 或者在标题栏单击鼠标右键可以调出系统菜单
  • VC/MFC对话框中添加菜单栏并响应

    万次阅读 多人点赞 2015-01-13 19:06:18
    今天我写了一个科学计算器,是基于MFC对话框的,然后想要在对话框上创建一个菜单栏,并响应。。。实现弹出一些信息。 实现后的效果图: 实现步骤如下: 新建一个基于对话框MFC应用程序命名为:PopMenu ...

    今天我写了一个科学计算器,是基于MFC对话框的,然后想要在对话框上创建一个菜单栏,并响应。。。实现弹出一些信息。

    实现后的效果图:



    实现步骤如下:

    新建一个基于对话框的MFC应用程序命名为:PopMenu

    1.添加菜单栏如图。


    2.添加需要弹出的新对话框如图。


    3.在主对话框的类(CPopMenuDlg)头文件中定义一个菜单类对象m_Menu用于加载菜单

    1. CMenu m_Menu;//定义一个菜单类对象  
    CMenu m_Menu;//定义一个菜单类对象


    4.在CPopMenuDlg类的BOOL CPopMenuDlg::OnInitDialog()成员函数中添加如下代码:

    1. m_Menu.LoadMenu(IDR_MENU1);  
    2. SetMenu(&m_Menu);  
    m_Menu.LoadMenu(IDR_MENU1);
    SetMenu(&m_Menu);


    5.给要弹出的对话框创建一个类CPopDlg:


    6.给菜单项响应一个点击事件:

    ps:这里注意 类名一定要选主对话框。

    7.在菜单项的响应函数中添加执行函数,弹出新对话框:

    1. CPopDlg dlg;//定义一个新对话框的对象  
    2. dlg.DoModal();//弹出对话框  
    CPopDlg dlg;//定义一个新对话框的对象
    dlg.DoModal();//弹出对话框


    然后就是记得在主对话框前面加上新对话框类的头文件。

    1. #include "PopDlg.h"  
    #include "PopDlg.h"



    原文地址:http://blog.csdn.net/qingdujun/article/details/13770869

    展开全文
  • 在用MFC编写程序时时常需要用菜单区打开一个对话框,然后在对这个对话框进行数据输入,然后确定后读取...3:双击新建的Dialog资源对话框,会弹出一个为此对话框新建类的对话框,点击确定并完成参数设置后在确定类名为C

    在用MFC编写程序时时常需要用菜单区打开一个对话框,然后在对这个对话框进行数据输入,然后确定后读取输入的数据。这个过程如下:

    1:新建单文档MFC程序

    2:在ResourceView 中的Dialog中插入新Dialog,并为此Dialog起一个合适的名字ID_DLG_FIRST

    3:双击新建的Dialog资源对话框,会弹出一个为此对话框新建类的对话框,点击确定并完成参数设置后在确定类名为CFirstDialog

    4:在Menu菜单里新建一个菜单子项(起合适的名字和ID),双击此菜单会弹出ClassWiazd对话框,在Class name组合框中选择xxView,在Object IDs中选择设定的菜单子项的ID

    ,在Messge框中选择COMMAND消息,右侧出现Add Member Function功能条,点击后,再点击下面的编辑增添函数

    5:在跳转的函数中添加CFirstDialog dlg; dlg.DoModal();

    6:在编译之前要将所添加的对话框的头文件包含在xxView.cpp中

    编译通过。。。



    展开全文
  • // 菜单弹出对话框 button按钮代码 希望里面可以直接用主程序里面的一些变量值 void Cmydlg::OnBnClickedButton1() { // TODO: Add your control notification handler code here CString input; CString...
  • VC----MFC对话框(1)

    2016-08-24 19:53:35
    新建一个名为menu的单文档项目,在其资源选项中找到IDR_MAINFRAME即为当前菜单的资源,选中后VS2008的最右侧会显示其属性信息:Caption表示其显示的内容,Popup为真说明其为弹出菜单弹出菜单无法添加事件消息...
     在正式开始对话框的学习之前,先简单看一看菜单的操作。一个窗口具有一个菜单区,如“文件”、“编辑”、“查看”等。在MFC中编辑菜单时,我们主要使用其中的资源选项。新建一个名为menu的单文档项目,在其资源选项中找到IDR_MAINFRAME即为当前菜单的资源,选中后VS2008的最右侧会显示其属性信息:Caption表示其显示的内容,Popup为真说明其为弹出式菜单,弹出式菜单无法添加事件消息的相应。菜单的高级操作如图形标记、动态菜单等今天不会过多涉及,因为这些内容属于应用性的技术,需要的时候拿来资料一查就会用了。这里对于菜单只说明三点:一是懂的如何添加新的菜单,如何为添加的菜单添加绑定事件相应行为;二是了解MFC中各个组成类间的菜单出发事件的响应顺序;三是了解MFC资源的ID命名规则。
         在窗口上菜单触发事件时,按照以下顺序进行相应:View类-->Doc类-->Frame类-->App类;
         MFC的资源ID命名通常是:ID+类型+名称,如IDM表示菜单资源(menu),IDC表示光标资源(Cursor),IDI表示图标资源(Icon)等;
         我们添加一个菜单,绑定事件弹出对话框:


          关于菜单就先说这么多了,以后有需要的时候再来查阅资料吧。接下来是比较重要的对话框的设计。对话框属于一种特殊的控件,而所有的控件都是由CWnd类派生而来,因此对话框其实是一种特殊的窗口。对话框的作用在于接受用户输入数据,然后处理之后将结果呈现给用户。对话框可以分为两类:
    1. 模态对话框:简单来说就是弹出该对话框时程序卡在该处,无法对用户的其他操作进行响应,如word程序的“查找”操作;
    2. 非模态对话框:弹出对话框后程序继续运行,可以响应用户的其他操作,如文本程序的“查找”对话框;
         就我自己而言,当然更加喜欢可以实时响应用户的非模态对话框了。我们可以直接创建一个对话框,也可以在一个单文档MFC上添加一个对话框,这里使用第二种,新建一个单文档MFC:MyTest,而后在项目中选择“添加资源”,选择Dialog,“新建”即可得到一个对话框:



         接下来可以查看该对话框,在资源模式下的Dialog下可以看到IDD_DIALOG1,这是MFC为我们提供的默认ID,双击后可以查看属性,VS2008不能在属性中直接修改对话框的名字了,需要在初始化中使用函数实现。在MFC中,所有针对资源的操作都是通过与其关联的类实现的,为了操作IDD_DIALOG1,我们需要新建一个CDialog的子类,双击对话框,即可弹出类的添加向导,输入CTestDlg,OK之后MFC就自动添加了相应的函数和声明,生成了CTestDlg的cpp和.h文件。为了使得我们点击菜单时能够弹出对话框,我们需要为新的菜单设置事件响应绑定,方法同开始讲述的部分。MFC会自动生成添加OnDialog函数,我们需要在其中添加响应的动作代码:

    点击(此处)折叠或打开

    1. void CMyTestView::OnDialog()
    2. {
    3.     //模态对话框的创建
    4.     CTestDlg dlg;
    5.     dlg.DoModal();

    6.     // TODO: 在此添加命令处理程序代码
    7. }
          我们首先创建一个资源对象dlg,而后调用其成员函数DoModal实现模态对话框的创建与显示,注意此时的菜单都是灰色不可用的:

         如果想创建一个非模态的对话框,需要注意以下几点:
    1. 模态对话框不需要考虑成员生存期问题,因为程序是卡在一点暂停执行的;而对于非模态对话框,需要将dlg设置成更长的生存期,一种方案是添加为CMyTestView类的成员变量,另一种则是声明为指针利用动态分配写入堆内存,而堆内存也是程序的最后才释放的,这时在相应的析构函数中也要添加delete pDlg;
    2. 模态函数DoModal()负责创建和显示对话框,非模态则需要Create和ShowWindow两个函数来完成任务;
         好了,我们来看看非模态的代码:

    点击(此处)折叠或打开

    1. void CMyTestView::OnDialog()
    2. {
    3.     //模态对话框的创建
    4.     //CTestDlg dlg;
    5.     //dlg.DoModal();

    6.     //非模态对话框的创建
    7.     CTestDlg *pDlg = new CTestDlg;
    8.     pDlg->Create(IDD_DIALOG1, this);
    9.     pDlg->ShowWindow(SW_SHOW);

    10.     // TODO: 在此添加命令处理程序代码
    11. }
          我们运行一下程序,可以看到弹出对话框的同时菜单栏都是黑色可选的:
    展开全文
  • 程序运行后,在任务栏里面点右键,不会弹出类似下面的菜单: 在对话框的OnInitDialog里面添加如下语句即可: ModifyStyle(WS_BORDER,WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX); 由于是bordernone属性,...
  • VC MFC菜单栏(CMenu)控件

    千次阅读 2017-04-14 14:25:20
     菜单栏 在对话框窗口里显示菜单栏 像工具栏一样,菜单栏在按件面板里没有对应的选项,但有一个菜单控件类...如果想改菜单项文本内容的话,方法是右击要更改的菜单项,选择属性,接着会弹出这样一个对话框
  • 1、在对话框资源上右击,在弹出的快捷菜单中选择Properties命令,弹出对话框里的Menu下拉列表框中选择IDR_MENU1. 2、添加响应COMMAND消息的映射函数。 3、添加UPDATE_COMMAND_UI消息,但此时对话框不能响应这个...
  • vc6和vc2008对话框程序中加入菜单

    千次阅读 2012-12-21 01:21:05
    1.VC6 首先,和其他的一些特性有些不一样:不管是VC6还是2008,在Dialogue的MFC Wizard中是找不到关于加菜单的选项的。只能将工程创建了之后再加。...(3) 在对话框资源中单击鼠标右键,在弹出
  • vc创建弹出菜单 (转载)

    千次阅读 2006-01-10 18:58:00
    首先,在VC中新建一个空的“Win32 Application”工程,然后,把MFC的源文件都加入到工程中,即可在VC中实现以上功能。 具体操作过程如下: 运行VC, 选择“File”菜单中的“New”; 在出现的对话框中选择“Win32 ...
  • (转载)vc创建弹出菜单

    千次阅读 2005-10-21 09:20:00
    首先,在VC中新建一个空的“Win32 Application”工程,然后,把MFC的源文件都加入到工程中,即可在VC中实现以上功能。 具体操作过程如下: 运行VC, 选择“File”菜单中的“New”; 在出现的对话框中选择“Win32 ...
  • 思路是这样的,先在资源面板里添加一个menu资源,编辑成自己想要的,完成以后在需要右键单击触发的地方添加右键单击事件,代码里写入弹出这个 menuCMenu m,*pm; if(!m.LoadMenu(IDR_MENU1))  MessageBox(_T("err...
  • mfc 入门 vc

    2018-07-26 11:50:29
        以下是我从其他网站中学的内容,后有相应的网站学习链接地址,可供学习 1.选择菜单项File-&...Project,弹出“New Project”对话框。  2.左侧面板中Installed Templated的Visual C++下选择...
  • MFC.BSC(VC 6.0)

    热门讨论 2009-03-24 20:38:46
    然后在主菜单里选Tool/Source Browser,会弹出一个对话框,里面包含两个 窗口。第一个窗口是Identifier,你可以在这里输入函数名,类名,预定义名, 宏名,文件名。 如果你在第一个窗口里输入了函数名,类名,...
  • 菜单Build->SetActiveConfigure,在弹出对话框中选择Win32Release,点OK,然后 菜单project->setting ,在弹出对话框的General属性页的Microsoft Foundation classes 下拉列表中选择User MFC in static Library...
  • 弹出OK对话框后就可以用鼠标在VIEW区域画图了。当然可以开  多个客户,观察效果。  服务器端程序:DRAWSERV:  DCOM服务器程序,不能直接运行,你可以通过reg.bat来注册。注册完,还需要到  控制面板/服务/...
  • vc-mfc编程实例.rar

    热门讨论 2010-08-27 15:32:21
    6.10 例21 创建弹出菜单 117 第7章 工具栏和状态栏 120 7.1 例22 使用工具栏编辑器 120 7.2 例23 启用和禁用工具栏按钮 122 7.3 例24 为工具栏按钮添加字 123 7.4 例25 非标准工具栏大小 128 7.5 例26 保持工具栏...
  • VC修改应用程序图标(MFC好使)

    千次阅读 2008-04-24 16:18:00
    用VC++搞定应用软件图标 在公司里...第一步:启动VC++第二步:启动成功后,在FILE菜单下选择OPEN,弹出OPEN对话框后,在OPEN对话框上的OPEN AS上选择类型为Resource(此步最为关键)第三步:选择文件类型为*.*
  • 要在Photoshop中自定义工具栏,我们使用“ 自定义工具栏”对话框。要打开它,请转到屏幕顶部菜单栏中的“ 编辑”菜单,然后...然后,从弹出菜单中选择“ 编辑工具栏 ”:右键单击(Win)/按住Control单击(Mac)在El...
  • VC做视频播放器

    2012-11-21 09:17:20
    1.在VC++集成开发环境中,选择菜单File|New,弹出New对话框。 2. 在Projects选项卡中选择MFC AppWizard(exe),并在Location项中输入“D:\Samples”。 3.在Project name中输入“ CTLY2412”,项中的内容自动...
  • 弹出对话框;类的类型下拉选中一般类;输入类名;自己生成文件名;没有基类; 添加之后如下; VC环境生成的ant类头文件; VC环境生成的ant类CPP文件; 下面来做一个天线类;ant; 头文件添加如下; class ant {...

空空如也

空空如也

1 2 3 4 5
收藏数 98
精华内容 39
关键字:

mfc菜单弹出对话框vc