CFrameWndExでALT+ドラッグ


ひる  2013-05-27 15:27:17  No: 73692  IP: 192.*.*.*

CFrameWndExを使ったSDIプログラムのビュー内に、
ALT+ドラッグで操作できる機能を付けたいと思っています。

機能自体は、OnMouseMove()のドラッグ処理内で、
if (GetKeyState(VK_MENU) & 0x8000)
などと判定して場合分けすれば実現可能ですが、
ドラッグ中やドラッグ後にALTを離すと、メニューにフォーカスが移ってしまいます。

CFrameWndExを使わないクラシックメニューでは、
ALTのON/OFFだけの操作であればそのように動作しますが、
ONからOFFの間にドラッグなどのマウス操作があれば、
メニューには移らないようです。

CFrameWndEx::PreTranslateMessage()が、
WM_SYSKEYUPを捕まえてメニューにフォーカスを移しているようなのですが、
自身のフレームウィンドウのPreTranslateMessage()で
WM_SYSKEYUPを捕まえて無条件に無視させてしまうと、
今度はALTのON/OFFだけだったときにメニューに移らなくなってしまいます。

CFrameWndExの実装ミスのような気がするのですが、
ALTのON/OFFだけだったのか、マウス操作が行われたのかは、
WM_SYSKEYUPのタイミングで判定することは可能なのでしょうか?

編集 削除