//--------------------------------------------------------------------
//                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没有定义,不知道这个问题如何解决?

解决方案 »

  1.   

    DEBUG   ASSERTION FAILED 的意思是m_hWnd为NULL,即窗口还没创建
      

  2.   

    很激动您这么快回复我,可是还是不明白,你给我一个创建窗口函数看看。
    CMyFrameWnd::CMyFrameWnd()
    {
          Create(NULL,   "Hello   MFC",   WS_OVERLAPPEDWINDOW,   rectDefault,
                        NULL,   "MainMenu");           //   "MainMenu"   ﹚竡   RC   郎
    }
    这个函数的作用是创建窗口的吧?我看这句已经运行了。 
      

  3.   

    HEHE,则么么没有人回答,还是我来解答吧,以使后来者少走弯路,共同提高大家的计算机素质。
    我发现是 Create(NULL,   "Hello   MFC",   WS_OVERLAPPEDWINDOW,   rectDefault,
                        NULL,   "MainMenu");      的问题,
    把此函数改为Create(NULL,   "Hello   MFC“)就可以了,但不知道理由,希望哪位高手帮我解答一下.
      

  4.   

    终于解决这个问题了,十分的高兴!今晚跟师兄讨论了一下,他帮我解决的!是MainMenu的问题,要这么写就对了,Create(NULL, "Hello MFC", WS_OVERLAPPEDWINDOW, rectDefault,NULL,MAKEINTRESOURCE(MAINMENU));加上MAKEINTRESOURCE函数,就好了,后面的ABOUTBOX,也要加上这个……