|
わさびさん、こんばんは。
> アプリケーションの「閉じるボタン」は考えてませんでした。
> が、私の力では対応できないため、今回は無視いたします。
そうですか。
では自フォームのみ対象ということで。
API 必須になりますが、たぶんアプローチとしては大きく
1) フォームをサブクラス化してメッセージをフック(たぶん WM_NCLBUTTONDOWN あたり)
or
2) それ以外
になるのではないかと思います。
確実なのは 1 なのですが、VBA 単独でのサブクラス化は
危険すぎて勧められないので、必然的に 2 になります。
考え方としては、ベタですがおそらくこんな感じ。
If A) 仮想マウス左ボタンが押されていたら
If B) マウスカーソルが自フォームの閉じるボタンの真上にあれば
' C) 閉じるボタンがクリックされた!(たぶん…)
1 よりも精度は落ちますが(理論上、誤判定の余地が残る)、
実用には耐えるはず。
必要と思われる API を列挙しておきます。
A)
GetAsyncKeyState
GetSystemMetrics(SM_SWAPBUTTON)
B)
GetCursorPos
SendMessage(WM_NCHITTEST)
組んでいくと他にも必要になるかもしれませんが。
一般的にはもっと、ウィンドウの検査とか、ウィンドウが重なっている
場合の考慮とかが必要ですが、BeforeUpdate イベントが走る状況なら
自フォームが可視・アクティブと考えてほぼ間違いないと思われるので、
かなり簡略化できるでしょう。
なお同件のトピック準備中ですが、今週中はまず間に合わないので、
たぶん待つよりご自分で書いたほうが早いです。
あるいは、もっと良い案があるかもしれないので、他の方のレスを
お待ちになってみてもよいかと思います。
それでは。
|
|