|
10鱼币
#include<Windows.h>
HINSTANCE g_hInst=NULL;
LRESULT CALLBACK WndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam)
{
switch(nMsg)
{
case WM_PAINT:
return 0; //我把这条改成了返回0值,使消息无法运行默认的处理函数DefWindowProc(); 为何UpdateWindow还能重绘
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,nMsg,wParam,lParam);
}
BOOL RegisterWnd(LPCWSTR pszClassName)
{
WNDCLASSEX wce={0};
wce.cbClsExtra=NULL;
wce.cbSize=sizeof(wce);
wce.cbWndExtra=NULL;
wce.hbrBackground=HBRUSH(COLOR_BTNFACE);
wce.hCursor=NULL;
wce.hIcon=NULL;
wce.hIconSm=NULL;
wce.hInstance=g_hInst;
wce.lpfnWndProc=WndProc;
wce.lpszClassName=pszClassName;
wce.lpszMenuName=NULL;
wce.style=CS_HREDRAW|CS_VREDRAW;
if(0==RegisterClassEx(&wce))
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd(LPCWSTR pszClassName)
{
HWND hWnd=CreateWindowEx(0,pszClassName,L"MyWindow",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,g_hInst,NULL);
return hWnd;
}
void DisplayWnd(HWND hWnd)
{
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
void Message()
{
MSG msg={0};
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
g_hInst=hInstance;
RegisterWnd(L"wnd");
HWND hWnd=CreateWnd(L"wnd");
DisplayWnd(hWnd);
Message();
return 0;
}
|
最佳答案
查看完整内容
你应该在WM_PAINT中加入:BEGIN_PAINT和END_PAINT
否则该WM_PAINT消息视为违背处理,此时windows将自动再插入一条WM_PAINT消息。
|