[ATL COM]でツールバーを登録するツールを作ろうとしています。
コンボボックスを設定するのに[CoolBar]を使うのが良さそうだと思いサンプルを
探してみましたが、内部の設定でメインウインドウを参照していました。
[ATL COM]の作りと違っている為、サンプルの内容が当てはまりません。
そこで、[ATL COM]に[CoolBar]を設定する方法、又はサイトをご存知の方がおられ
ましたら宜しくお願い致します。
環境は、VC++6.0です。
一体どの「サンプル」を見て「できない」と言っているのでしょうか。
ちょっと調べれば分かるはずですが、VC++では、"CooloBar"ではなく"Rebar"と
呼称しています。
microsoftやcodeprojectに行けばいろいろとサンプルがありそうですが。
ATLは知りませんが、WTLは標準でクラス化されています。
RAPT樣、コメントありがとうございます。
>一体どの「サンプル」を見て「できない」と言っているのでしょうか。
http://support.microsoft.com/kb/q246234/
http://www.codeproject.com/atl/ietoolbartutorial.asp
などをPCに組み込んで色々いじっています。
>ちょっと調べれば分かるはずですが、VC++では、"CooloBar"ではなく"Rebar"と
>呼称しています。
申し訳ございません。たまたま参考にしたサイトで"CooloBar"としていたので
そのまま記述してしまいました。
>microsoftやcodeprojectに行けばいろいろとサンプルがありそうですが。
>ATLは知りませんが、WTLは標準でクラス化されています。
WTL は、あまり耳にしていなかったので対象外でした。MFC で作成するように
簡単なのでしょうか?だとすれば試したみたいです。
(ただ、なるべく ATL で作成したいのですが・・・)
もともとは リソースの IDD-DIALOGBAR が設定したかったのですが、探し回って
見ても見つかるのは MFC(exe) の物ばかりでしたので、コンボボックスがセット
できそうな Coolbar(Rebar) のことを聞いたので使ってみようかと思いこちらに
お邪魔した次第です。
お力添え頂けますよう宜しくお願いします。
WTLは、Windows Template Libraries で、MSが公式に提供していた
テンプレート集で、MFCのようなクラスライブラリではありません。
これはヘッダのみで提供されていたものです。
(ただし、公式サポートはなし、今はオープンソース化)
http://sourceforge.net/projects/wtl/
ATL/SDKにより実装されたヘッダ群なので、コードを読んでみるだけでも
参考になるかもしれません。
WTL7.0では、CReBarCtrlとしてAtlCtrls.hに定義されています。
RAPT樣、再度コメントありがとうございます。
前回の書込みの後、独自に調査の結果、WTL7.1をマイクロソフトのサイトから
ダウンロード、 AtlApp60.awx を指定のフォルダに格納し setup.js 実行後
「新規作成」に [ ATL/WTL AppWizard ] が追加されました。
[ ATL COM AppWizard ] 同様、プロジェクト名に仮の名称を入力し<OK>を
実行すると「 ATL/WTL AppWizard - ステップ1/2 」が出力されましたが、
ここでどれを設定すれば良いのかよく分からずストップしています。
参考として見つけた「The So-Software Studio」内「ATL/WTL」-「ウィザード」
の「ATL/WTL AppWizard」(http://home.att.ne.jp/banana/akatsuki/doc/atlwtl/atlwtl08-01/index.html)の説明を元に「ステップ1/2」を調べると、
「Select application type:」は【Dialog Based】を設定すれば良さそうでし、
「Select project options:」は【Create as a COM Server】,【Generate .CPP Files】,
【Add Common Controls Manifest】辺りではないか思います。
さらに「ステップ2/2」の場合は、
「Select UI features:」は【Toolbar】,【Rebar】,【Command Bar】を指定
するのではと・・・。
確証が取れれば良いのですが、なにぶん経験が浅い為判断が付きません。
この様な記述をしたサンプルがあれば本当は嬉しいのですが、ご教授して頂き
ますようお願い致します。
申し訳ございません。
「Select application type:」で【Dialog Based】を選択すると
「ステップ2/2」では何も選択できないことが、たった今分かりました。
これでは何を設定すれば"Rebar"が作成できるか分からなくなってしまいました。
なにとぞご指導下さいます様、重ねてお願い致します。
WTL はいじったことがないのでわかりませんが、WTL ってのは ATL を使って Windows アプリケーションを組むための、MFC の競合みたいな位置づけだと理解しております。
#間違っていたらツッコミください
ATL を使っているとはいえ、ATL の本領たる COM 作りは、WTL でもできるんでしょうか?
どうも最近、「IE のツールバー」を作りたいのに、「Windows アプリケーションの上にくっついてるツールバー」を追及している例をいくつか見ます。
作り方は全然違います。
以前私が参考にしたページを書いておきます。WTLですが参考になるでしょうか。
http://www.codeproject.com/wtl/toolband.asp
# 上記サンプルはさほどWTLに依存していないので比較的分かりやすい
# かと思われます。baseは同じATLですし。
WTLのATLとの差異は主にGUI周りをサポートしていることでしょうか。
私は、WTLはATLを拡張したものと位置付けています。
# あと、MFCを使わずともCStringが使えること。
まぁ、最近のものはMFCと同じような形でラップされているので
MFCに似ているようにも感じられるかもしれませんが。
# また、ほぼ同じように操作できます。
RAPT樣、再度コメントありがとうございます。
>以前私が参考にしたページを書いておきます。WTLですが参考になるでしょうか。
>http://www.codeproject.com/wtl/toolband.asp
早速、サンプルプログラムをダウンロードし、ビルドしてみましたが、下記の
メッセージが表示され正常終了しませんでした。
*<エラーメッセージ>--------------------------------------------------*
C:〜\atlapp.h(396) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atlapp.h(397) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atlapp.h(595) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atlapp.h(599) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atlapp.h(600) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atlapp.h(603) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atlapp.h(844) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atluser.h(39) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atluser.h(39) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atluser.h(57) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atluser.h(82) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atluser.h(205) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atluser.h(490) : コンパイルされたクラスのテンプレートのインスタンス化
'WTL::CMenuT<t_bManaged>' の参照を確認してください
C:〜\atlgdi.h(78) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atlgdi.h(86) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atlgdi.h(88) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atlgdi.h(528) : error C2872: 'ATL' : あいまいなシンボルです。
C:〜\atlgdi.h(682) : コンパイルされたクラスのテンプレートのインスタンス化
'WTL::CBitmapT<t_bManaged>' の参照を確認してください
C:〜\toolband_src\StdAfx.cpp(8) : error C2856:
#pragma hdrstop は、#if ブロックの中に置いてはいけません。
C:〜\toolband_src\StdAfx.cpp(9) : error C2856:
#pragma hdrstop は、#if ブロックの中に置いてはいけません。
cl.exe の実行エラー
ToolBand.dll - エラー 18、警告 0
*-------------------------------------------------------------------*
なぜ、このようなことになったのか原因が分かりません。対処の仕方をご存知の
方がいらっしゃいましたらお教え下さいます様宜しくお願い致します。
(ソースには何も手を加えていないので、私の使用している VC++6.0 の設定に
不備があった為と思われますが・・・)
WTLのインストールとインクルードパスの設定は適切にできていますか?
詳しい作成手順は上記のページに書いてあるのでそれをよく読んで進めてください。
それから、当該ページをよくみたら、そもそもATLのコードを基に作った
とかあったので、一応そのリンクも張っておきます。(こっちの方が早いかも)
http://www.codeproject.com/atl/rbdeskband.asp
RAPT樣、返信遅れまして申し訳ございません。
>それから、当該ページをよくみたら、そもそもATLのコードを基に作った
>とかあったので、一応そのリンクも張っておきます。(こっちの方が早いかも)
>http://www.codeproject.com/atl/rbdeskband.asp
と言うことでしたので調べてみると、教えて頂いたページ(RBDeskBand ATL Object Wizard)と
それに関連するページ(Internet Explorer Toolbar (Deskband)Tutorial)が見つかりました。
関連ページ:http://www.codeproject.com/atl/ietoolbartutorial.asp
これを見ると、VC++に RBDeskBand ATL Object Wizard を組み込むことにより
簡単にツールバーのベースが出来るようです。
事実、Internet Explorer Toolbar (Deskband)Tutorial の Creating The DeskBand Object まで
設定をしてビルドすると部品無いツールバーが出来上がっていました。
[表示]-[ツールバー]にも自動的に項目が追加されているのには驚きました。
(ただ、ツールバーになにやら勝手に文字が書かれていたりしていますが・・・)
確かにこれだと早いです。今まで悩んでいたのが嘘みたいです。
さらに、Internet Explorer Toolbar (Deskband)Tutorial に載っていた
CWindowImpl ATL Object Wizard を使うとツールバーの部品も簡単に作れそうです。
(http://www.codeproject.com/atl/rbcwindowimpl.asp)
ざっと見では部品の入れ物を作るだけで、中身については自分で設定するみたいです。
ちょっと CWindowImpl ATL Object Wizard を使ってみましたが、まだ部品は
乗って(表示されて)いません。まだまだ先は長そうです。
当初の「WTL」から「ATL」に変わってしまいましたが、これなら素人の私でも
出来そうな気がしてきました。ですが、まだまだつまずきそうなので「解決」は
チェックしないでおきます。
引き続きご協力頂けますよう宜しくお願い致します。
別の質問が発生しましたが、ツールバーに関しては解決していますので
この質問の件は終了します。ご協力ありがとうございました。
ツイート | ![]() |