我用vs2010寫的c++程式,創建了視窗,回呼函式也能執行,但是就是在點關閉按鈕的時候,僅僅銷毀了視窗界面,后臺程式不退出~~
以前我才vc6.0里面寫的時候,好像是一樣的代碼 就可以正常退出了
下面是我的代碼
#include <Windows.h>
LRESULT CALLBACK cfy_CallBack(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
WNDCLASS start_form;
start_form.cbClsExtra=NULL;
start_form.cbWndExtra=NULL;
start_form.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
start_form.hCursor=LoadCursor(NULL,IDC_ARROW);
start_form.hIcon=LoadIcon(NULL,IDI_ASTERISK);
start_form.hInstance=hInstance;
start_form.lpfnWndProc=cfy_CallBack;
start_form.lpszClassName="cfy_form";
start_form.lpszMenuName=NULL;
start_form.style=CS_HREDRAW|CS_VREDRAW;
RegisterClass(&start_form);
HWND cfy_hwnd;
cfy_hwnd=CreateWindow("cfy_form","犀利的",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(cfy_hwnd,SW_NORMAL);
UpdateWindow(cfy_hwnd);
MSG msg;
while (GetMessage(&msg,cfy_hwnd,NULL,NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return false;
}
LRESULT CALLBACK cfy_CallBack(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
/* switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
}
*/
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
那一段注釋的代碼,不管有沒有都是一樣的,點了關閉后只是銷毀視窗界面,還要去任務管理器銷毀程式,而且程式占用cpu是50%之多。
uj5u.com熱心網友回復:
是不是start_form沒有關閉uj5u.com熱心網友回復:
我用vc6.0試了一下也是相同的情況,我也找不出哪里有毛病uj5u.com熱心網友回復:
把GetMessage第二個引數設定為空即可。原因自己分析明白,對你很好處uj5u.com熱心網友回復:
MSDN里明確說:GetMessage的回傳值可能是nonzero、Zero or -1明確告誡不要這樣寫代碼:while (GetMessage( lpMsg, hWnd, 0, 0))
而你恰恰這么干了。
uj5u.com熱心網友回復:
受教了、、、轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151640.html
上一篇:BCB6不能打開
