1. 程式人生 > >MessageBox顯示在視窗的後面

MessageBox顯示在視窗的後面

程式碼如下。主要功能是,建立了一個視窗,然後單擊滑鼠左鍵時彈出一個MessageBox

#include <afxwin.h>

class CMyApp:public CWinApp
{
public:
 virtual BOOL InitInstance();
};

class CMyWnd:public CFrameWnd
{
public:
 CMyWnd();

 afx_msg void OnPaint();
 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 DECLARE_MESSAGE_MAP()
};

#include "CreateTest.h"

CMyApp myapp;
BOOL CMyApp::InitInstance()
{
 m_pMainWnd = new CMyWnd();
 m_pMainWnd->ShowWindow(SW_SHOWNORMAL);
 m_pMainWnd->UpdateWindow();
 return TRUE;
}

BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd)
 ON_WM_PAINT()
 ON_WM_LBUTTONDOWN()
 END_MESSAGE_MAP()

CMyWnd::CMyWnd()
{
 Create(NULL,_T("hhhh"));
}

void CMyWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
 MessageBox(_T("MyBox")); 
}

void CMyWnd::OnPaint()
{
 
}

問題:編譯執行,MessageBox總是顯示在主視窗的後面,只有敲alt鍵才可以看見。

原因:OnPaint()。在OnPaint()裡一定要呼叫BeginPaint和EndPaint,或者呼叫這兩個函式的“方法”,如CPaintDC,它的建構函式裡呼叫BeginPaint,

          解構函式呼叫EndPaint,否則WM_PAINT訊息永遠都不會從佇列裡刪除,所以就會一直響應。

解決方法:void CMyWnd::OnPaint()
                 {
                      CPaintDC dc(this);
                  }