DestroyWindow( hWnd )为什么是退出应用程序?而不仅仅是销毁窗体?
我的应用程序有很多窗体,为什么Destroy其中一个Window,整个应用程序都退出了?
[最优解释]
在窗口过程函数那里设置个断点调试一下,Destroy的是程序的主窗口吗?
[其他解释]
你用的操作系统是Windows吧,里边当然都是各种窗口了,销毁主窗口,就相当于关闭了程序了,估计Windows就是这么设计的,所以叫Windows
[其他解释]
你确定你是因为调用了DestroyWindow造成的程序退出??如果你的程序只是上面两句的话,不调用Destroy也会退出的,根本就没有消息循环处理呀?
[其他解释]
可能是没有消息循环的原因,程序执行的速度很快呀,一个顺序结构的程序,1秒钟内必然执行完毕。如果没有循环,当然看不到程序啦。
[其他解释]
什么是主窗口?我的代码如下:
我创建了两个窗口 hWnd和hWnd1,哪个才是主窗口?
HWND hWnd;
WNDCLASS wc;
char lpszClassName[]="窗口";
char lpszTitle[]="ABCDEFG";
wc.style= NULL;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(NULL_BRUSH);
wc.lpszMenuName=NULL;
wc.lpszClassName=lpszClassName;
if(!RegisterClass(&wc))
{
MessageBeep(0);
return (FALSE);
}
hWnd=CreateWindow ( lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
SetLayeredWindowAttributes(hWnd,NULL,0,NULL);
if(!hWnd)
return (FALSE);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
SetWindowPos( hWnd, NULL, 100, 100, 600, 600, SWP_NOACTIVATE);
//********************************************
HWND hWnd1;
WNDCLASS wc1;
char lpszClassName1[]="窗口1";
char lpszTitle1[]="gfedcba";
wc1.style= NULL;
wc1.lpfnWndProc=WndProc;
wc1.cbClsExtra=0;
wc1.cbWndExtra=0;
wc1.hInstance=hInstance;
wc1.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc1.hCursor=LoadCursor(NULL,IDC_ARROW);
wc1.hbrBackground=(HBRUSH)GetStockObject(NULL_BRUSH);
wc1.lpszMenuName=NULL;
wc1.lpszClassName=lpszClassName1;
if(!RegisterClass(&wc1))
{
MessageBeep(0);
return (FALSE);
}
hWnd1=CreateWindow ( lpszClassName1,
lpszTitle1,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
SetLayeredWindowAttributes(hWnd1,NULL,0,NULL);
if(!hWnd1)
return (FALSE);
ShowWindow(hWnd1,nCmdShow);
UpdateWindow(hWnd1);
SetWindowPos( hWnd1, NULL, 200, 200, 500, 400, SWP_NOACTIVATE);
case WM_CLOSE:
DestroyWindow( hWnd );
return 0;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;