先日、Visual C++ 6.0 から Visual C++.NET に移行しました。
.NET では、クラスウィザードがないことに戸惑っております。
MFCを使ってアプリを開発していましたところ、
ツールバーに新しいボタンを追加し、イベントの処理をしようとしましたら、
クラスウィザードがなく、どうやってメッセージハンドラを追加すれば良いかが
わからなくて困っております。
右クリックで「イベントの追加」などのものもありません。
追加したいのは、「CMainFrame」クラスです。
初心者な質問ですが、よろしくお願いします。
クラスビューでCMainFrameを右クリックして「プロパティ」を選択します。
プロパティウインドウが表示されるのでその上部にある「イベント」、「オーバーライ
ド」、「メッセージ」というボタンを押下してみてください。
クラスビューの、
・「CMainFrame」を選択し、右クリック「プロパティ」では
上部のドロップダウンリストに「VCCodeClass」と表示された
プロパティウィンドウが開き、イベント・オーバーライド・メッセージともに、
何も表示されません。
・「CMainFrame」をダブルクリックすると、
上部に「CMainFrame VCCodeClass」と表示されたプロパティウィンドウが開き、
こちらは、イベント・オーバーライド・メッセージともに、色々な内容が表示されま
す。
特に、「イベント」では、メニューバーのIDと、
アクセラレータのIDがありますが、
追加したボタンのID「ID_BUTTON_TST」はありません。
これは、メニューバーにも、このIDをもったメニューを
追加しないといけない、ということでしょうか?
詳しく状況を説明すると、
作成したのは、「MFCアプリケーション」で、
プロジェクト名は「vctbar」、SDIです。
そして、アップウィザードを完了させた直後に、
ツールバーに新たにボタンを作成しました。
このボタンのIDは、「ID_BUTTON_TST」です。
そして、このボタンが押されたときに、
呼ばれる関数を「CMainFrame」に作りたいわけです。
>特に、「イベント」では、メニューバーのIDと、
>アクセラレータのIDがありますが、
>追加したボタンのID「ID_BUTTON_TST」はありません。
試してみたけど確かにありませんね。
手動でID_BUTTON_TST用の関数を追加して、中間ファイルや.apsやら.ncbやら全部削除し
たら表示されるようになりましたが、自動でやる方法はわかりません。
メニュー上にある機能をツールバーに引き出すというような
使い方を想定してインターフェイスが作成されているみたいですね。
メニュー側にメニュー項目を作成してIDを振り、
ツールバー側にはこれを割り振るみたいです。
ツールバーは基本的に非表示に出来るものなので
ツールバーにある機能は全てメニュー側に実装しておくのが
基本的な考え方なのではないかと私も思います。
ただ、UIはそれぞれの設計思想等があるのでMSの思想にそぐわない場合は
他に方法を考えるしかないみたいですね。
一度、メニュー上に項目を作成してイベントに対するコールバックまで
作成してしまえば、メニュー項目は削除しても大丈夫みたいですね。
メニュー上から削除してしまうとプロパティウインドウからは見えなく
なりますが、クラスビュー上は見えていますしソースを直接見てもいいので
何とかならないことはないと思います。
てか、手動でハンドラを追加するのでは駄目なんですか?
自動でしたそうだったので次善の策を提示しましたけれど、
私も手動でいいと思います。
というか、手動でやらざる得ない場合もありますし、
覚えておいて損は無いかと。
しっかり「夏休み」してる間に、解決してる。ありがとうございます。
PATIOさんのやり方は、途中で気付きました。それから、
>メニュー上にある機能をツールバーに引き出すというような
>使い方を想定してインターフェイスが作成されているみたいですね。
というのも気付きました。
「まぁ、これでいいんだ。」と納得しましたけど、
手動で書く方法も覚えた方が良さそうですね。
蛇足ですが、
藤本(み)さんに教えて頂いたページに書いてある、
>参考書籍がC++6.0の本なのですが
同じ本だと思います。
林晴彦氏「新VisualC++6.0入門ビギナー編」です。
お蔭様で、かなり.NETにも慣れることができました。