我用CreateWindow建立一个窗口,
但关闭窗口时消息循环收不到关闭窗口消息,
以下代码在我按下关闭窗口按钮时,
窗口是关闭了,
程序却没退出,
请高手帮忙啊.#include "stdafx.h"
HWND hm;
HINSTANCE hi;ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)DefWindowProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = 0;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = 0;
wcex.lpszClassName = "w";
wcex.hIconSm = 0;
return RegisterClassEx(&wcex);
}
void Swnd(){
hm=CreateWindow("w","aaaaaaa",WS_OVERLAPPEDWINDOW,0,0,400,400,NULL, NULL, hi, NULL);
ShowWindow(hm,SW_SHOW);
UpdateWindow(hm);
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
BYTE u;MSG mg;UINT m;
hi=hInstance;
MyRegisterClass(hInstance);
Swnd();
while(GetAsyncKeyState(27)==0){
u=PeekMessage(&mg,hm,0,0xffff,PM_REMOVE);
if(u){
m=mg.message;
if(m==WM_QUIT)break;
if(m==WM_CLOSE)break;
if(m==WM_DESTROY)break;
if(hm==0)break;
DispatchMessage(&mg);
}
}
return 0;
}
但关闭窗口时消息循环收不到关闭窗口消息,
以下代码在我按下关闭窗口按钮时,
窗口是关闭了,
程序却没退出,
请高手帮忙啊.#include "stdafx.h"
HWND hm;
HINSTANCE hi;ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)DefWindowProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = 0;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = 0;
wcex.lpszClassName = "w";
wcex.hIconSm = 0;
return RegisterClassEx(&wcex);
}
void Swnd(){
hm=CreateWindow("w","aaaaaaa",WS_OVERLAPPEDWINDOW,0,0,400,400,NULL, NULL, hi, NULL);
ShowWindow(hm,SW_SHOW);
UpdateWindow(hm);
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
BYTE u;MSG mg;UINT m;
hi=hInstance;
MyRegisterClass(hInstance);
Swnd();
while(GetAsyncKeyState(27)==0){
u=PeekMessage(&mg,hm,0,0xffff,PM_REMOVE);
if(u){
m=mg.message;
if(m==WM_QUIT)break;
if(m==WM_CLOSE)break;
if(m==WM_DESTROY)break;
if(hm==0)break;
DispatchMessage(&mg);
}
}
return 0;
}
解决方案 »
- 关于CEdit的OnPaint问题
- 准备用VC做个视频监控,大家帮忙哦。
- 如何获得Report风格的CListCtrl头部的高度
- 一个有关于BIND的问题
- 在DLL中,如何FreeLibrary当前DLL,那个ModuleHandle怎么获得呢?
- 新人报道!
- 菜鸟的一个问题
- 如何实现IP包转发的功能
- 哪里有完整的中文api参考下载???我下了好几本,都是不完整的
- 各位大哥:我想把用LoadResource读出的文件的前n位存入一个string中,该怎末办?
- 用custom appwizard生成一个向导,请问如何指定利用该向导生成的工程中的link和debug选项内容
- 请教各位一个输出子集的问题
窗口是用create和destroy来生成和销毁的,但程序是你的所编的
程序的结束,一个是系统级的,一个是语言级的,窗口随时可关。
而当程序执行到return 0才算结束了这个进程。
wcex.lpfnWndProc = (WNDPROC)DefWindowProc;
这里不要用缺省得函数,要自己定义~~
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM w, LPARAM l)
{
switch(msg)
{
case WM_CLOSE:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd, msg, w, l);
}
接收到WM_CLOSE,发送WM_QUIT消息,要不然是没有WM_QUIT消息的。。
while(GetAsyncKeyState(27)==0){
u=PeekMessage(&mg,hm,0,0xffff,PM_REMOVE);
if(u){
m=mg.message;
if(m==WM_QUIT)break;
if(m==WM_CLOSE)break;
if(m==WM_DESTROY)break;
if(hm==0)break;
DispatchMessage(&mg);
}
}这里PeekMessage(&mg,hm,0,0xffff,PM_REMOVE);里面的hm改为NULL, peek所有消息。
只要if(m==WM_QUIT)break;就可以了
这样可以吗?