MFC中的菜单项怎么与另一个对话框(窗口)连接

piaoivy 2011-04-13 11:13:02
本人是新手,才学VC++ 6.0半个月,碰到一些问题,可能表达不是很清楚
要实现的功能是在一个窗口中单击一个菜单项,就会弹出一个对话框
先在此谢谢各位大大的帮忙!~~
可能这是简单的问题,但希望了解的大大能不吝赐教,越详细越好了!!!~~~~
...全文
1913 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
asmallball 2011-04-16
  • 打赏
  • 举报
回复
www.enet.com.cn/eschool/zhuanti/vc++/ 看看这个视频教学吧 我也是初学者 很有用的 看了你就明白很多了。。
piaoivy 2011-04-14
  • 打赏
  • 举报
回复
在其他几个类中都能运行出来,这说明了什么



[Quote=引用 17 楼 kejian1986 的回复:]
引用 14 楼 tt2com 的回复:
引用 13 楼 piaoivy 的回复:
void CMYDLG::OnMenuitem32771()
{
// TODO: Add your command handler code here
CMYDLG m_dlg;
m_dlg.DoModal();
}
CMYDLG是我新建的类,而且我头文件也加了#include"MYDLG.h"
……
[/Quote]
piaoivy 2011-04-14
  • 打赏
  • 举报
回复
在CView类中可以运行出来,多亏高手提点

[Quote=引用 17 楼 kejian1986 的回复:]
引用 14 楼 tt2com 的回复:
引用 13 楼 piaoivy 的回复:
void CMYDLG::OnMenuitem32771()
{
// TODO: Add your command handler code here
CMYDLG m_dlg;
m_dlg.DoModal();
}
CMYDLG是我新建的类,而且我头文件也加了#include"MYDLG.h"
……
[/Quote]
kejian1986 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 tt2com 的回复:]
引用 13 楼 piaoivy 的回复:
void CMYDLG::OnMenuitem32771()
{
// TODO: Add your command handler code here
CMYDLG m_dlg;
m_dlg.DoModal();
}
CMYDLG是我新建的类,而且我头文件也加了#include"MYDLG.h"
我是基于单文档里的,点击菜单按钮出现一个对……
[/Quote]

估计是的 在用Class Wizard添加消息的时候,在中间偏右一点的位置,注意类的选择,比如CAboutDlg,CView,CFrame等
piaoivy 2011-04-14
  • 打赏
  • 举报
回复

这是MYDLG.cpp里面的代码
// MYDLG.cpp : implementation file
//

#include "stdafx.h"
#include "1111111.h"
#include "MYDLG.h"
#include "MYDLG.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMYDLG dialog


CMYDLG::CMYDLG(CWnd* pParent /*=NULL*/)
: CDialog(CMYDLG::IDD, pParent)
{
//{{AFX_DATA_INIT(CMYDLG)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}


void CMYDLG::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMYDLG)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMYDLG, CDialog)
//{{AFX_MSG_MAP(CMYDLG)
ON_COMMAND(ID_MENUITEM32771, OnMenuitem32771)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMYDLG message handlers

void CMYDLG::OnMenuitem32771()
{
// TODO: Add your command handler code here
CMYDLG m_dlg;
if(m_dlg.DoModal())
{
}
}


这是MYDLG.h里面的代码
#if !defined(AFX_MYDLG_H__16D634D6_E2BF_4176_AC93_EE5CB727D48F__INCLUDED_)
#define AFX_MYDLG_H__16D634D6_E2BF_4176_AC93_EE5CB727D48F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// MYDLG.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CMYDLG dialog

class CMYDLG : public CDialog
{
// Construction
public:
CMYDLG(CWnd* pParent = NULL); // standard constructor

// Dialog Data
//{{AFX_DATA(CMYDLG)
enum { IDD = IDD_DIALOG1 };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA


// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMYDLG)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:

// Generated message map functions
//{{AFX_MSG(CMYDLG)
afx_msg void OnMenuitem32771();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MYDLG_H__16D634D6_E2BF_4176_AC93_EE5CB727D48F__INCLUDED_)


我感觉我加的消息函数位置不对,我加在CMYDLG类中了,(CMYDLG是我后来自己创建的新类),我是基于单文档创建的,不是基于对话框创建的

[Quote=引用 14 楼 tt2com 的回复:]
引用 13 楼 piaoivy 的回复:
void CMYDLG::OnMenuitem32771()
{
// TODO: Add your command handler code here
CMYDLG m_dlg;
m_dlg.DoModal();
}
CMYDLG是我新建的类,而且我头文件也加了#include"MYDLG.h"
我是基于单文档里的,点击菜单按钮出现一个对……
[/Quote]
kejian1986 2011-04-14
  • 打赏
  • 举报
