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