#include <afxwin.h> class CMyFrameWnd :public CFrameWnd { public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs);//修改窗口属性 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);//重写消息处理函数 //参数1:是系统发过来的消息 }; LRESULT CMyFrameWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: //窗口生成消息 AfxMessageBox("收到WM_CREATE消息"); break; case WM_PAINT: //要求一个窗口重画自己 //WM_PAINT消息的产生:当显示区域(客户区)存在无效区域时,系统会产生一个WM_PAINT消息,通知视窗处理程序重绘显示区域 //比如:第一次创建窗口,改变了窗口的大小,最大化,最小化等等(其实这些事件发生时会调用UpdateWindow函数,由该函数发送WM_PAINT消息),它会向用户程序发送一个WM_PAINT消息 //窗口过程收到WM_PAINT消息后,并不代表整个客户区都需要被刷新,有可能客户区被覆盖的区域只有一小块,这个区域叫做“无效区域”,程序只需要更新这个区域。与WM_TIMER消息类似, //WM_PAINT消息也是一个低级别的消息,虽然它不会像WM_TIMER消息一样被丢弃,但Windows总是在消息循环空的时候才把WM_PAINT放入其中 /* //win32方式 PAINTSTRUCT ps = { 0 }; HDC hDC = ::BeginPaint(m_hWnd,&ps); ::TextOut(hDC, 50, 50, "WM_PAINT消息", 12); ::EndPaint(m_hWnd, &ps); */ //MFC方式 PAINTSTRUCT ps1 = { 0 }; CDC* pDC = BeginPaint(&ps1); pDC->TextOutA(150, 150, "WM_PAINT消息"); EndPaint(&ps1); break; } return CFrameWnd::WindowProc(message, wParam, lParam);//不是我们关心的消息返回系统默认处理 } BOOL CMyFrameWnd::PreCreateWindow(CREATESTRUCT& cs) { cs.x = 50; cs.y = 50; cs.cx = 500; cs.cy = 300; return CFrameWnd::PreCreateWindow(cs); } class CMyWinApp :public CWinApp { public: virtual BOOL InitInstance(); }; CMyWinApp theAPP; BOOL CMyWinApp::InitInstance() { CMyFrameWnd* pFrame = new CMyFrameWnd; pFrame->Create(NULL, "MFCWnd"); m_pMainWnd = pFrame; m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE; }
标签:MFC,处理,WM,WindowProc,PAINT,消息,cs,CMyFrameWnd From: https://www.cnblogs.com/liming19680104/p/17078776.html