
一个关于Windows SDK 编程中 窗口创建的问题
运行都没有问题,就是我在关闭窗口的时候,我点击是后,窗口是销毁了,但是在进程里还有!我在消息处理关于WM_CLOSE和WM_DESTROY的时候都感觉没有问题,所以有点不...
运行都没有问题,就是我在关闭窗口的时候,我点击是后,窗口是销毁了,但是在进程里还有! 我在消息处理关于 WM_CLOSE 和WM_DESTROY的时候都感觉没有问题,所以有点不明白到底是怎么回事请! 请高手指点!
#include<stdio.h>
#include<windows.h>
LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
WNDCLASS wincls;
wincls.cbClsExtra=0;
wincls.cbWndExtra=0;
wincls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH) ;
wincls.hCursor=LoadCursor(hInstance,IDC_CROSS);
wincls.hIcon=LoadIcon(hInstance,IDI_APPLICATION);
wincls.hInstance=hInstance;
wincls.lpfnWndProc=WinSunProc;
wincls.lpszClassName="windows";
wincls.lpszMenuName=NULL;
wincls.style=CS_VREDRAW|CS_HREDRAW;
RegisterClass(&wincls);
HWND hwnd;
hwnd=CreateWindow("windows","´°¿Ú",WS_OVERLAPPEDWINDOW ,100,100,600,500,
NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,hwnd,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
};
return 0;
}
LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_CHAR:
char str[30];
sprintf(str,"you press down the %c ",wParam);
MessageBox(hwnd,str,"°´¼ü",MB_OK);
break;
case WM_PAINT:
HDC hdc;
PAINTSTRUCT ps;
hdc=BeginPaint(hwnd,&ps);
TextOut(hdc,0,0,"ÔÚÖØ»",strlen("ÔÚÖØ»"));
EndPaint(hwnd,&ps);
break;
case WM_LBUTTONDOWN:
HDC hDC;
hDC=GetDC(hwnd);
TextOut(hDC,0,50,"I love this game!",strlen("I love this game!"));
MessageBox(hwnd,"mouse click","mouse",MB_OK);
ReleaseDC(hwnd,hDC);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"ÄãÕæµÄÒªÍ˳ö","Ìáʾ",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
} 展开
#include<stdio.h>
#include<windows.h>
LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
WNDCLASS wincls;
wincls.cbClsExtra=0;
wincls.cbWndExtra=0;
wincls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH) ;
wincls.hCursor=LoadCursor(hInstance,IDC_CROSS);
wincls.hIcon=LoadIcon(hInstance,IDI_APPLICATION);
wincls.hInstance=hInstance;
wincls.lpfnWndProc=WinSunProc;
wincls.lpszClassName="windows";
wincls.lpszMenuName=NULL;
wincls.style=CS_VREDRAW|CS_HREDRAW;
RegisterClass(&wincls);
HWND hwnd;
hwnd=CreateWindow("windows","´°¿Ú",WS_OVERLAPPEDWINDOW ,100,100,600,500,
NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,hwnd,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
};
return 0;
}
LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_CHAR:
char str[30];
sprintf(str,"you press down the %c ",wParam);
MessageBox(hwnd,str,"°´¼ü",MB_OK);
break;
case WM_PAINT:
HDC hdc;
PAINTSTRUCT ps;
hdc=BeginPaint(hwnd,&ps);
TextOut(hdc,0,0,"ÔÚÖØ»",strlen("ÔÚÖØ»"));
EndPaint(hwnd,&ps);
break;
case WM_LBUTTONDOWN:
HDC hDC;
hDC=GetDC(hwnd);
TextOut(hDC,0,50,"I love this game!",strlen("I love this game!"));
MessageBox(hwnd,"mouse click","mouse",MB_OK);
ReleaseDC(hwnd,hDC);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"ÄãÕæµÄÒªÍ˳ö","Ìáʾ",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
} 展开
1个回答
展开全部
while(GetMessage(&msg,hwnd,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
};
这里有问题
当你DestroyWindow(hwnd);后,hwnd是无效值,在PostQuitMessage就没有意思了,GetMessage()永远不返回0,程序就不结束。
我见过有的程序直接GetMessage(&msg,NULL,0,0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
};
这里有问题
当你DestroyWindow(hwnd);后,hwnd是无效值,在PostQuitMessage就没有意思了,GetMessage()永远不返回0,程序就不结束。
我见过有的程序直接GetMessage(&msg,NULL,0,0)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询