dポイントプレゼントキャンペーン実施中!

現在WinAPI(C++)でタブ付きのウィンドウを作成しようと思っているのですが、
タブコントロールとしてCreateWindowEX関数+WC_TABCONTROLで作成するしかないのでしょうか?
認識不足なら申し訳ありませんが、これはダイアログボックス内にタブを作成するものでしょうか?

行いたいのは、タブで切り替えれる+画像の描画可能+サイズの変更可能なウィンドウなのですが、
また、タブのデザインも変更できればいいんですが・・・

Visualやイラストレータのようなドラッグでウィンドウを移動させてタブから切り離し+
再度タブ化するのは、どのように実現しているのでしょうか

開発環境はMicrosoft Visual C++ 2010 Expressです。

状況説明不足で申し訳ありませんが、ご教示お願いします。

A 回答 (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.h …
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ございません。
詳細まで記入いただきありがとうございました。

やはりAPIで実現するのは難しいんですね。

お礼日時:2011/03/13 18:17

>現在WinAPI(C++)でタブ付きのウィンドウを作成しようと思っているのですが、


>タブコントロールとしてCreateWindowEX関数+WC_TABCONTROLで作成するしかないのでしょうか?
>認識不足なら申し訳ありませんが、これはダイアログボックス内にタブを作成するものでしょうか?

メインウィンドウのWM_CREATEで、クライアント領域内にタブコントロールをCreateWindowEx()…ですかね。
# さらに、タブの中身をCreateWindow()…かと。

http://wisdom.sakura.ne.jp/system/winapi/common/ …
http://www.kumei.ne.jp/c_lang/sdk/sdk_69.htm
ダイアログっぽく見えますがSDI…ですな。

>Visualやイラストレータのようなドラッグでウィンドウを移動させてタブから切り離し+
>再度タブ化するのは、どのように実現しているのでしょうか

いろいろと手間が掛かっているようです。
ExpressEditionでなければMFCである程度できる…っぽいですけど。
「ドッキングウィンドウ」辺りで検索…でしょうかね。
フローティングウィンドウはまた違う…かな?
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。
教えていただいたURLは質問前にも確認していましたが、
やはりそうなんですね。タブ付きウィンドウとして作成ではなく、
タブ自体がひとつのウィンドウなんですよね。

ドッキングウィンドウというんですね。
ありがとうございます。

お礼日時:2011/03/02 00:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!