子ウィンドウをアクティブにするには?

解決


どら  2009-05-17 02:20:49  No: 70162

XP VC++2005 SDK で開発しています。

メインウィンドウに対して子ウィンドウを
WS_CHILD | WS_CLIPSIBLINGS | WS_OVERLAPPEDWINDOW
で作成しているのですが、子ウィンドウがアクティブな状態でも
ウィンドウのタイトルの色が非アクティブな色にしかなりません。
いわゆる薄い青色の状態です。アクティブな子ウィンドウは青色に
なって欲しいのですが、どうしてもアクティブな青色になってくれません。
アクティブな子ウィンドウのタイトルの色を青色の状態にするにはどうしたらいいでしょうか?


subaru  2009-05-19 02:13:48  No: 70163

作成したいアプリケーションはMDIですか?

猫でもわかるプログラミングならこの辺でしょうか。
http://homepage2.nifty.com/c_lang/sdk/sdk_83.htm


どら  2009-05-19 19:08:15  No: 70164

ご指摘のとおりMDIを作りたいのですが、
ツールバー等ドキュメントウィンドウでない別のウィンドウも子ウィンドウとして作りたいと思っています。
しかし、WS_CHILDを指定すると必ずウィンドウタイトルが非アクティブになってしまいます。
子ウィンドウのアクティブ・非アクティブが制御できれば解決するとは思っていたのですが。
しかもMDIですが既製品のMDIを使わず自分でMDIの仕組みが作れれば良いなと思っています。
ドキュメントウィンドウには色々と情報を持たせたいのでクラス化したいと思っていますので。


どら  2009-05-19 22:14:31  No: 70165

猫でもわかるプログラミングを参考にしてSDKでMDIを作ってみました。

ですが、駄目でした。MDIにしているのにどうしてもアクティブな色になってくれません。
WS_CHILDを指定するとタイトルバーが必ず非アクティブな色になります。
これは仕様なんでしょうかね。

他のアプリケーションを見ると子ウィンドウでもアクティブな色になっている様なのですが、
どうやっているのか不思議に思います。

このまま解決しなければ自前でタイトルバーを作らなければいけないかなと思っていたりします。


subaru  2009-05-20 00:25:36  No: 70166

>WS_CHILDを指定するとタイトルバーが必ず非アクティブな色になります。
>これは仕様なんでしょうかね。

MDI子ウインドウが正しく作成されているなら
その辺は適切に処理されそうですけど・・・
DefMDIChildProcが呼ばれていないとか。


どら  2009-05-20 02:38:36  No: 70167

恥ずかしながら、ご指摘の通りでした。
普通のウィンドウプロシージャをコピーして作ったので、
DefFrameProcとDefMDIChildProcを呼び出してませんでした。
MDIのアクティブ化にはどうにか成功しました。
ありがとうございました。
しかし、MDIでない子ウィンドウの場合はタイトルバーは
非アクティブなんですね、それが不思議で仕方が無いです。
ツールボックスなどはどうしようかと思っています。
みなさん子ウィンドウの場合はどうやってアクティブ化しているんでしょうかね。


どら  2009-05-20 02:41:26  No: 70168

既製品のMDIが使えるかどうか分かりませんが、
皆さんに聞ける範囲はここまでかと思いますので、
解決のチェックをします。
subaruさん、ありがとうございました。


subaru  2009-05-20 03:01:34  No: 70169

>しかし、MDIでない子ウィンドウの場合はタイトルバーは
>非アクティブなんですね、それが不思議で仕方が無いです。

MDIでない子ウィンドウはコントロールになることが多いので
タイトルバーなどを持つ特殊なウインドウはあまり作ることが
ないんじゃないかと思います。

タイトルバーを持つ子ウィンドウを敢えてSDIで作るとかいうことになると、
一応 SendMessage で WM_NCACTIVATE を送ることで
任意のタイミングで青色に変えることができそうです。

>ツールボックスなどはどうしようかと思っています。

ツールボックスもMDI子ウインドウとして作ることができるはずです。
MDIアプリの一般的な作成方法は詳しくないので
そうすべきかどうかは知りません。


どら  2009-05-20 18:02:02  No: 70170

subaruさん、追記ありがとうございます。
>一応 SendMessage で WM_NCACTIVATE を送ることで
>任意のタイミングで青色に変えることができそうです。
私もWEBで検索していてWM_NCACTIVATEにたどり着きましたが、
見たサンプルがフローティングだったので違うのかなと思っていました。
試してみようと思います。
>ツールボックスもMDI子ウインドウとして作ることができるはずです。
なるほど、最大化とか持たないようにしたら作れそうですね。
これも試してみます。
>MDIアプリの一般的な作成方法は詳しくないので
>そうすべきかどうかは知りません。
私もMDIを作るのは初めてでこれから試行錯誤して作っていこうと思います。
MDIのドキュメントデータをクラス化して持たせたいのですが、
ちょっと工夫が必要そうです。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加