• ベストアンサー

フレームウィンドウを隠す(非表示)

Win2000,VC++6.0,MFCを使用しています。 Windows Media Playerの表示オプションでは「メニューバーを自動的に隠す」という設定が有ります。 これはMFCでいうCFrameWndをマウスの位置によって表示←→非表示に切替えているように見えます。 このようにクライアントウィンドウは表示したままでフレームウィンドウだけ非表示にする方法、或いは別の手法であればその方法を教えて頂ければ有り難く思います。 今のところどうすれば可能なのか検討もつきません。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.2

キャプション等を消すだけでしたら、#1さんの方法で十分だと思いますが、Media Playerのように四角形ではない形にしたいのなら、SetWindowsRgnを使うか、レイヤードウィンドウを使うことになると思います。

WiinWiin
質問者

補足

確かに凝った事をやろうとするとリージョンなんでしょうね。 私はリージョンというのを使った事が無くて思い付きませんでした。 レイヤードウィンドウは以前に使った経験が有ります。 親ウィンドウの前に表示したプロパティシートにスライダーを設けて親ウィンドウが見えるようにしたのですが、今回のように親のクライアント領域に有る子ウィンドウを残して親を透明にするという事も出来るのでしょうか。 時間が取れれば試してみたいと思いますが。

その他の回答 (2)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

#2です。 >今回のように親のクライアント領域に有る子ウィンドウを残して親を透明にするという事も出来るのでしょうか。 レイヤードウィンドウにも2種類ありまして、ウィンドウ全体に一定のアルファ値を設定する場合と、ピクセルごとに異なるアルファ値を持ったビットマップを設定する場合とがあります。今回想定されるのは後者ですね。

WiinWiin
質問者

お礼

レイヤードウィンドウについて調べてみました。 ビットマップを設定するのは面白そうですね。 あ~また憶えないといけない事が・・・ 有難う御座いました。

回答No.1

比較的簡単な方法はウインドウスタイルフラグを変更することで しょう。タイトルのあるウインドウはWS_CAPTION 等のフラグが 設定してあるので、当該のビット部分をWS_BORDERだけに設定すれば タイトル部分は消えます。WS_SYSMENUやWS_MAXIMIZEBOXも 落とす必要があるかもしれません。また、他の必要なフラグは そのまま残さなければなりません。 設定の仕方は  ::SetWindowLong( hwnd, GWL_STYLE, 新しいスタイルフラグ); です。

WiinWiin
質問者

お礼

早速の回答有難う御座います。 どんな感じになるか試して見ます。

関連するQ&A