//--------------------------------------------------------------------
// MFC 4.0 Hello sample program
// Copyright (c) 1996 Top Studio * J.J.Hou
//
// 郎 : hello.cpp
// : 獼玊城
// 絪亩羛挡 : 叫把σ hello.mak
//
// セㄒボ絛程虏虫ぇ MFC 莱ノ祘Αぃ Document/View 琜篶祘Α–Μ
// WM_PAINT ノ GDI ㄧΑ LineDDA() 琵 "Hello, MFC" ﹃眖ぱτ
//--------------------------------------------------------------------
#include "Stdafx.h"
#include "Hello.h"
#include "Resource.h"CMyWinApp theApp; // application object//--------------------------------------------------------------------
// CMyWinApp's member
//--------------------------------------------------------------------
BOOL CMyWinApp::InitInstance()
{
m_pMainWnd = new CMyFrameWnd();
m_pMainWnd->ShowWindow(m_nCmdShow);//SW_SHOW
m_pMainWnd->UpdateWindow();
return TRUE;
}
//--------------------------------------------------------------------
// CMyWinApp's member
//--------------------------------------------------------------------
BOOL CMyWinApp::OnIdle(LONG lCount)
{
CMyFrameWnd* pWnd = (CMyFrameWnd*)m_pMainWnd;
pWnd->IdleTimeHandler(lCount); return TRUE;
}
//--------------------------------------------------------------------
// CMyFrameWnd's member
//--------------------------------------------------------------------
CMyFrameWnd::CMyFrameWnd()
{
Create(NULL, "Hello MFC", WS_OVERLAPPEDWINDOW, rectDefault,
NULL, "MainMenu"); // "MainMenu" ﹚竡 RC 郎
}
//--------------------------------------------------------------------
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
ON_COMMAND(IDM_ABOUT, OnAbout)
ON_WM_PAINT()
END_MESSAGE_MAP()
//--------------------------------------------------------------------
void CMyFrameWnd::OnPaint()
{
CPaintDC dc(this);
CRect rect; GetClientRect(rect); dc.SetTextAlign(TA_BOTTOM | TA_CENTER); ::LineDDA(rect.right/2, 0, rect.right/2, rect.bottom/2,
(LINEDDAPROC) LineDDACallback, (LPARAM) (LPVOID) &dc);
}
//--------------------------------------------------------------------
VOID CALLBACK CMyFrameWnd::LineDDACallback(int x, int y, LPARAM lpdc)
{
static char szText[] = "Hello, MFC"; ((CDC*)lpdc)->TextOut(x, y, szText, sizeof(szText)-1);
for(int i=1; i<50000; i++); // 洪琌┑筐硉芠诡
}
//--------------------------------------------------------------------
void CMyFrameWnd::OnAbout()
{
CDialog about("AboutBox", this); // "AboutBox" ﹚竡 RC 郎
about.DoModal();
}
//--------------------------------------------------------------------
void CMyFrameWnd::IdleTimeHandler(LONG lCount)
{
CString str;
CRect rect(10,10,200,30);
CDC* pDC = new CClientDC(this); str.Format("%010d", lCount);
pDC->DrawText(str, &rect, DT_LEFT | DT_TOP);
}
请问,我运行上面的HELLO MFC时按照一定的设置后,编译0 错0警告,但是运行时出现DEBUG ASSERTION FAILED ,我单步运行,发现运行到
BOOL CWnd::ShowWindow(int nCmdShow)
{
ASSERT(::IsWindow(m_hWnd)); if (m_pCtrlSite == NULL)
return ::ShowWindow(m_hWnd, nCmdShow);
else
return m_pCtrlSite->ShowWindow(nCmdShow);
}中的return ::ShowWindow(m_hWnd, nCmdShow)时出现了DEBUG ASSERTION FAILED 错误,网上搜索答案,判断是m_hWnd没有定义,不知道这个问题如何解决?
// MFC 4.0 Hello sample program
// Copyright (c) 1996 Top Studio * J.J.Hou
//
// 郎 : hello.cpp
// : 獼玊城
// 絪亩羛挡 : 叫把σ hello.mak
//
// セㄒボ絛程虏虫ぇ MFC 莱ノ祘Αぃ Document/View 琜篶祘Α–Μ
// WM_PAINT ノ GDI ㄧΑ LineDDA() 琵 "Hello, MFC" ﹃眖ぱτ
//--------------------------------------------------------------------
#include "Stdafx.h"
#include "Hello.h"
#include "Resource.h"CMyWinApp theApp; // application object//--------------------------------------------------------------------
// CMyWinApp's member
//--------------------------------------------------------------------
BOOL CMyWinApp::InitInstance()
{
m_pMainWnd = new CMyFrameWnd();
m_pMainWnd->ShowWindow(m_nCmdShow);//SW_SHOW
m_pMainWnd->UpdateWindow();
return TRUE;
}
//--------------------------------------------------------------------
// CMyWinApp's member
//--------------------------------------------------------------------
BOOL CMyWinApp::OnIdle(LONG lCount)
{
CMyFrameWnd* pWnd = (CMyFrameWnd*)m_pMainWnd;
pWnd->IdleTimeHandler(lCount); return TRUE;
}
//--------------------------------------------------------------------
// CMyFrameWnd's member
//--------------------------------------------------------------------
CMyFrameWnd::CMyFrameWnd()
{
Create(NULL, "Hello MFC", WS_OVERLAPPEDWINDOW, rectDefault,
NULL, "MainMenu"); // "MainMenu" ﹚竡 RC 郎
}
//--------------------------------------------------------------------
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
ON_COMMAND(IDM_ABOUT, OnAbout)
ON_WM_PAINT()
END_MESSAGE_MAP()
//--------------------------------------------------------------------
void CMyFrameWnd::OnPaint()
{
CPaintDC dc(this);
CRect rect; GetClientRect(rect); dc.SetTextAlign(TA_BOTTOM | TA_CENTER); ::LineDDA(rect.right/2, 0, rect.right/2, rect.bottom/2,
(LINEDDAPROC) LineDDACallback, (LPARAM) (LPVOID) &dc);
}
//--------------------------------------------------------------------
VOID CALLBACK CMyFrameWnd::LineDDACallback(int x, int y, LPARAM lpdc)
{
static char szText[] = "Hello, MFC"; ((CDC*)lpdc)->TextOut(x, y, szText, sizeof(szText)-1);
for(int i=1; i<50000; i++); // 洪琌┑筐硉芠诡
}
//--------------------------------------------------------------------
void CMyFrameWnd::OnAbout()
{
CDialog about("AboutBox", this); // "AboutBox" ﹚竡 RC 郎
about.DoModal();
}
//--------------------------------------------------------------------
void CMyFrameWnd::IdleTimeHandler(LONG lCount)
{
CString str;
CRect rect(10,10,200,30);
CDC* pDC = new CClientDC(this); str.Format("%010d", lCount);
pDC->DrawText(str, &rect, DT_LEFT | DT_TOP);
}
请问,我运行上面的HELLO MFC时按照一定的设置后,编译0 错0警告,但是运行时出现DEBUG ASSERTION FAILED ,我单步运行,发现运行到
BOOL CWnd::ShowWindow(int nCmdShow)
{
ASSERT(::IsWindow(m_hWnd)); if (m_pCtrlSite == NULL)
return ::ShowWindow(m_hWnd, nCmdShow);
else
return m_pCtrlSite->ShowWindow(nCmdShow);
}中的return ::ShowWindow(m_hWnd, nCmdShow)时出现了DEBUG ASSERTION FAILED 错误,网上搜索答案,判断是m_hWnd没有定义,不知道这个问题如何解决?
CMyFrameWnd::CMyFrameWnd()
{
Create(NULL, "Hello MFC", WS_OVERLAPPEDWINDOW, rectDefault,
NULL, "MainMenu"); // "MainMenu" ﹚竡 RC 郎
}
这个函数的作用是创建窗口的吧?我看这句已经运行了。
我发现是 Create(NULL, "Hello MFC", WS_OVERLAPPEDWINDOW, rectDefault,
NULL, "MainMenu"); 的问题,
把此函数改为Create(NULL, "Hello MFC“)就可以了,但不知道理由,希望哪位高手帮我解答一下.