ユーザーがウィンドウ B をクリックすると、ウィンドウ C が表示されます。
状況 1 : ウィンドウ C が表示されているときに、ユーザーがウィンドウ A または B、またはウィンドウ A の他の子ウィンドウの任意の場所をクリックすると、ウィンドウ C が非表示になります。
状況 2 : ウィンドウ C が表示され、ユーザーがウィンドウ C をクリックすると、プログラムはほとんど何もせず、ウィンドウ C を非表示にします。[ウィンドウ C にはさらに子ウィンドウがあります]
この機能を実現するにはどうすればよいですか?
SetCapture は、状況 2 では機能しません。
ウィンドウ B では、これは私が得たものです。状況 1 では機能しますが、明らかに状況 2 では機能しません。
LRESULT WindowB::LButtonDown ( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
if ( !capture )
{
::SetCapture ( hwnd );
capture = true;
windowC->show ( );
}
else
{
::ReleaseCapture ( );
capture = false;
windowC->hide ( );
}
return 0;
};
PS : 私は oop c++ で純粋な winapi を使用しており、ウィンドウとメッセージ処理用に独自のラッパーを使用しています。
編集: 要求に応じてさらにコードが追加されました。
LRESULT WindowC::lButton ( UINT message, WPARAM wParam, LPARAM lParam )
{
doStuff ( );
::PostMessage ( hParent, WM_COMMAND, WPARAM ( BN_CLICKED ), LPARAM ( hwnd ) );
return 0;
};