- ベストアンサー
フレームウィンドウを隠す(非表示)
Win2000,VC++6.0,MFCを使用しています。 Windows Media Playerの表示オプションでは「メニューバーを自動的に隠す」という設定が有ります。 これはMFCでいうCFrameWndをマウスの位置によって表示←→非表示に切替えているように見えます。 このようにクライアントウィンドウは表示したままでフレームウィンドウだけ非表示にする方法、或いは別の手法であればその方法を教えて頂ければ有り難く思います。 今のところどうすれば可能なのか検討もつきません。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
キャプション等を消すだけでしたら、#1さんの方法で十分だと思いますが、Media Playerのように四角形ではない形にしたいのなら、SetWindowsRgnを使うか、レイヤードウィンドウを使うことになると思います。
その他の回答 (2)
- titokani
- ベストアンサー率19% (341/1726)
#2です。 >今回のように親のクライアント領域に有る子ウィンドウを残して親を透明にするという事も出来るのでしょうか。 レイヤードウィンドウにも2種類ありまして、ウィンドウ全体に一定のアルファ値を設定する場合と、ピクセルごとに異なるアルファ値を持ったビットマップを設定する場合とがあります。今回想定されるのは後者ですね。
お礼
レイヤードウィンドウについて調べてみました。 ビットマップを設定するのは面白そうですね。 あ~また憶えないといけない事が・・・ 有難う御座いました。
- Situgyosya
- ベストアンサー率41% (21/51)
比較的簡単な方法はウインドウスタイルフラグを変更することで しょう。タイトルのあるウインドウはWS_CAPTION 等のフラグが 設定してあるので、当該のビット部分をWS_BORDERだけに設定すれば タイトル部分は消えます。WS_SYSMENUやWS_MAXIMIZEBOXも 落とす必要があるかもしれません。また、他の必要なフラグは そのまま残さなければなりません。 設定の仕方は ::SetWindowLong( hwnd, GWL_STYLE, 新しいスタイルフラグ); です。
お礼
早速の回答有難う御座います。 どんな感じになるか試して見ます。
補足
確かに凝った事をやろうとするとリージョンなんでしょうね。 私はリージョンというのを使った事が無くて思い付きませんでした。 レイヤードウィンドウは以前に使った経験が有ります。 親ウィンドウの前に表示したプロパティシートにスライダーを設けて親ウィンドウが見えるようにしたのですが、今回のように親のクライアント領域に有る子ウィンドウを残して親を透明にするという事も出来るのでしょうか。 時間が取れれば試してみたいと思いますが。