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);
}