ページ 1 / 1
メニューの破棄
Posted: 2014年7月18日(金) 11:36
by サンゴ
メニューの破棄について、いくつか質問させて頂きます、宜しくお願いします。
Caption1
Item1
Item1_1
Item1_1_1
Item2
Item2_1
Item2_1_1
caption2
Item3
Caption1 を削除したい場合、先に Item1_1 や Item1 を DestroyMenu関数で破棄
しなければいけないのでしょうか?
DestroyMenu関数のトピックスの解説では、「ウィンドウにセットされている
メニューは自動的に破棄されるので、この命令語を使う必要はありません。」と
在りますが、「ウィンドウにセットされているメニュー・・・」とは、どう言うことですか?
Re: メニューの破棄
Posted: 2014年7月27日(日) 22:24
by rikaeigo
前半の意味がわかりませんが、少しでも参考になればと思い、書きます。
まず、本当はウィンドウを作るときはAPI関数のCreateWindowExなどを使って自分で作成するのです。
しかし、ABにはRADツールがあるので、CreateWindowEx関数をその手間はABの開発者様がやってくださっているのです。
プロジェクトのフォルダにあるMakeWindow.wbpというファイルが自動で生成されて、その中に自動でCreateWindowEx関数が書き込まれているのです。
そのCreateWindowEx関数の引数のひとつにメニューがあります。hMenu As HMENU というやつです。
それがウィンドウに関連付けられているメニューです。
そしてそのメニューはSetMenu関数で別のメニューにすりかえることができます。
しかし、ABのRADではウィンドウプロパティのメニューのところで簡単に関連付けることが出来ます。
ウィンドウを破棄するときはその関連付けられているメニューが破棄されます。
それ以外のSetMenuなどですりかえられたときの古いほうのメニューは破棄されません。
そういう孤独なメニューはDestroyMenu関数で破棄してやるのです。
メニューの破棄 2
Posted: 2014年7月28日(月) 09:58
by サンゴ
rikaeigoさん、ありがとう。
質問の順番が前後しますが、
> DestroyMenu関数のトピックスの解説では、「ウィンドウにセットされている
>メニューは自動的に破棄されるので、この命令語を使う必要はありません。」と
>在りますが、「ウィンドウにセットされているメニュー・・・」とは、どう言うことですか?
RADツールで作成したメニューは、自動的に破棄されるのと言う事ですね。
そして、SetMenu関数で生成したハンドルは、DestroyMenu関数で破棄してやると言う事ですね。
また、CreateMenu関数やCreatePopupMenu関数で生成したハンドルも同様、破棄してやると言う事ですね。
--------------------------------------------------------------------------------------------------------------
Caption1
Item1
Item1_1
Item1_1_1
Item2
Item2_1
Item2_1_1
caption2
Item3
Caption1 をDeleteMenu関数で削除したい場合、先に Item1_1 や Item1 及び Item2_1 や Item2 を
先に DestroyMenu関数で破棄しなければいけないのでしょうか?
宜しくお願いします。
Re: メニューの破棄
Posted: 2014年7月28日(月) 21:07
by たかせ
>RADツールで作成したメニューは、自動的に破棄されるのと言う事ですね。
RADツールで作成したメニューがあればCallback関数(CallBack.wbp)のウインドウ破棄イベント該当部分に
DestroyMenu関数がメニューごとに組み込まれます。結果的には自動的に破棄されることになります。
>そして、SetMenu関数で生成したハンドルは、DestroyMenu関数で破棄してやると言う事ですね。
>また、CreateMenu関数やCreatePopupMenu関数で生成したハンドルも同様、破棄してやると言う事ですね。
はいそのとおりです。
>Caption1 をDeleteMenu関数で削除したい場合、先に Item1_1 や Item1 及び Item2_1 や Item2 を
>先に DestroyMenu関数で破棄しなければいけないのでしょうか?
メニュー項目を削除するときは特にDestroyMenu関数で破棄しなくてもよいと思います。
よろしくお願いします。
Re: メニューの破棄
Posted: 2014年7月29日(火) 11:21
by rikaeigo
こういうイメージなんです。
変数=箱
構造体=複数の箱がくっついているモノ
ウインドウも複数の箱がくっついているモノです。メニューなどと書かれた箱があります。
メニューは木のようなものです。枝分かれしたりして、葉にメニュー項目が書いてあります。
メニューハンドルは、この木の幹に付いている取っ手だと思ってください。
DestroyMenuは木全体を破棄します。取っ手を持って簡単に取れるのです。
枝や葉を切って捨てるのがDeleteMenuです。
RemoveMenuを使うと、もう一度再生可能な状態で切ることが出来ます。
現在では、破棄についてあまり神経質になる必要は無いそうです。
メニューの破棄 3
Posted: 2014年7月30日(水) 10:05
by サンゴ
たかせさん、rikaeigoさん、ありがとう。
具体的で解りやすい説明で大分理解出来ました。
DestroyMenu関数は、メニューハンドルの破棄で、DeleteMenu関数は、項目の破棄と理解しているのですが、
DeleteMenu関数で Caption1 を削除した場合、Item1 や Item1_1 のハンドルは、どうなるのでしょう?
自動的に破棄されるのですか? その辺が解りません。
Caption1
Item1
Item1_1
Item1_1_1
Item2
Item2_1
Item2_1_1
又、RemoveMenu関数は、どういった時に使用するのでしょうか?
宜しくお願いします。
Re: メニューの破棄 3
Posted: 2014年7月30日(水) 22:31
by たかせ
①DeleteMenu関数でCaption1を削除した場合、Item1 や Item1_1 のハンドルは自動的に破棄されます。
②RemoveMenu関数でCaption1を削除した場合、Item1 や Item1_1 のハンドル破棄されません。
したがって削除したメニュー項目を復活させる必要があるときはRemoveMenu関数を使用します。
よろしくお願いします。
メニューの破棄 4
Posted: 2014年8月01日(金) 10:31
by サンゴ
たかせさん、ありがとう。
DeleteMenu関数は、賢いですね。
RemoveMenu関数は、もう一つ解らなく、「メニュー項目を復活させる」と言うのは、
どういった場面で使用するのでしょうか?
宜しくお願いします。
Re: メニューの破棄
Posted: 2014年8月01日(金) 11:17
by rikaeigo
ブラウザのお気に入りをいじってみてください。ドラッグしたりできますよね。そういうふうに使います。
メニューの破棄5
Posted: 2014年8月06日(水) 09:20
by サンゴ
rikaeigoさん、ありがとう。
カスタマイズする以外にRemoveMenu関数の使用する場面は無いのでしょうか?
宜しくお願いします。