请高手帮忙(用doModal函数创建对话框出错的问题)

yhb688 2016-12-30 07:31:25
在单文档的view.cpp中编写菜单的响应,内容是创建一个对话框。在调试中发现,总是在DoMadal这一步出错。求高手指点!
具体出错的代码如下:
void CMFCApplication12View::OnSet()
{
// TODO: 在此添加命令处理程序代码
shezhidialog szdlg;//shezhidialog是我定义的对话框的类
szdlg.DoModal();
}

我曾经尝试用create去做,然而还是在相同的位置出错。
错误信息:
...全文
1279 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
走好每一步 2017-02-09
引用 6 楼 fengwanfengwan 的回复:
碰到这种问题,就在窗口初始化所经过的每个地方加上断点,问题还是很好解决的。
正道,多加点断点,错误很容易发现的。
回复
OnTheWay_Boy 2017-02-07
资源创建,构造,onini,这三个地方,目测第一个可能性最大
回复
fengwanzk 2017-01-29
碰到这种问题,就在窗口初始化所经过的每个地方加上断点,问题还是很好解决的。
回复
Eleven 2017-01-24
Debug一下你的shezhidialog类中初始化的代码,比如构造函数,OnInitDialog函数等。
回复
qq_36634306 2017-01-24
前几天刚碰到过,检查控件的ID
回复
sdghchj 2017-01-04
这个问题基本都是对话框内控件对象的句柄无效。
回复
oyljerry 2016-12-31
在对话框的OnInitDialog 中看看是不是初始化有问题
回复
yhb688 2016-12-30
整个View.cpp如下:
// MFCApplication12View.cpp : CMFCApplication12View 类的实现
//

#include "stdafx.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#include "MFCApplication12.h"
#endif

#include "MFCApplication12Doc.h"
#include "MFCApplication12View.h"

#include "leiqudialog.h"
#include "shezhidialog.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CMFCApplication12View

IMPLEMENT_DYNCREATE(CMFCApplication12View, CView)

BEGIN_MESSAGE_MAP(CMFCApplication12View, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
//ON_COMMAND(IDR_MENU_POP, &CView::OnOperShow) //消息响应
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_RESTART, &CMFCApplication12View::OnRestart)
ON_COMMAND(ID_SET, &CMFCApplication12View::OnSet)
END_MESSAGE_MAP()

//int hang=9,lie=9,leishu=10;

// CMFCApplication12View 构造/析构

CMFCApplication12View::CMFCApplication12View()
{
// TODO: 在此处添加构造代码
m_PopMenu.LoadMenu(IDR_MENU_POP); // 创建并加载菜单资源
//gamedlg=new leiqudialog;
//szdlg=new shezhidialog;
//leiqudialog gamedlg;
//gamedlg.Create(IDD_DIALOG1);
}

CMFCApplication12View::~CMFCApplication12View()
{
m_PopMenu.DestroyMenu(); // 释放菜单资源
//delete gamedlg;
//delete szdlg;
}

BOOL CMFCApplication12View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式

return CView::PreCreateWindow(cs);
}

// CMFCApplication12View 绘制

void CMFCApplication12View::OnDraw(CDC* /*pDC*/)
{
CMFCApplication12Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: 在此处为本机数据添加绘制代码
}


// CMFCApplication12View 打印

BOOL CMFCApplication12View::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}

void CMFCApplication12View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加额外的打印前进行的初始化过程
}

void CMFCApplication12View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加打印后进行的清理过程
}


// CMFCApplication12View 诊断

#ifdef _DEBUG
void CMFCApplication12View::AssertValid() const
{
CView::AssertValid();
}

void CMFCApplication12View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}

CMFCApplication12Doc* CMFCApplication12View::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFCApplication12Doc)));
return (CMFCApplication12Doc*)m_pDocument;
}
#endif //_DEBUG


// CMFCApplication12View 消息处理程序


void CMFCApplication12View::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

m_pPop = m_PopMenu.GetSubMenu(0); // 获得第一个子菜单

ClientToScreen(&point); // 将坐标由客户坐标转化为屏幕坐标
m_pPop->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
// 显示Pop-up菜单

CView::OnRButtonDown(nFlags, point);
}

//leiqudialog gamedlg;
int cishu=0;

void CMFCApplication12View::OnRestart()
{
// TODO: 在此添加命令处理程序代码

//delete gamedlg;
//gamedlg=new leiqudialog;

leiqudialog gamedlg;
gamedlg.DoModal();

//cishu++;
//gamedlg->Create(IDD_DIALOG1);
//gamedlg->ShowWindow(SW_SHOW);
//gamedlg->DestroyWindow();
//delete gamedlg;
//Invalidate();

}


void CMFCApplication12View::OnSet()
{
// TODO: 在此添加命令处理程序代码
//delete szdlg;
shezhidialog szdlg;
szdlg.DoModal();
//szdlg.DestroyWindow();
//szdlg=new shezhidialog;
//szdlg->Create(IDD_DIALOG3);
//szdlg->ShowWindow(SW_SHOW);


Invalidate();
}
回复
相关推荐
发帖
资源
创建于2007-09-28

2579

社区成员

VC/MFC 资源
申请成为版主
帖子事件
创建了帖子
2016-12-30 07:31
社区公告
暂无公告