在單檔案的view.cpp中撰寫選單的回應,內容是創建一個對話框。在除錯中發現,總是在DoMadal這一步出錯。求高手指點!
具體出錯的代碼如下:
void CMFCApplication12View::OnSet()
{
// TODO: 在此添加命令處理程式代碼
shezhidialog szdlg;//shezhidialog是我定義的對話框的類
szdlg.DoModal();
}
我曾經嘗試用create去做,然而還是在相同的位置出錯。
錯誤資訊:
uj5u.com熱心網友回復:
整個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();
}
uj5u.com熱心網友回復:
在對話框的OnInitDialog 中看看是不是初始化有問題uj5u.com熱心網友回復:
這個問題基本都是對話框內控制元件物件的句柄無效。uj5u.com熱心網友回復:
前幾天剛碰到過,檢查控制元件的IDuj5u.com熱心網友回復:
Debug一下你的shezhidialog類中初始化的代碼,比如建構式,OnInitDialog函式等。uj5u.com熱心網友回復:
碰到這種問題,就在視窗初始化所經過的每個地方加上斷點,問題還是很好解決的。uj5u.com熱心網友回復:
資源創建,構造,onini,這三個地方,目測第一個可能性最大uj5u.com熱心網友回復:
正道,多加點斷點,錯誤很容易發現的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/111026.html
標籤:資源
