メモ帳の編集メニューを見ると、文字が選択されていないときは、
「切り取り」や「コピー」などが無効化されていますが、
あれはどうやれば出来ますか?
メモ帳のようなメニューについて
Re: メモ帳のようなメニューについて
EnableMenuItem関数で出来ます。メモ帳の編集メニューを見ると、文字が選択されていないときは、
「切り取り」や「コピー」などが無効化されていますが、
あれはどうやれば出来ますか?
Re: メモ帳のようなメニューについて
> EnableMenuItem関数で出来ます。
無効化・有効化自体のやり方はわかるんですが、
メニューバーからメニューを表示するときに文字が選択されているかどうかで
無効か有効かを変更したいんです。
言葉が足りなかったようで申し訳ありません。
よろしくおねがいします。
無効化・有効化自体のやり方はわかるんですが、
メニューバーからメニューを表示するときに文字が選択されているかどうかで
無効か有効かを変更したいんです。
言葉が足りなかったようで申し訳ありません。
よろしくおねがいします。
Re: メモ帳のようなメニューについて
現在のカーソル位置はエディットボックスへEM_GETSELを送ってみればわかります。
カーソルの開始位置と終了位置が返ってくるので両者が等しければ選択状態でないと判断します。
さて問題はメニューが表示される瞬間にということです。
これはそのときにWM_INITMENUPOPUPが送られてくるのでこのときを利用します。
これはイベント一覧にはないのでMainWndProcなどで受け取る必要があります。
そのときLOWORD(wParam)で何番目のメニュー項目が表示されようとしているかがわかるので,
それが編集メニューの位置と同じであるかを調べれば良いわけです。
カーソルの開始位置と終了位置が返ってくるので両者が等しければ選択状態でないと判断します。
さて問題はメニューが表示される瞬間にということです。
これはそのときにWM_INITMENUPOPUPが送られてくるのでこのときを利用します。
これはイベント一覧にはないのでMainWndProcなどで受け取る必要があります。
そのときLOWORD(wParam)で何番目のメニュー項目が表示されようとしているかがわかるので,
それが編集メニューの位置と同じであるかを調べれば良いわけです。
Re: メモ帳のようなメニューについて
> 現在のカーソル位置はエディットボックスへEM_GETSELを送ってみればわかります。
> カーソルの開始位置と終了位置が返ってくるので両者が等しければ選択状態でないと判断します。
>
> さて問題はメニューが表示される瞬間にということです。
> これはそのときにWM_INITMENUPOPUPが送られてくるのでこのときを利用します。
> これはイベント一覧にはないのでMainWndProcなどで受け取る必要があります。
> そのときLOWORD(wParam)で何番目のメニュー項目が表示されようとしているかがわかるので,
> それが編集メニューの位置と同じであるかを調べれば良いわけです。
教えていただいたWM_INITMENUPOPUPで出来ました。ありがとうございます。
自分でも調べていたらWM_INITMENUというのが出てきて、これでも、同じ動作(?)をしたんですが、
WM_INITMENUPOPUとWM_INITMENUはどのように違うんでしょうか?
> カーソルの開始位置と終了位置が返ってくるので両者が等しければ選択状態でないと判断します。
>
> さて問題はメニューが表示される瞬間にということです。
> これはそのときにWM_INITMENUPOPUPが送られてくるのでこのときを利用します。
> これはイベント一覧にはないのでMainWndProcなどで受け取る必要があります。
> そのときLOWORD(wParam)で何番目のメニュー項目が表示されようとしているかがわかるので,
> それが編集メニューの位置と同じであるかを調べれば良いわけです。
教えていただいたWM_INITMENUPOPUPで出来ました。ありがとうございます。
自分でも調べていたらWM_INITMENUというのが出てきて、これでも、同じ動作(?)をしたんですが、
WM_INITMENUPOPUとWM_INITMENUはどのように違うんでしょうか?