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