ページ 11

子ウィンドウって…

Posted: 2012年10月15日(月) 23:34
by だんごさん
Windows系のプログラムを最近興味持ってやってみたんですが、ちょっと気になったことがあってトピックを立てさせてもらいました。
Windowsのプログラムで親ウィンドウは大体常に表示されますが、子ウィンドウなど何かのイベントで表示させたい場合、ShowWindow?みたいなので表示しますが、それをプログラム上から閉じた場合、再度ウィンドウを表示するのはどうやってるんでしょうか?
初めは完全に閉じずに、まるで閉じたかのようにウィンドウを消し、またイベントが起きた時に表示してるのかなと思ったのですが、これであってるのですか?
普通に考えてこうだろ…とか、何言ってるんだ?…とか思うかもしれませんがお願いします。

Re: 子ウィンドウって…

Posted: 2012年10月16日(火) 01:04
by 赤鬼
だんごさん さんが書きました:Windows系のプログラムを最近興味持ってやってみたんですが、ちょっと気になったことがあってトピックを立てさせてもらいました。
Windowsのプログラムで親ウィンドウは大体常に表示されますが、子ウィンドウなど何かのイベントで表示させたい場合、ShowWindow?みたいなので表示しますが、それをプログラム上から閉じた場合、再度ウィンドウを表示するのはどうやってるんでしょうか?
初めは完全に閉じずに、まるで閉じたかのようにウィンドウを消し、またイベントが起きた時に表示してるのかなと思ったのですが、これであってるのですか?
普通に考えてこうだろ…とか、何言ってるんだ?…とか思うかもしれませんがお願いします。
単純にもう一度作って表示すればいいのでは?

コード:

        case WM_KEYDOWN:

		hwndChild = CreateWindow(  "Child",    /*  ウインドウ作成          */  
                            "Child Window",
                            WS_CHILD | WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            100,
                            150,
                            hwnd,
                            (HMENU)NULL,
                            GetHInstance(),
                            0);
                ShowWindow(hwndChild, SW_SHOW);
                UpdateWindow(hwndChild);
		break;
のように。
一つしかウィンドウを作らないのでしたら、それなりの制御が必要だと思いますが。

Re: 子ウィンドウって…

Posted: 2012年10月17日(水) 01:19
by オカピーα
CreateWindow関数で一発だと思います

Re: 子ウィンドウって…

Posted: 2012年10月17日(水) 10:21
by だんごさん
ご返信ありがとうございます。
やはり隠して表示ではなく、完全に削除&作成なんですね。
参考になりました。

Re: 子ウィンドウって…

Posted: 2012年10月17日(水) 16:36
by ISLe
頻繁に表示するウィンドウならShowWindowのSW_HIDEで非表示にして、SW_SHOW系で再表示することもしばしばあります。

閉じるときにDestroyWindowしたらCreateWindowするしかないですが、DestroyWindowしなければいけないというルールはないです。