メニューのオーナードローについて – プログラミング – Home

メニューのオーナードローについて
 
通知
すべてクリア

[解決済] メニューのオーナードローについて


ヒカル
 ヒカル
(@ヒカル)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

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でメニューオーナードローをする際、よりスマートな作成方法があれば
ご教授いただければと思います。
よろしくお願いします。


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

Genericクラスにしたいのであれば、左のツリーの一般を選択して
一般C++クラスを選べばよいのでは?
.NETになってこの辺のウィザードの記述が変わっているので
.NETのHELPで調べてみた方が良いと思います。
「クラスの追加」で検索してみては?

クラスウィザードは本来なら手で書くところをサポートしてくれているだけなので
極端な話、サンプルのソースを一から手で入力しても同じ物ができます。
あくまでも開発効率を上げるためのツールに過ぎないので
使わなくても出来るだけの知識があった方が望ましいと思います。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

# ゴミですごめん。

クラスの追加にしろメンバの追加にしろ、
IDEでできないことはできないと思いがち。
統合環境の弊害とでも申しましょうか…


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

CMenuは、VC6.0でもないです。
「Genericクラス」は、「CWnd」ですね。
「CMenu」は多分「CWnd」を改造するほうが楽です。


返信引用
ヒカル
 ヒカル
(@ヒカル)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

レスありがとうございます。

>>PATIOさん
MSのホームページで調べてみたところ、

// Genericクラスの説明
ジェネリック クラスは、ユーザーが定義するクラスまたはそのような
クラスからの派生クラスです。

// 一般 C++の説明
一般 C++ クラスとは、ユーザーが定義するクラス、またはそのクラスから
派生するクラスです。

とのことでしたので、(.NET以前の)Genericクラス == (.NETの)一般C++クラスと
いう認識で良さそうですね。

>使わなくても出来るだけの知識があった方が望ましいと思います。
そのとおりだとおもいます。勉強不足ですみません。

>>ITOさん
CWndを基本クラスにして、CWndをCMenuにして試してみました。
BEGIN_MESSAGE_MAPの部分でコンパイルエラーがでたので調べてみたところ
CWndからの派生クラスでないと使えないようでした。
BEGIN_MESSAGE_MAP等を消してみたら一般C++クラスと代わらないようなので
今後は一般C++のほうを使ってみたいと思います。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

例でGenericクラスを使っているのはクラス宣言の雛形がほしいだけの話なんだと思います。
なのでわざわざGenericクラスを使わなくても手で打てばいいだけの話なんですけどね。
あと、二重インクルードを防止するためのマクロの部分ですかねぇ。
ウィザードを使うとこの辺のマクロが勝手に入ってしまうのでなぜ必要なのかを
理解できていない場合も有る様でこれも問題ですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました