求很简单的一个句子... 有个对话框 建立了一个类 class CDlg1 : public CFormView在这个对话框有个“退出”按钮, 想按下这个按钮就退出这个对话框 就象class CDlg2:public CDialog 的那种 CDialog::OnCancel()一样的 要怎么写呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建立消息响应函数,调用OnCancel方法。或者把你这个退出按钮的ID改为Cancel按钮的ID OnCancel()不行,就用OnOK(),再不行就用DestroyWindow(),总行了吧。 CDlg1应该从CDialog派生把?然后用CDialog::OnCancel()才可以的class CDlg1 : public CDialog CloseWindow();或 DestroyWindow();或 PostMessage(WM_CLOSE);或 SendMessage(WM_CLOSE);或 ExitProcess(0);//这个函数将推出整个程序CFormView本身没有OnOK和OnCancel函数。 SendMessage(WM_CLOSE, 0, 0); CWnd::OnClose();SendMessage(WM_CLOSE, 0, 0);CloseWindow();或 DestroyWindow();或 PostMessage(WM_CLOSE);或 SendMessage(WM_CLOSE);都试过了 不行 只有 ExitProcess这个有反应 不过整个程序都退出来了 晕晕哦 到底要怎么才能把那个子界面窗口关闭啊??? 日。你把程序发这来。我关不掉给你打。[email protected] // MainFrm.h : CMainFrame 类的接口//#include "ChildFrm.h"#pragma onceclass CMainFrame : public CMDIFrameWnd{ DECLARE_DYNAMIC(CMainFrame)public: CMainFrame();// 属性public: CChildFrame *m_DlgView1,*m_DlgView2;***************************************************// MainFrm.cpp : CMainFrame 类的实现//#include "stdafx.h"#include "MOD.h"#include "MainFrm.h"#include ".\mainfrm.h"#include "ChildFrm.h"#include "DlgView1.h"#include "DlgView2.h"// CMainFrameIMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) ON_WM_CREATE() ON_COMMAND(ID_MENU_OPENDLGVIEW1, OnMenuOpendlgview1) ON_COMMAND(ID_MENU_OPENDLGVIEW2, OnMenuOpendlgview2)END_MESSAGE_MAP()// CMainFrame 构造/析构CMainFrame::CMainFrame(){ // TODO: 在此添加成员初始化代码 m_DlgView1=NULL; m_DlgView2=NULL;}// CMainFrame 消息处理程序void CMainFrame::OnMenuOpendlgview1() //这个和下面一个是在菜单栏上的事件{ // TODO: 在此添加命令处理程序代码 if(m_DlgView1!=NULL) //如果样式窗口1已经打开 激活他.否则动态创建样式窗口1. { m_DlgView1->MDIActivate(); return; } m_DlgView1=new CChildFrame(); CCreateContext context; context.m_pNewViewClass=RUNTIME_CLASS(CDlgView1); if(!m_DlgView1->LoadFrame(IDI_ICON1,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context)) return; m_DlgView1->ShowWindow(SW_SHOWMAXIMIZED); m_DlgView1->InitialUpdateFrame(NULL,true);}void CMainFrame::OnMenuOpendlgview2(){ // TODO: 在此添加命令处理程序代码 if(m_DlgView2!=NULL) //如果样式窗口1已经打开 激活他.否则动态创建样式窗口1. { m_DlgView2->MDIActivate(); return; } m_DlgView2=new CChildFrame(); CCreateContext context; context.m_pNewViewClass=RUNTIME_CLASS(CDlgView2); if(!m_DlgView2->LoadFrame(IDI_ICON2,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context)) return; m_DlgView2->ShowWindow(SW_SHOWMAXIMIZED); m_DlgView2->InitialUpdateFrame(NULL,true);} 这个CDlgView1类和CDlgView2类是在MDI工程里添加了对话框 然后生成的类(把对话框的Border改成Thin , style改成child)class CDlgView1 : public CFormView{ DECLARE_DYNCREATE(CDlgView1)protected: CDlgView1(); // 动态创建所使用的受保护的构造函数 virtual ~CDlgView1();public: enum { IDD = IDD_DIALOG1 };************************************************BOOL CMODApp::InitInstance(){ // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControls()。否则,将无法创建窗口。 InitCommonControls(); CWinApp::InitInstance(); // 初始化 OLE 库 if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; } AfxEnableControlContainer(); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU) // 创建主 MDI 框架窗口 CMainFrame* pMainFrame = new CMainFrame; if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MODTYPE)) return FALSE; m_pMainWnd = pMainFrame; // 仅当具有后缀时才调用 DragAcceptFiles // 在 MDI 应用程序中,这应在设置 m_pMainWnd 之后立即发生 // 分析标准外壳命令、DDE、打开文件操作的命令行 CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // 调度在命令行中指定的命令。如果 // 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。 if (!ProcessShellCommand(cmdInfo)) return FALSE; // 主窗口已初始化,因此显示它并对其进行更新 pMainFrame->ShowWindow(m_nCmdShow); pMainFrame->UpdateWindow(); return TRUE;}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++就这些了 其他都是默认的 在CDlgView1对应的对话框添加了一个按钮 然后想点这个按钮关闭这个对话框 怎么也关不掉 晕死~ OnlyHappy(说好不打脸) 代码已经发到你邮箱了 帮我关掉那个窗口啊 谢谢:)大虾们继续 原来以为自己还可以 米想到一个对话框都关不来_-## 不好意思。刚刚看到。已经搞好了。发到你email了。 晕哦 没收到你的信啊 [email protected]能麻烦再发一次吗 谢谢了 void CDlgView2::OnBnClickedOk(){ // TODO: 在此添加控件通知处理程序代码 GetParent()->SendMessage(WM_CLOSE);}现在能关掉了 可是 关掉后再打开 就有错误 到底什么问题呢 这样子程序不稳定啊 还以为你睡眠了呢。你的程序在主窗口中为ChildFrame保存为一个指针。这个指针dlgview1和另外一个对话框被关闭的时候没有重新被赋值。故出错。我重新改了一下。你查一下Email吧 你主窗口中有m_dlgView1 和m_dlgView2.这些值在窗口关闭的时候还是原来的值。这时重新打开的时候会访问他们。所以在你的DlgView1和DlgView2被关闭的时候。应该通知主窗口一下。主窗口接收到了消息后重新设置这2个指针为NULL。这时候就不会出现问题了。 可以结贴了 结帖前再能问个问题 _-##我的class CDlgView1 : public CFormView里的按钮事件为什么非要取得父窗口句柄才能关掉呢?GetParent()->SendMessage(WM_CLOSE); 这里取得的父句柄又代表哪个窗口呢? Debug Assertion failed! 关于对话框的一个小问题 怎样在flexgrid的cell中插入图片呢?? 通过PostMessage 和 SendMessage 发送键盘消息和真正按键盘得到的消息一样吗? 有没有熟悉CDataGrid这个类的,进来看下! 我这段代码怎么不对? 这样一个常量如何写:? 本人刚开始学VC,请教各位达人一个非常基础的问题,谢谢了! 一个非常急非常急的问题!!!关于递归,请大家关注一下 MFC中如何转化整数到字符? 急!!访问网页的数据包是什么?如何修改它 VC菜鸟的难题,各位帮忙看看~
class CDlg1 : public CDialog
或 DestroyWindow();
或 PostMessage(WM_CLOSE);
或 SendMessage(WM_CLOSE);
或 ExitProcess(0);//这个函数将推出整个程序
CFormView本身没有OnOK和OnCancel函数。
SendMessage(WM_CLOSE, 0, 0);
CloseWindow();
或 DestroyWindow();
或 PostMessage(WM_CLOSE);
或 SendMessage(WM_CLOSE);
都试过了 不行 只有 ExitProcess这个有反应 不过整个程序都退出来了
晕晕哦 到底要怎么才能把那个子界面窗口关闭啊???
[email protected]
//#include "ChildFrm.h"#pragma once
class CMainFrame : public CMDIFrameWnd
{
DECLARE_DYNAMIC(CMainFrame)
public:
CMainFrame();// 属性
public:
CChildFrame *m_DlgView1,*m_DlgView2;
***************************************************
// MainFrm.cpp : CMainFrame 类的实现
//
#include "stdafx.h"
#include "MOD.h"#include "MainFrm.h"
#include ".\mainfrm.h"
#include "ChildFrm.h"
#include "DlgView1.h"
#include "DlgView2.h"
// CMainFrameIMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
ON_WM_CREATE()
ON_COMMAND(ID_MENU_OPENDLGVIEW1, OnMenuOpendlgview1)
ON_COMMAND(ID_MENU_OPENDLGVIEW2, OnMenuOpendlgview2)
END_MESSAGE_MAP()// CMainFrame 构造/析构CMainFrame::CMainFrame()
{
// TODO: 在此添加成员初始化代码
m_DlgView1=NULL;
m_DlgView2=NULL;
}// CMainFrame 消息处理程序
void CMainFrame::OnMenuOpendlgview1() //这个和下面一个是在菜单栏上的事件
{
// TODO: 在此添加命令处理程序代码
if(m_DlgView1!=NULL) //如果样式窗口1已经打开 激活他.否则动态创建样式窗口1.
{
m_DlgView1->MDIActivate();
return;
} m_DlgView1=new CChildFrame();
CCreateContext context;
context.m_pNewViewClass=RUNTIME_CLASS(CDlgView1);
if(!m_DlgView1->LoadFrame(IDI_ICON1,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context))
return;
m_DlgView1->ShowWindow(SW_SHOWMAXIMIZED);
m_DlgView1->InitialUpdateFrame(NULL,true);
}void CMainFrame::OnMenuOpendlgview2()
{
// TODO: 在此添加命令处理程序代码
if(m_DlgView2!=NULL) //如果样式窗口1已经打开 激活他.否则动态创建样式窗口1.
{
m_DlgView2->MDIActivate();
return;
} m_DlgView2=new CChildFrame();
CCreateContext context;
context.m_pNewViewClass=RUNTIME_CLASS(CDlgView2);
if(!m_DlgView2->LoadFrame(IDI_ICON2,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context))
return;
m_DlgView2->ShowWindow(SW_SHOWMAXIMIZED);
m_DlgView2->InitialUpdateFrame(NULL,true);}
这个CDlgView1类和CDlgView2类是在MDI工程里添加了对话框 然后生成的类(把对话框的Border改成Thin , style改成child)
class CDlgView1 : public CFormView
{
DECLARE_DYNCREATE(CDlgView1)protected:
CDlgView1(); // 动态创建所使用的受保护的构造函数
virtual ~CDlgView1();public:
enum { IDD = IDD_DIALOG1 };
************************************************BOOL CMODApp::InitInstance()
{
// 如果一个运行在 Windows XP 上的应用程序清单指定要
// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
//则需要 InitCommonControls()。否则,将无法创建窗口。
InitCommonControls(); CWinApp::InitInstance(); // 初始化 OLE 库
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU)
// 创建主 MDI 框架窗口
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MODTYPE))
return FALSE;
m_pMainWnd = pMainFrame;
// 仅当具有后缀时才调用 DragAcceptFiles
// 在 MDI 应用程序中,这应在设置 m_pMainWnd 之后立即发生
// 分析标准外壳命令、DDE、打开文件操作的命令行
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// 调度在命令行中指定的命令。如果
// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// 主窗口已初始化,因此显示它并对其进行更新
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
return TRUE;
}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++就这些了 其他都是默认的 在CDlgView1对应的对话框添加了一个按钮 然后想点这个按钮关闭这个对话框 怎么也关不掉 晕死~
代码已经发到你邮箱了 帮我关掉那个窗口啊 谢谢:)
大虾们继续 原来以为自己还可以 米想到一个对话框都关不来_-##
[email protected]
能麻烦再发一次吗 谢谢了
{
// TODO: 在此添加控件通知处理程序代码
GetParent()->SendMessage(WM_CLOSE);
}
现在能关掉了 可是 关掉后再打开 就有错误 到底什么问题呢
这样子程序不稳定啊
我的
class CDlgView1 : public CFormView里的按钮事件为什么非要取得父窗口句柄才能关掉呢?
GetParent()->SendMessage(WM_CLOSE); 这里取得的父句柄又代表哪个窗口呢?