
下記のプログラムを実行してウィンドウを閉じるボタンで閉じると、
ウィンドウは消えるのですがなぜかプロセスが残ってしまいます。
正直、お手上げなので教えて頂けると幸いです。
よろしくお願いします。
#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件)
- 最新から表示
- 回答順に表示
No.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;
で自前のウィンドウプロシージャ使わん!と設定していますし。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
ラジオボタンの初期指定
-
勝手にウィンドウが開いて止ま...
-
エクセルで1行目から3行目が消...
-
ExcelのBOOKが消えた!
-
Vba LongPtrについて教えてくだ...
-
検索の画面がでなくなってしま...
-
Delphi5のボタンクリックでWeb...
-
ウィンドウの位置を変えるには...
-
Excel :行や列の固定(スクロー...
-
四角形と線との関係(C言語・API)
-
簡単な質問だと思いますが、、...
-
Console.WriteLine で表示されない
-
Alt+P,Alt+NをPostmessageで送...
-
エクセルで行のロックの仕方
-
DirectXを使用したゲームのキャ...
-
netbeans 6.0.1について、新規作成
-
pythonでふたつのアニメーショ...
-
Excel で作業してる行だけ拡大...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
ラジオボタンの初期指定
-
勝手にウィンドウが開いて止ま...
-
Vba LongPtrについて教えてくだ...
-
検索の画面がでなくなってしま...
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
[VBA] UserForm を Excel の W...
-
VBA .Value=.Value ?
-
作成したウインドウのサイズを...
-
Console.WriteLine で表示されない
-
エクセルで1行目から3行目が消...
-
「&HFFFF」「&H1A」とは?
-
【VB2008】 マウス操作の一時的...
-
UWSCで特定のChromeのタブをア...
-
他のアプリケーションの終了処理
-
MFCでハンドルを取得するには
-
VBAで単一ブック複数窓を閉じる...
-
EnumChildWindowsの使い方(VBA)
おすすめ情報