電子書籍の厳選無料作品が豊富!

WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int nCS)
{
WNDCLASSwc;
HWNDhW;
MSGms;
wc.lpszClassName="goo";
wc.lpfnWndProc=(WNDPROC)WinProcedure;
wc.hInstance=hI;
wc.style=CS_HREDRAW|CS_VREDRAW;
wc.cbClsExtra=NULL;
wc.cbWndExtra=NULL;
wc.hIcon=LoadIcon(NULL,IDI_EXCLAMATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName=NULL;
RegisterClass(&wc);
hW=CreateWindow
(
"goo",
"教えてgoo",
WS_OVERLAPPED|WS_CAPTION|WS_THICKFRAME
|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU,
0,
0,
640,
480,
NULL,
NULL,
hI,
NULL
);
ShowWindow(hW,nCS);
UpdateWindow(hW);
while(GetMessage(&ms,NULL,NULL,NULL))
{
TranslateMessage(&ms);
DispatchMessage(&ms);
}
return (ms.wParam);
}

のプログラムが2回目に起動したとき1回目の起動を強制終了するにはどうしたらいいのでしょうか?

A 回答 (2件)

>何か問題はないでしょうか?



追加するものとしては、それでいいと思いますが、なぜ WM_DESTROY を送るのですか?
WM_DESTROY は DestroyWindow が送るメッセージなので、DestroyWindow が実行されなくなります。

×ボタンを押した時に「終了しますか?」とか「保存しますか?」と聞いてくるようなアプリは、WM_CLOSE にその処理を入れることになりますが、強制終了させる場合には表示させたくないので、例えば WM_FORCE_EXIT のようなメッセージを #define などで作成し、そのメッセージを受けて、アプリの終了処理を実行するような感じになると思います。
    • good
    • 0
この回答へのお礼

失礼しました
WM_CLOSEに変えさせてもらいました
勿論動いてます
大変助かりました
ありがとうございました

お礼日時:2003/03/10 13:04

最も簡単な方法は、FindWindow でウィンドウを探して、WM_CLOSE を送ることです。


(起動されているが、まだウィンドウが作成されていない場合は見つかりません)

この回答への補足

WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int nCS)
{
WNDCLASS wc;
HWND hW,hPW;//hPWを追加
MSG ms;

hPW=FindWindow("goo","教えてgoo");//追加
if(hPW!=NULL)SendMessage(hPW,WM_DESTROY,0,0);//追加

wc.lpszClassName ="goo";
wc.lpfnWndProc =(WNDPROC)WinProcedure;
wc.hInstance =hI;
wc.style =CS_HREDRAW|CS_VREDRAW;
wc.cbClsExtra =NULL;
wc.cbWndExtra =NULL;
wc.hIcon =LoadIcon(NULL,IDI_EXCLAMATION);
wc.hCursor =LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground =(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName =NULL;
RegisterClass(&wc);
hW=CreateWindow
(
"goo",
"教えてgoo",
WS_OVERLAPPED|WS_CAPTION|WS_THICKFRAME
|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU,
0,
0,
640,
480,
NULL,
NULL,
hI,
NULL
);
ShowWindow(hW,nCS);
UpdateWindow(hW);
while(GetMessage(&ms,NULL,NULL,NULL))
{
TranslateMessage(&ms);
DispatchMessage(&ms);
}
return (ms.wParam);
}

上記のように1行修正2行追加しました
それらしい動作をしているみたいですが確信が持てません
何か問題はないでしょうか?
よろしくお願いします

補足日時:2003/03/10 07:19
    • good
    • 0

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