mfc弹出非模态对话框出错

mfc弹出非模态对话框,然后重载非模态对画框的onok函数,在其中destroywindow,并重载postncdestroy中delete非模态对话框类指针,这样没有问题,为什么在destroywindow前加弹出一个Afx对话框,运行时会出现问题

mfc

1个回答

注:如果你不是像以上那样临时new一个的话,比如你可能会让它成为一个类成员对象,然后在初始化的时间创建它,在类销毁时自动销毁此模态对话框的话,那么就不应该在PostNcDestroy处delete它,也不应当DestroyWindow()它,会引发内存操作错误。因为此时它并不是new出来的。比如:在类A中有一个成员变量为CMyDlg m_mMyDlg;  然后在类构造函数中调用m_mMyDlg.Create( IDC_MY_DLG); 

作者:shanql
来源:CSDN
原文:https://blog.csdn.net/s634772208/article/details/46404761

看下,对你有没有用

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MFC非模态对话框弹出问题
一:[img=https://img-bbs.csdn.net/upload/201404/22/1398158300_629372.png][/img]rn如图,右边的框中有多少项我点击确定就会弹出多少个非模态对话框,下图红框中是代码rn[img=https://img-bbs.csdn.net/upload/201404/22/1398158753_126532.png][/img],现在的问题是比如现在是两项,我点击后弹出两个对话框,可是在这两个对话框没有关闭的的条件下再点击确定又弹出两个出来了,也就是一直在new,我想知道怎么记录我已经弹出的对话框指针,保证重复点击确定不会再弹出非模态对话框。rn二:比如一次只弹出一个非模态对话框,rn[img=https://img-bbs.csdn.net/upload/201404/22/1398158994_910304.png][/img]rn一开始判断如果指针是空的,就会创建一个并弹出,弹出后不关闭点击按钮就不会弹出,可是这样写为啥第一个都弹不出来呀?也就是指针一开始都不是空的,我在类里面定义的而且也没有在别的地方new呀?
MFC中如何弹出非模态对话框
MFC中如何点击按钮时就弹出一个非模态对话框,点击关闭按钮时就关闭它。
MFC弹出非模态对话框 指针与对象
CTestDialog *pTestDlg = new CTestDialog();rnpTestDlg->Create(IDD_DIALOG_TEST, this);rnpTestDlg->ShowWindow(SW_SHOW);rn///下面三行错误rn//CTestDialog dlg1;rn//dlg1.Create(IDD_DIALOG_TEST, NULL);rn//dlg1.ShowWindow(SW_SHOW);rn为什么前三行不能用后三行代替?rn用后三行,弹出的对话框闪了一下就消失了rn用前三行能正确弹出对话框
MFC单文档弹出非模态对话框绘图
利用MFC实现单文档菜单响应,生成并显示非模态对话框,并对其进行实时地销毁,对话框还实现了绘图的功能(画直线),一例多用,自己花了一上午搞出来的
非模态对话框出错,非模态对话框
我先说一下我创建非模态对话框的思路,rn资源视图中创建一个对话框并创建类Coption,在菜单中加入一个按键coption,rn在CChildView类中创建一个Coption类对象指针,在CChildView类中用Coption类对象指针创建非模态对话框,并判断Coption类对象指针是否为null,如果不为null,则不创建,将焦点给非模态对话框就行,创建的时候,将CChildView类作为Coption类构造参数传入Coption类中,当非模态对话框点击取消时,销毁非模态对话框,并发送消息给CChildView类,让他将Coption类对象指针赋值为null,否则非模态对话框只能出来一次,但是现在发送消息会报错,rn下面贴出四个文件代码:rnrn```rnCoption.h:rn#pragma oncernrnrn// Coption 对话框rnrnclass Coption : public CDialogExrnrn DECLARE_DYNAMIC(Coption)rnrnpublic:rn Coption(CWnd* pParent = nullptr); // 标准构造函数rn Coption(CView* pview); // 标准构造函数rn virtual ~Coption();rnrn// 对话框数据rn#ifdef AFX_DESIGN_TIMErn enum IDD = IDD_DIALOG1 ;rn#endifrnrnprotected:rn virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持rnrn DECLARE_MESSAGE_MAP()rnpublic:rn afx_msg void OnBnClickedCancel();rn virtual void PostNcDestroy();rnprivate:rn CView* p_view;rnpublic:rn afx_msg void OnBnClickedOk();rn;rnrn```rnCoption.cpp:rn// Coption.cpp: 实现文件rn//rnrn#include "stdafx.h"rn#include "MFCApplication5.h"rn#include "Coption.h"rn#include "afxdialogex.h"rnrnrn// Coption 对话框rnrnIMPLEMENT_DYNAMIC(Coption, CDialogEx)rnrnCoption::Coption(CWnd* pParent /*=nullptr*/)rn : CDialogEx(IDD_DIALOG1, pParent)rnrnrnrnrnCoption::Coption(CView* pview /*=nullptr*/)rnrn p_view = pview;rnrnrnCoption::~Coption()rnrnrnrnrnvoid Coption::DoDataExchange(CDataExchange* pDX)rnrn CDialogEx::DoDataExchange(pDX);rnrnrnrnBEGIN_MESSAGE_MAP(Coption, CDialogEx)rn ON_BN_CLICKED(IDCANCEL, &Coption::OnBnClickedCancel)rn ON_BN_CLICKED(IDOK, &Coption::OnBnClickedOk)rnEND_MESSAGE_MAP()rnrnrn// Coption 消息处理程序rnrnrnvoid Coption::OnBnClickedCancel()rnrn // TODO: 在此添加控件通知处理程序代码rn rn //CDialogEx::OnCancel();rn DestroyWindow();rnrnrnrnrnvoid Coption::PostNcDestroy()rnrn // TODO: 在此添加专用代码和/或调用基类rn CDialogEx::PostNcDestroy();rnrn p_view->SendMessage(WM_GOODBYE, 0,0); //屏蔽这一行就不会报错 rnrnrnrnrnrnvoid Coption::OnBnClickedOk()rnrn // TODO: 在此添加控件通知处理程序代码rn //CDialogEx::OnOK();rn DestroyWindow();rnrnrnrn```rnCChildView.cpp:rnrn// ChildView.cpp: CChildView 类的实现rn//rnrn#include "stdafx.h"rn#include "MFCApplication5.h"rn#include "ChildView.h"rn#include "resource.h" // 主符号rnrn#ifdef _DEBUGrn#define new DEBUG_NEWrn#endifrnrnrn// CChildViewrnrnCChildView::CChildView()rnrn m_option = NULL;rnrnrnrnCChildView::~CChildView()rnrnrnrnrnBEGIN_MESSAGE_MAP(CChildView, CWnd)rn ON_WM_PAINT()rn ON_COMMAND(ID_32771, &CChildView::On32771)rn ON_MESSAGE(WM_GOODBYE,ON_GOODBYE)rnEND_MESSAGE_MAP()rn rnLRESULT CChildView::ON_GOODBYE(WPARAM wparam, LPARAM lparam)rnrn /*delete m_option;*/rn m_option = NULL;rn rn return 0;rn rnrn// CChildView 消息处理程序rnrnBOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) rnrn if (!CWnd::PreCreateWindow(cs))rn return FALSE;rnrn cs.dwExStyle |= WS_EX_CLIENTEDGE;rn cs.style &= ~WS_BORDER;rn cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, rn ::LoadCursor(nullptr, IDC_ARROW), reinterpret_cast(COLOR_WINDOW+1), nullptr);rnrn return TRUE;rnrnrnvoid CChildView::OnPaint() rnrn CPaintDC dc(this); // 用于绘制的设备上下文rn rn // TODO: 在此处添加消息处理程序代码rn rn // 不要为绘制消息而调用 CWnd::OnPaint()rnrnrnrnrnvoid CChildView::On32771()rnrn if (NULL==m_option)rn rn /*SetFocus();rn MessageBox(_T("m_option不为空"));*/rn m_option = new Coption;rn m_option->Create(IDD_DIALOG1, this);rn MessageBox(_T("m_option为空"));rn rn rn rn m_option->ShowWindow(SW_SHOW);rn rn rn // TODO: 在此添加命令处理程序代码rnrnrnrn```rnCChildView.h:rnrn// ChildView.h: CChildView 类的接口rn//rnrnrn#pragma oncern#include"Coption.h"rnrn// CChildView 窗口rnrnclass CChildView : public CWndrnrn// 构造rnpublic:rn CChildView();rnrn// 特性rnpublic:rnrn// 操作rnpublic:rnrn// 重写rn protected:rn virtual BOOL PreCreateWindow(CREATESTRUCT& cs);rnrn// 实现rnpublic:rn virtual ~CChildView();rnrn // 生成的消息映射函数rnprotected:rn afx_msg void OnPaint();rn DECLARE_MESSAGE_MAP()rnprotected:rn Coption* m_option;rnpublic:rn afx_msg void On32771();rn afx_msg LRESULT ON_GOODBYE(WPARAM wparam, LPARAM lparam);rn;rnrnrn```rn报错如下:rn![图片说明](https://img-ask.csdn.net/upload/201908/15/1565872965_493989.png)rnrn如果实在没人愿意回答,讲一下编写非模态对话框心得也行
MFC Regular Dll中如何弹出非模态对话框??
参考http://blog.csdn.net/hailongchang/archive/2006/12/26/1462316.aspx此文章时,按照作者思路遇到些问题.rnpDlg在什么地方初始化??rnrn如果有其它的方法也可以说下,谢谢大家
MFC非模态对话框
功能:实现点击菜单,弹出一对话框,点击菜单XX-XA,弹出XX-XA设置对话框(通过非模态对话框创建) 过程: 在菜单里面加入XX-XA; 查看该菜单所在的类; 在该类里面,给该菜单添加消息映射,COMMAND消息对应OnXxxa()方法; 将消息与弹出的对话框关联起来:即点击菜单,弹出XX-XA对话框 通过下面函数来实现: 此函数将菜单和对话框连接起来 。。。 void 
【MFC】非模态对话框
1.打开VS2015 MFC 2.打开工具箱新建按钮button1 3.插入资源dialog1 4.dialog1添加类自动生成NonModal.h,NonModal.cpp 5.#include "NonModal.h"添加至MFCApplication1Dlg.h 6.MFCApplication1Dlg.h中定义NonModal类型的指针变量 class CMFCApplic
mfc非模态对话框
对话框点击按钮弹出新对话框并输入数据到原对话框上然后立即显示出来
非模态对话框出错
我创建非模态对话框代码这样的rnif(!IsWindow(dlg1.GetSafeHwnd()))rn dlg1.Create(IDD_MONITORS_DIALOG1,GetDesktopWindow());rndlg1.ShowWindow(SW_SHOW);rnrn然后那个弹出的对话框里有原来有个CEdit控件,这样是没问题。但我把换成CRichEditControl控件后只要点打开对话框rn程序就崩溃了,调试发现是执行到dlg1.ShowWindow(SW_SHOW);这里就错了,请问这是什么原因?难道非模态对话框不支持rnCRichEditControl。我该怎么改才好
不能弹出非模态对话框
代码如下:[code=JScript]rn rnrn [/code]rn能弹出模态对话框,但不能弹出非模态对话框.请问是怎么回事?rn系统为ubuntu,浏览器为 firefox 3.6,在chrome下也不能弹出非模态对话框。
如何弹出一个非模态对话框
我弹出非模态对话框后rn一闪就消失了,怎么办?
MFC模态对话框与非模态对话框
MFC中经常会用到弹出模态或非模态对话框,模态对话框与非模态对话框容易混淆
MFC创建非模态对话框
操作步骤 1、参考模态对话框的操作步骤 说明 最后一步不同,添加的代码不一样 2、添加弹出模态对话框代码 引出问题 图中在单击按钮后,会弹出一个对话框,但会一闪而过 原因 对象abc在栈上,该消息处理函数调用结束返回后,对象abc销毁,也即非模态对话框销毁 解决办法 创建为全局变量或定义到该按钮所属类中(作为该类的成员变量) 引出问题 按照上例方式,解决上面的问题后,有...
MFC中模态和非模态对话框
参考博客:http://www.cnblogs.com/ikangkang/p/5965168.html 1.简述   1.1模态对话框(model dialog box)     当模态对话框显示时,程序会暂停执行,直到关闭这个模态对话框之后,才能执行程序中的其他任务。点击模态对话框中的OK按钮,模态对话框会被销毁。   1.2非模态对话框(modeless dialog
MFC模态与非模态对话框
MFC模态对话框是基于dialog来做的,dialog的属性基本就是,界面上所有的点击属性,都只在这个对话框上面,diallog中可以使用各种控件,显示是用DoModelaix来显示,想要bina变成非模态的可以用create,关闭的话可以用 转载https://blog.csdn.net/lqlblog/article/details/17556435 CDialog::Close()默认调...
MFC 非模态对话框一闪而过
在消息函数中用下面的代码会出现对话框闪一下就不见了的情况 Color_Based_SettingDlg m_ColorBasedSetting; m_ColorBasedSetting.Create(IDD_DIALOG_BASE_COLOR_SETTING); m_ColorBasedSetting.ShowWindow(SW_SHOW); m_ColorBas
MFC:模态与非模态对话框
昨天用单文档做了一个简易的编辑器,可以编辑代码。今天跟进一步,把之前写的翻译器移植进来。 一开始抱着只要读懂代码就能知道怎么写的想法去尝试,结果浪费了一下午的时间,死磕各种BUG,其中一个BUG困扰时间最长:我通过类向导建立的对话框类(继承自CDialog),然后在别的类中使用这个类创建对象,总是出现莫名其妙的错误(提示缺少;的语法错误),怎么都查不出来。后来只好屈服,去搜了教程来看。
MFC 非模态对话框 句柄问题
刚写的程序rn EditMap *pDlg=new EditMap;rnrn pDlg->Create(IDD_EDIT);rnrn pDlg->ShowWindow(SW_SHOW);rnrn但是发现 pDlg->GetSafeHwnd() 返回值为 NULLrn但是窗口就有显示,这是为什么?
创建非模态对话框出错
我点击一个按钮创建一个非模态对话框,代码如下:rn[code=C/C++]rn dialog.Create(IDD_DIALOG_LETTER,GetDesktopWindow());//Create(IDD_DIALOG_LETTER,GetDesktopWindow());rn dialog.ShowWindow(SW_SHOW);rn[/code]rndialog是成员变量,rn这俩句话是点击按钮的事件里面的,当我点击一次,然后关闭对话框,然后再点击这个按钮,就出错,说内存出错,请问下着是怎么回事?谢谢回答。
关于非模态对话框关闭出错
我的非模态对话框中调用了CListCtrl的一个派生类rn及二个child属性的子对话框 m_dlg1;m_dlg2rnm_dlg1;和m_dlg2 也是非模态的rnrn在销毁中rnvoid CSetDlg::OnCancel()rnrn delete m_dlg1;rn delete m_dlg2;rn DestroyWindow();//出问题的地方rnrnvoid CSetDlg::PostNcDestroy( )rnrn delete this;rn CCDialog::PostNcDestroy( );rnrn上面的方法我一直用来消除非模态的对话框,一直都没问题,今天是第一次出现这样的现象。不知道各位N人有没人知道问题的地方,小弟菜鸟,分不多,不过我结贴很快,大神们出来说法吧。懂的大神帮忙,不知道问题所在的帮顶顶,大家一起讨论下吧。
MFC 非模态对话框教程
对非模式对话框常常感到困惑的新手程序员,如果您记住几个漂亮的小动作,然后编程非模式对话框,将非常简单。
MFC中的非模态对话框
1、CDLGShow dlg 写到.h做成员2、dlg.create 写到初始化 OnInitDialog() 保证只创建一次3、dlg.ShowWindow() 
MFC模态对话框和非模态对话框
一、模态对话框(model dialog box)         在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送。        点击模态对话框中的OK按钮,模态对话框会被销毁。         创建一个模态对话框的代码: [cpp] view plain copy #include "
MFC——模态对话框和非模态对话框
一、模态对话框 如果你需要做一个模态对话框,简单的说就是你点一个按钮,弹出一个对话框,之后你只能在弹出的对话框上操作的这么一个过程。实验的过程很简单,跟着我做吧。 下面开始模态对话框实验 在资源视图新建一个对话框资源,修改其ID为IDD_DIALOG1,这个就是即将要弹出来的对话框 在这个对话框模板上点右键选择“Add Class…”,弹出添加类的对话框,设置“Class name”为CT...
MFC创建非模态对话框问题
CTestDlg *dlg = new CTestDlg;rndlg->Create(IDD_DIALOG_TE,this);rndlg->ShowWindow(SW_SHOW);rnrnrn以上代码会报rnwarning C4305: 'initializing' : truncation from 'int' to 'short'rnwarning C4309: 'initializing' : truncation of constant valuernrn请问我该如何改才能不显示这样的警告呢? <- 除了屏蔽警告rn很明显是int 转 short 类型 丢失长度了。rn
求帮忙~MFC非模态对话框
我创建了一个单文本对话框............rn我要按一个按钮,然后弹出一个新对话框,哪个按钮所在的对话框就销毁了rnrn弹出对话框:(代码格式如下)rn类名 指针;rn指针=new 类名;rn指针->Create(IDC_xx);rn指针->ShowWindow(SW_SHOW);rnrn销毁对话框:(代码格式如下)rn(全局变量) extern 类名 指针;rn.......rn指针->DestroyWindow();rnrnrn我现在销毁不了,方法最好不要变,就是以上这些代码,(最好说明一下那些函数放在那里了),我还出现一种情况,就是程序运行崩溃了(指针->DestroyWindow();这代码写在按钮哪个函数里对吗?)rnrn求答案,要成功的哦!!
MFC非模态对话框的创建及显示
我们需要在原对话框CMFC_Kinect_TrackingDlg设计一个按钮,点击这个按钮后弹出一个非模态对话框Color_Based_SettingDlg, 并且同时两个对话框都是激活状态,都可以自由操作,步骤入下: 1.在头文件MFC_Kinect_TrackingDlg.h中包含Color_Based_SettingDlg.h 2.在MFC_Kinect_TrackingDlg.h中的
MFC非模态对话框内存释放
非模态对话框的内存释放: 第一步:在OnClose() 函数中添加DestroyWindow() ; 第二步:在PostNcDestroy() 中添加delete this。
MFC非模态对话框嵌入桌面
我在要嵌入桌面的对话框的OnInitDialog()中加入rn HWND hDesktop = ::FindWindow( "Progman ", NULL); rn hDesktop = ::GetWindow(hDesktop, GW_CHILD); rn CWnd* pWndDesktop = CWnd::FromHandle(hDesktop); rn this-> SetParent(pWndDesktop); rnrnrn还是不行,点显示桌面,还是会最小化对话框。rnrn请问怎么解决
MFC 非模态对话框调用
1.环境是单文档,对界面使用的窗口分隔,生成了1,2,3窗口(如图),在2号窗口中弹出菜单选择添加精灵会调用dlg,这个时候的dlg是正常的。rn2. 在1号窗口中 也有个弹出菜单 选择修改,会调用同样的窗口,但是窗口能够显示出来,但是接收不了鼠标事件。切换到其他界面之后再回来 又可以正常接收事件了。rnrn请问一下这个问题怎么解决?rnrn[img=https://img-bbs.csdn.net/upload/201409/10/1410338292_445651.jpg][/img]rnrn[img=https://img-bbs.csdn.net/upload/201409/10/1410338312_394911.jpg][/img]rnrn[img=https://img-bbs.csdn.net/upload/201409/10/1410338320_992918.jpg][/img]
MFC 非模态对话框全屏问题
现在我在做一个项目,整个程序运行期间是完全全屏的。rn我重载了SettingChange的消息和Activate的消息。rnrn现在我的当前窗口是非模态的,有两种情况:一种是,在当前窗口下弹出messagebox,另一种是进入另一个非模态对话框。rn现在问题就是这两种情况下,总会有一种情况出现状态栏闪一下的问题。rnrn当我在OnSettingChange里面调用了我的全屏函数SetFullScreen();,而在OnActivate里面调用了原来的CDialog::OnActivate( nState, pWndOther, bMinimized); 这个时候程序进入另一个对话框状态栏不闪,但是messagebox时状态栏就闪。rnrn当我在OnSettingChange里面置空,而在OnActivate里面调用了我的全屏函数SetFullScreen();这个时候messagebox状态栏不闪,而进入别的对话框时状态栏就闪。rnrn我的全屏函数是这么实现的:rnvoid SetFullScreen()rnrn CRect WindowRect;rn int nWndWidth;rn HWND hwnd = ::GetActiveWindow();rn CWnd *pWnd = CWnd::FromHandle(hwnd);rn GetClientRect(hwnd, WindowRect); rn nWndWidth = WindowRect.right - WindowRect.left;rn if ( nWndWidth < 200)rn rn pWnd = NULL;rn return;rn rnrn SHINITDLGINFO shidi; rn shidi.dwMask = SHIDIM_FLAGS; rn shidi.dwFlags = SHIDIF_FULLSCREENNOMENUBAR; rn shidi.hDlg = pWnd->m_hWnd; rn ::SHInitDialog(&shidi); rnrn SHFullScreen(pWnd->m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESTARTICON); rnrn int nMenuHeight = 26; rn RECT rect; rn pWnd->GetWindowRect(&rect); rn rect.top -= nMenuHeight; rn pWnd->MoveWindow(&rect, TRUE); rn pWnd = NULL;rn
非模态对话框创建的时候出错
我先说一下我创建非模态对话框的思路,rn资源视图中创建一个对话框并创建类Coption,在菜单中加入一个按键coption,rn在CChildView类中创建一个Coption类对象指针,在CChildView类中用Coption类对象指针创建非模态对话框,并判断Coption类对象指针是否为null,如果不为null,则不创建,将焦点给非模态对话框就行,创建的时候,将CChildView类作为Coption类构造参数传入Coption类中,当非模态对话框点击取消时,销毁非模态对话框,并发送消息给CChildView类,让他将Coption类对象指针赋值为null,否则非模态对话框只能出来一次,rn但是现在发送消息会报错,rn下面贴出四个文件代码,忘大佬们解答rnrnCChildView.h:rn```rn#pragma oncern#include"Coption.h"rnrn// CChildView 窗口rnrnclass CChildView : public CWndrnrn// 构造rnpublic:rn CChildView();rnrn// 特性rnpublic:rnrn// 操作rnpublic:rnrn// 重写rn protected:rn virtual BOOL PreCreateWindow(CREATESTRUCT& cs);rnrn// 实现rnpublic:rn virtual ~CChildView();rnrn // 生成的消息映射函数rnprotected:rn afx_msg void OnPaint();rn DECLARE_MESSAGE_MAP()rnprotected:rn Coption* m_option;rnpublic:rn afx_msg void On32771(); //为菜单option按钮rn afx_msg LRESULT ON_GOODBYE(WPARAM wparam, LPARAM lparam);rn;rnrn```rnrnrnrnrnrnrnChildView.cpp: rnrnrnrn```rnrn#include "stdafx.h"rn#include "MFCApplication5.h"rn#include "ChildView.h"rn#include "resource.h" // 主符号rnrn#ifdef _DEBUGrn#define new DEBUG_NEWrn#endifrnrnrn// CChildViewrnrnCChildView::CChildView()rnrn m_option = NULL;rnrnrnrnCChildView::~CChildView()rnrnrnrnrnBEGIN_MESSAGE_MAP(CChildView, CWnd)rn ON_WM_PAINT()rn ON_COMMAND(ID_32771, &CChildView::On32771)rn ON_MESSAGE(WM_GOODBYE,ON_GOODBYE)rnEND_MESSAGE_MAP()rn rnLRESULT CChildView::ON_GOODBYE(WPARAM wparam, LPARAM lparam)rnrn delete m_option;rn m_option = NULL;rn rn return 0;rn rnrn// CChildView 消息处理程序rnrnBOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) rnrn if (!CWnd::PreCreateWindow(cs))rn return FALSE;rnrn cs.dwExStyle |= WS_EX_CLIENTEDGE;rn cs.style &= ~WS_BORDER;rn cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, rn ::LoadCursor(nullptr, IDC_ARROW), reinterpret_cast(COLOR_WINDOW+1), nullptr);rnrn return TRUE;rnrnrnvoid CChildView::OnPaint() rnrn CPaintDC dc(this); // 用于绘制的设备上下文rn rn // TODO: 在此处添加消息处理程序代码rn rn // 不要为绘制消息而调用 CWnd::OnPaint()rnrnrnrnrnvoid CChildView::On32771()rnrn if (NULL!=m_option)rn rn SetFocus();rn MessageBox(_T("m_option不为空"));rn rn elsern rn m_option = new Coption;rn m_option->Create(IDD_DIALOG1,this);rn m_option->ShowWindow(SW_SHOW);rn MessageBox(_T("m_option为空"));rn rn // TODO: 在此添加命令处理程序代码rnrnrn```rnrnCoption.h:rnrnrn```rnclass Coption : public CDialogExrnrn DECLARE_DYNAMIC(Coption)rnrnpublic:rn Coption(CWnd* pParent = nullptr); // 标准构造函数rn Coption(CView* pview); // 标准构造函数rn virtual ~Coption();rnrn// 对话框数据rn#ifdef AFX_DESIGN_TIMErn enum IDD = IDD_DIALOG1 ;rn#endifrnrnprotected:rn virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持rnrn DECLARE_MESSAGE_MAP()rnpublic:rn afx_msg void OnBnClickedCancel();rn virtual void PostNcDestroy();rnprivate:rn CView* p_view;rnpublic:rn afx_msg void OnBnClickedOk();rn;rnrn```rnrn Coption.cpp:rn rn```rnrn#include "stdafx.h"rn#include "MFCApplication5.h"rn#include "Coption.h"rn#include "afxdialogex.h"rnrnrn// Coption 对话框rnrnIMPLEMENT_DYNAMIC(Coption, CDialogEx)rnrnCoption::Coption(CWnd* pParent /*=nullptr*/)rn : CDialogEx(IDD_DIALOG1, pParent)rnrnrnrnrnCoption::Coption(CView* pview /*=nullptr*/)rnrn p_view = pview;rnrnrnCoption::~Coption()rnrnrnrnrnvoid Coption::DoDataExchange(CDataExchange* pDX)rnrn CDialogEx::DoDataExchange(pDX);rnrnrnrnBEGIN_MESSAGE_MAP(Coption, CDialogEx)rn ON_BN_CLICKED(IDCANCEL, &Coption::OnBnClickedCancel)rn ON_BN_CLICKED(IDOK, &Coption::OnBnClickedOk)rnEND_MESSAGE_MAP()rnrnrn// Coption 消息处理程序rnrnrnvoid Coption::OnBnClickedCancel()rnrn // TODO: 在此添加控件通知处理程序代码rn rn //CDialogEx::OnCancel();rn DestroyWindow();rnrnrnrnrnvoid Coption::PostNcDestroy()rnrn // TODO: 在此添加专用代码和/或调用基类rn CDialogEx::PostNcDestroy();rnrn p_view->SendMessage(WM_GOODBYE, 0,0); //屏蔽这一行就不会报错 rnrnrnrnrnrnvoid Coption::OnBnClickedOk()rnrn // TODO: 在此添加控件通知处理程序代码rn //CDialogEx::OnOK();rn DestroyWindow();rnrnrnrn```
关闭非模态对话框 出错
rn在A程序中点击树形控件创建非模态对话框 rncg = new CGroupChatDlg(this);rn然后记录该对话框指针rnm_groupTree.SetItemData(htSel,(DWORD_PTR)cg); rnA程序中有一个线程,当收到B程序发送的消息(通过SOCKET发送),根据传递的参数rnm_groupTree.SetItemData(htSel) 获取模态对话框指针cgrn然后再线程中rn调用 PostMessage(cg->m_hWnd,WM_QUIT,0,0);rn结果不但创建的非模态对话框关闭,连住对话框也关闭了。rnrn请问怎么在线程中接收消息后正常关闭打开的对话框?
MFC模态 非模态对话框 ARX2008+VS2005
基于vs2005,在ObjectARX中使用MFC:模态,非模态对话框
MFC模态与非模态对话框的创建
MFC模态与非模态对话框的创建有截图详细步骤
MFC 非模态对话框消息映射问题
大家好啊,我在一个模态对话框中,嵌套了一个非模态对话框,然后分别为这两个对话框各创建一个类。在非模态对话框中,我添加了几个按钮,并添加了相应的事件处理程序,但无论我怎么点击按钮,非模态对话框中按钮的事件处理程序都是没有执行。在网上搜索,非模态对话框与它的父窗口共用一个消息循环,但我该怎么分发来自非模板窗口的消息呢,让事件处理程序得到响应!今天查了一下午的资料,都没有结果,累呀!!!
mfc非模态对话框的使用
本次使用情况,在一个view中通过点击按钮,产生非模态对话框 1.创建非模态对话框 MyView.h CMyDialog*pDlg;//在头文件声明全局指针,方便调用 MyView.cpp CMyView::CMyView(Void) { ... pDlg =NULL;//构造函数初始化} CMyView::CreateDialog()//产生对话框 {   pDlg=new
非模态对话框create时出错
我的程序是wtl对话框程序rn在某些机器上有时会出现崩溃的情况,自己调试又没问题rn用WinDbg分析崩溃的dmp文件有这样的信息:rnSTACK_TEXT: rn0012f8e0 77d25bc9 006f7e80 447b0000 0012f910 user32!_GetChildControl+0xern0012f8f0 77d23a26 006f7e80 00704d78 00000000 user32!_NextSibblingOrAncestor+0x36rn0012f910 77d25c22 006f7e80 00704d78 00000000 user32!_NextControl+0x47rn0012f930 77d25c6a 006f7e80 00704d78 00000006 user32!xxxRemoveDefaultButton+0x63rn0012f948 77d23e3a 006f7e80 00000007 006f7e80 user32!xxxSaveDlgFocus+0x3ern0012f974 77d1b50c 00000000 00000006 00000000 user32!DefDlgProcWorker+0x2f5rn0012f99c 7c92e473 0012f9ac 00000018 006f84b8 user32!__fnDWORD+0x24rn0012f9c0 77d1da6c 77d259bf 000f0ff8 00240f62 ntdll!KiUserCallbackDispatcher+0x13rn0012f9f0 77d1b50c 00000000 00000007 00000000 user32!NtUserSetFocus+0xcrn0012fa18 7c92e473 0012fa28 00000018 006f84b8 user32!__fnDWORD+0x24rn0012fa3c 77d1d83f 77d2c0a7 00240f62 0000005b ntdll!KiUserCallbackDispatcher+0x13rn0012faec 77d24704 00000000 006f84b8 00000190 user32!NtUserCallHwndLock+0xcrn0012fb10 77d27d98 10000000 10006430 000f0ff8 user32!CreateDialogIndirectParamAorW+0x33rn0012fb3c 0040178e 10000000 0000006c 000f0ff8 user32!CreateDialogParamW+0x49rnWARNING: Stack unwind information not available. Following frames may be wrong.rn00000000 00000000 00000000 00000000 00000000 sgupdateapp+0x178ernrn在map文件中分析查找到出问题的代码为:rnrn SG_WelcomeProcedure* pWelcomeProcedure = new SG_WelcomeProcedure;rn SG_DownloadProcedure* pDownloadProcedure = new SG_DownloadProcedure;rn SG_UpdateProcedure* pUpdateProcedure = new SG_UpdateProcedure;rn SG_NoNeedUpdateProcedure* pNoNeedUpdateProcedure = new SG_NoNeedUpdateProcedure;rn SG_CancelProcedure* pCancelProcedure = new SG_CancelProcedure;rnrn pWelcomeProcedure->Create(m_hWnd);rn [color=#FF9900]pDownloadProcedure->Create(m_hWnd);[/color]rn pUpdateProcedure->Create(m_hWnd);rn pNoNeedUpdateProcedure->Create(m_hWnd);rn pCancelProcedure->Create(m_hWnd);rnrn是第二个子对话框Create时出错了,找了很久不知道是什么原因rn这种在某些机器上有时出问题的代码太折磨人了,请大侠们帮帮忙看看,SG_DownloadProcedure这个子对话框上只有几个edit和一个列表控件一个进度条控件
为什么创建非模态对话框出错。
首先我定义了void *pDl1;rn pDl1 = NULL;rn我添加了#include "Dong.h"头文件之后,rn BOOL a=((CDong *)pDl1)->Create(IDD_DIALOG1,this);//a的值为1rn BOOL b=((CDong *)pDl1)->ShowWindow(SW_SHOW);//b的值为0rnrn为什么提示SW_SHOW未定义,而且b的返回值为0.
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数