dポイントプレゼントキャンペーン実施中!

下記のプログラムを実行してウィンドウを閉じるボタンで閉じると、
ウィンドウは消えるのですがなぜかプロセスが残ってしまいます。

正直、お手上げなので教えて頂けると幸いです。
よろしくお願いします。

#include<windows.h>

#define APP_NAME TEXT("Sample_MainWindow")

/*ウィンドウプロシージャ*/
LRESULT CALLBACK WindowProc(
HWND hWnd, UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}

/*基本的なメッセージの処理*/
return DefWindowProc(hWnd, uMsg,wParam,lParam);

}

/*WinMain*/
int WINAPI WinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
PSTR lpCmdLine ,
int nCmdShow)
{
HWND hWnd;
WNDCLASS wc;
MSG msg;

wc.style= CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc= DefWindowProc;
wc.cbClsExtra= 0;
wc.cbWndExtra= 0;
wc.hInstance= hInstance;
wc.hIcon= LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor= LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground= (HBRUSH)COLOR_BACKGROUND + 1;
wc.lpszMenuName= NULL;
wc.lpszClassName= APP_NAME;

if (!RegisterClass(&wc)){
MessageBox(NULL,TEXT("ウィンドウクラスの作成に失敗しました"),NULL,MB_OK);
return 0;
}

hWnd = CreateWindow(
APP_NAME, TEXT("Window Title"),
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL
);

if(hWnd == NULL){
MessageBox(NULL,TEXT("ウィンドウの生成に失敗しました"),NULL,MB_OK);
return 0;
}

/*メッセージループ*/
while(GetMessage(&msg, NULL,0,0)){
DispatchMessage(&msg);
}

return (int)msg.wParam;
}

A 回答 (2件)

まぁ、私もそういうメッセージループ書いたような気がしますけども……



http://msdn.microsoft.com/ja-jp/library/cc364699 …
より……
>警告 GetMessage 関数は、0 以外の値、0、-1 のいずれかを返します。したがって、次のようなコードは避けてください。
>while (GetMessage(lpMsg, hWnd, 0, 0)) ...
>このようなコードを作成すると、GetMessage 関数が失敗して -1(0xFFFFFFFF、つまり TRUE)が返った場合、ループが持続し、致命的なアプリケーションエラーを発生させる可能性があります。

とのことなので…GetMessage()がなにを返却しているか確認してみてはどうですかね?


って、見直してたら…このウィンドウプロシージャ、使われていないじゃないですか。
WM_DESTROYもDefWindowProc()が処理しているので…WM_QUITが飛んでこないんじゃないかと。
>wc.lpfnWndProc= DefWindowProc;
で自前のウィンドウプロシージャ使わん!と設定していますし。
    • good
    • 0

wc.lpfnWndProc= DefWindowProc;


これを
wc.lpfnWndProc= WindowProc;
にしてみたらどうかな?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!