WindowsXP SP2、VC.NET、MFCです。
http://www.athomejp.com/goldfish/mfc/window/ownermenu.asp
上のページを参考にメニューのオーナードローを作成してみようと思ったんですが、
クラスの追加→MFCクラスでCMenuの派生クラスを作ろうとしても、基本クラスの
部分にはGenericクラスもCMenuクラスも見当たりませんでした。
(Genericクラスというのは.NETで無くなったのでしょうか…)
見当たらないのでCObjectを基本クラスにして派生クラスを作成し、
派生クラスの基本クラスをソースで直接CMenuに書き換えて残りの部分を作成しました。
結果的には参考ページの結果と同じものが作成できたのですが、
CObjectの派生クラスを作成して基本クラスをCMenuに書き換えるような手法は
正しい使い方なんでしょうか?
また、MFCでメニューオーナードローをする際、よりスマートな作成方法があれば
ご教授いただければと思います。
よろしくお願いします。
Genericクラスにしたいのであれば、左のツリーの一般を選択して
一般C++クラスを選べばよいのでは?
.NETになってこの辺のウィザードの記述が変わっているので
.NETのHELPで調べてみた方が良いと思います。
「クラスの追加」で検索してみては?
クラスウィザードは本来なら手で書くところをサポートしてくれているだけなので
極端な話、サンプルのソースを一から手で入力しても同じ物ができます。
あくまでも開発効率を上げるためのツールに過ぎないので
使わなくても出来るだけの知識があった方が望ましいと思います。
# ゴミですごめん。
クラスの追加にしろメンバの追加にしろ、
IDEでできないことはできないと思いがち。
統合環境の弊害とでも申しましょうか…
CMenuは、VC6.0でもないです。
「Genericクラス」は、「CWnd」ですね。
「CMenu」は多分「CWnd」を改造するほうが楽です。
レスありがとうございます。
>>PATIOさん
MSのホームページで調べてみたところ、
// Genericクラスの説明
ジェネリック クラスは、ユーザーが定義するクラスまたはそのような
クラスからの派生クラスです。
// 一般 C++の説明
一般 C++ クラスとは、ユーザーが定義するクラス、またはそのクラスから
派生するクラスです。
とのことでしたので、(.NET以前の)Genericクラス == (.NETの)一般C++クラスと
いう認識で良さそうですね。
>使わなくても出来るだけの知識があった方が望ましいと思います。
そのとおりだとおもいます。勉強不足ですみません。
>>ITOさん
CWndを基本クラスにして、CWndをCMenuにして試してみました。
BEGIN_MESSAGE_MAPの部分でコンパイルエラーがでたので調べてみたところ
CWndからの派生クラスでないと使えないようでした。
BEGIN_MESSAGE_MAP等を消してみたら一般C++クラスと代わらないようなので
今後は一般C++のほうを使ってみたいと思います。
例でGenericクラスを使っているのはクラス宣言の雛形がほしいだけの話なんだと思います。
なのでわざわざGenericクラスを使わなくても手で打てばいいだけの話なんですけどね。
あと、二重インクルードを防止するためのマクロの部分ですかねぇ。
ウィザードを使うとこの辺のマクロが勝手に入ってしまうのでなぜ必要なのかを
理解できていない場合も有る様でこれも問題ですね。