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

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

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


お茶
 お茶
(@お茶)
ゲスト
結合: 20年前
投稿: 42
Topic starter  

WM_DRAWITEMでメニューを独自に描画しているのですが、
普通のメニューアイテムはDRAWITEMSTRUCTのitemIDで識別して描画できます。
でもIDのないポップアップ項目はどうやって描画するのでしょうか?
ついでに一番上のメニューもどうやって描画したらいいのかも知りたいです。
一番上とは、タイトルバーの下のファイル・編集といったやつです。
エクセル等のようにしたいので・・・

環境はVC++6.0SP6 WinXPSP2 MFC未使用です。
よろしくお願いします。


引用未解決
トピックタグ
Azzy
 Azzy
(@Azzy)
ゲスト
結合: 20年前
投稿: 1
 

>IDのないポップアップ項目はどうやって描画するのでしょうか?
IDのないポップアップ項目 とは具体的にどのようなものなのでしょうか。

>一番上のメニューもどうやって描画したらいいのかも知りたいです。
例えば、ファイルを追加するのであれば、WM_CREATE内で

HMENU hMenu, hFile;

hMenu = CreateMenu(); //親メニューを作成
hFile = CreatePopupMenu(); //ファイル

AppendMenu(hMenu, MF_ENABLED | MF_STRING | MF_POPUP,
(UINT)hFile, ファイル);

SetMenu(hWnd, hMenu);
DrawMenuBar(hWnd);

というような感じでできます。
(AppendMenuを使うよりもInsertMenuItemを使うほうがいいかもしれません)

>エクセル等のようにしたいので
メニューを動かすことができるようにしたいのでしょうか?
それならば、メニューをオーナードローするよりも、
リバーコントロールにメニューを置いたほうがいいかもしれません。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

ポップアップの親メニューでも、MEASUREITEMSTRUCT / DRAWITEMSTRUCT の itemID メン
バには何らかの有効な ID が入るようですので、GetMenuItemInfo によってアイテム情
報を取得することは可能です。

描画する情報を ID と関連付けているから、それが指定できない――ということであれ
ば、ID とではなく、ユーザ定義の値(MENUITEMINFO 構造体の dwItemData)と関連付け
ればよいのではないでしょうか。
これなら MEASUREITEMSTRUCT / DRAWITEMSTRUCT にも itemData という形で渡されます
し。

一番上のメニューはオーナードローできないらしいです。
Excel はというと…あれはメニューじゃないんじゃないでしょうか。
本来はできないはずのフローティングをやってたりしますし。
コマンドバーと呼ばれるものらしいです。


返信引用
お茶
 お茶
(@お茶)
ゲスト
結合: 20年前
投稿: 42
Topic starter  

ありがとうございます。
おかげでPOPUPもオーナードローできそうです。
これならSEPARATORもオーナードローできそうですね。

一番上は・・・とりあえずあきらめます。

THE CODE PROJECTというサイトにオフィス風のメニューやコントロールを実装している
サンプルがあるようなので、機会があれば会席してみよう、とは思ってます。

#しかしあれがメニューじゃないってのはちょっとショックでした。


返信引用
お茶
 お茶
(@お茶)
ゲスト
結合: 20年前
投稿: 42
Topic starter  

ミス
会席 → 解析


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

解決しているようですが。

> でもIDのないポップアップ項目はどうやって描画するのでしょうか?

AppendMenuではIDのところにサブメニューのHMENUを指定します。
なので、DRAWITEMSTRUCT,MEASUREITEMSTRUCTのitemIDメンバが
実はHMENUであるかどうかを確認すれば、分かります。

> 一番上のメニューはオーナードローできないらしいです。

ちょっと試してみたのですが、できるようですよ。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> ちょっと試してみたのですが、できるようですよ。

そでしたか。
試してみて言っている訳ではないので、失礼しました。
猫など複数のサイトで、ウィンドウメニューのオーナードローは出来ないと書いてあっ
たので、そういうもんだと思ってました。


返信引用
お茶
 お茶
(@お茶)
ゲスト
結合: 20年前
投稿: 42
Topic starter  

ありがとうございます。

サブメニューのハンドルをIDとして使えるわけですね。
そう考えると一番上のもオーナードローできそうですね。

解決済みなのですが、これで本当の解決ですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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