回复
楼主可以看看孙鑫的视频学习 一个星期可以看完 你会明白很多。
tt2com 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 piaoivy 的回复:]
void CMYDLG::OnMenuitem32771()
{
// TODO: Add your command handler code here
CMYDLG m_dlg;
m_dlg.DoModal();
}
CMYDLG是我新建的类,而且我头文件也加了#include"MYDLG.h"
我是基于单文档里的,点击菜单按钮出现一个对话框。
是不是我添加的消息函数位置不对啊……
[/Quote]
吧你的BEGIN_MESSAGE_MAP 贴出来
疯狂-的-蜗牛 2011-04-13
  • 打赏
  • 举报
回复
这样实现:在你的窗口类中添加一个成员变量:CMyDlg m_dlg;(CMyDlg为你要打开的对话框类),然后再菜单响应函数里面加上:m_dlg.DoModal();
HowToP2p 2011-04-13
  • 打赏
  • 举报
回复
菜单项的命令响应中
CYourDlg dlg;
dlg.DoModal()
piaoivy 2011-04-13
  • 打赏
  • 举报
回复

void CMYDLG::OnMenuitem32771()
{
// TODO: Add your command handler code here
CMYDLG m_dlg;
m_dlg.DoModal();
}
CMYDLG是我新建的类,而且我头文件也加了#include"MYDLG.h"
我是基于单文档里的,点击菜单按钮出现一个对话框。
是不是我添加的消息函数位置不对啊。
谢谢------


[Quote=引用 7 楼 leotody 的回复:]

引用 6 楼 piaoivy 的回复:

我试了,运行没有错误,为什么点击菜单项没反应,没有出现相应的对话框
上代码吧
[/Quote]
安乐风流 2011-04-13
  • 打赏
  • 举报
回复
把你的对话框的属性中的Visiable勾上 stytle 为popup
Devil26 2011-04-13
  • 打赏
  • 举报
回复
最简单的就是直接在菜单函数里添加:MessageBox("");
或者你先创建一个Dialog,然后双击这个对话框创建新类,将头文件添加到菜单函数前,然后用新类创建一个对象dlg,调用DoModal函数
Xx哼哼xX 2011-04-13
  • 打赏
  • 举报
回复
先创建个dialog类


mydlg.h

#pragma once
#include "resource.h"

class CMyDlg :
public CDialog
{
public:
CMyDlg(CWnd* pParent = NULL);
enum{ IDD = IDD_DIALOG1};

DECLARE_DYNCREATE(CMyDlg)

protected:
DECLARE_MESSAGE_MAP()
virtual void DoDataExchange(CDataExchange* pDX);
virtual BOOL OnInitDialog();
};

mydlg.cpp

#include "StdAfx.h"
#include "MyDlg.h"

IMPLEMENT_DYNCREATE ( CMyDlg, CDialog )

CMyDlg::CMyDlg(CWnd* pParent /* = NULL */)
:CDialog(CMyDlg::IDD)
{

}

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)

END_MESSAGE_MAP()

void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BOOL CMyDlg::OnInitDialog()
{
return CDialog::OnInitDialog();
}



然后在你的事件中添加


CMyDlg mydlg;
if (mydlg.DoModal())
{
//Do something
}
tt2com 2011-04-13
  • 打赏
  • 举报
回复
我建议你把孙鑫的视频好好看看。
你点击没反应,看看菜单消息有没对应你的菜单函数
guangyou 2011-04-13
  • 打赏
  • 举报
回复
在点击菜单按钮响应事件那设个断点,调试一下就知道原因了。要不就上代码。我们帮你看看
leotody 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 piaoivy 的回复:]

我试了,运行没有错误,为什么点击菜单项没反应,没有出现相应的对话框
[/Quote]上代码吧
piaoivy 2011-04-13
  • 打赏
  • 举报
回复
我试了,运行没有错误,为什么点击菜单项没反应,没有出现相应的对话框
zyrr159487 2011-04-13
  • 打赏
  • 举报
回复
①做好你的对话框,然后添加类,以CDialog类为基类生成你的对话框类CXXDLG
②在菜单项上右键添加单击事件,在响应函数中写下
CXXDLG dlg;
dlg.doModal();
注:#include"XXDLG.h"头文件
xmlovedm 2011-04-13
  • 打赏
  • 举报
回复
有两种方式一种是模态的 一种是非模态的 分别用DoModal 和 (Create和showWindow) 你随便找本vc的书看看就Ok了
leotody 2011-04-13
  • 打赏
  • 举报
回复
先创建一个Menu,然后在对话框属性中关联这个Menu,再用ClassWizard响应Menu控件的COMMAND消息,在消息响应函数里面调用弹出对话框的DoModal()

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