首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

DestroyWindow( hWnd )为何是退出应用程序?而不仅仅是销毁窗体

2012-12-16 
DestroyWindow( hWnd )为什么是退出应用程序?而不仅仅是销毁窗体?我的应用程序有很多窗体,为什么Destroy其

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





引用:
你用的操作系统是Windows吧,里边当然都是各种窗口了,销毁主窗口,就相当于关闭了程序了,估计Windows就是这么设计的,所以叫Windows

[其他解释]
我明白了。原因是:
WM_CLOSE 消息会发送WM_DESTROY消息,然后处理WM_DESTROY消息时用PostQuitMessage。

我的代码里有:


case WM_CLOSE:
DestroyWindow( hWnd );
return 0;

case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
 



引用:
你确定你是因为调用了DestroyWindow造成的程序退出??如果你的程序只是上面两句的话,不调用Destroy也会退出的,根本就没有消息循环处理呀?

[其他解释]
更准确的说,应该是调用DestroyWindow( hWnd )后,系统会发送WM_DESTROY消息。


引用:
我明白了。原因是:
WM_CLOSE 消息会发送WM_DESTROY消息,然后处理WM_DESTROY消息时用PostQuitMessage。

我的代码里有:

C/C++ code?12345678case WM_CLOSE:    DestroyWindow( hWnd );    return 0; case WM_DESTROY:    PostQui……

热点排行