- ベストアンサー
WinAPIでタブ付きのウィンドウを作成
- 現在WinAPI(C++)でタブ付きのウィンドウを作成しようと思っているのですが、タブコントロールとしてCreateWindowEX関数+WC_TABCONTROLで作成するしかないのでしょうか?
- タブで切り替えれる+画像の描画可能+サイズの変更可能なウィンドウを作成したいです。
- また、タブのデザインも変更したいです。Visualやイラストレータのようなドラッグでウィンドウを移動させてタブから切り離し+再度タブ化する機能も実現したいです。開発環境はMicrosoft Visual C++ 2010 Expressです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
タブのデザイン変更はオーナードローあたりに頼ることになるかと思いますが、APIオンリー、Express Editionでドッキング ウィンドウを実現するのは至難の技だと思います。 Visual Studioのスマート ドッキング ウィンドウは、BCGSoft製のMFC拡張ライブラリを使って作られているようです。 OfficeのリボンUIも同様です。 http://www.bcgsoft.com/ BCGSoftのライブラリを逆輸入する形で、Visual Studio 2008 SP1のStandard Edition以上、それとVisual Studio 2010のProfessional Edition以上には、MFC Feature Packが導入されて、スマート ドッキング ウィンドウやリボンUIその他がMFCアプリで使えるようになっています。 有料版にはMFCのソースコードが付いているので、それを参考にしてAPIに落としていくのもありかとは思いますが、MFCを完全に理解していないと読むのが困難な上に、かなりスパゲッティなのでお勧めしません。 Adobeのほうは詳しくは分かりませんが、PhotoshopやIllustratorのスマート ドッキング ウィンドウは、WindowsでもMacでも同じ仕様を確保するため、おそらくQtライブラリ+Adobe独自のクロス プラットフォーム ライブラリで実現されていると思います。 .NET Framework(C++/CLI)を使うのであれば、スマート ドッキング ウィンドウを実現するためのいくつかの無料ライブラリが存在しますが、VC++ 2010ではC++/CLIのインテリセンスが効かないし、そもそもC++/CLI自体GUIアプリ開発には向いていない特殊な言語なので、お勧めしません。 http://dobon.net/vb/dotnet/links/dockingwindow.html
その他の回答 (1)
- Wr5
- ベストアンサー率53% (2173/4061)
>現在WinAPI(C++)でタブ付きのウィンドウを作成しようと思っているのですが、 >タブコントロールとしてCreateWindowEX関数+WC_TABCONTROLで作成するしかないのでしょうか? >認識不足なら申し訳ありませんが、これはダイアログボックス内にタブを作成するものでしょうか? メインウィンドウのWM_CREATEで、クライアント領域内にタブコントロールをCreateWindowEx()…ですかね。 # さらに、タブの中身をCreateWindow()…かと。 http://wisdom.sakura.ne.jp/system/winapi/common/common11.html http://www.kumei.ne.jp/c_lang/sdk/sdk_69.htm ダイアログっぽく見えますがSDI…ですな。 >Visualやイラストレータのようなドラッグでウィンドウを移動させてタブから切り離し+ >再度タブ化するのは、どのように実現しているのでしょうか いろいろと手間が掛かっているようです。 ExpressEditionでなければMFCである程度できる…っぽいですけど。 「ドッキングウィンドウ」辺りで検索…でしょうかね。 フローティングウィンドウはまた違う…かな?
お礼
早速のご回答ありがとうございました。 教えていただいたURLは質問前にも確認していましたが、 やはりそうなんですね。タブ付きウィンドウとして作成ではなく、 タブ自体がひとつのウィンドウなんですよね。 ドッキングウィンドウというんですね。 ありがとうございます。
お礼
お礼が遅くなり申し訳ございません。 詳細まで記入いただきありがとうございました。 やはりAPIで実現するのは難しいんですね。