15

CWnd :: ShowWindow()で非表示または有効になっているウィンドウコントロールの可視性を確認しようとしています。(または:: ShowWindow(hWnd、nCmdShow))

コントロールがタブシート上にあるため、:: IsWindowVisible(hWnd)を単純に使用することはできません。タブシート自体が切り替えられ、IsWindowVisibleがFALSEを返す可能性があります。

SW_SHOW / HIDE(または他の)ウィンドウのステータスを取得する方法はありますか、それともShowWindow()のretun値を使用してそれに応じてリセットする必要がありますか?

編集:コントロールが表示可能(または無効)になっているが、現在は表示されていない可能性があるため、タブが切り替えられているため、ウィンドウ自体が実際に切り替えられていなくても、SW_SHOWステータスは同じままであると思います。私が私の期待で非現実的であるならば、それは大丈夫です。

だから本当に私は探しています'このウィンドウ/コントロールを表示できますか?

4

6 に答える 6

12

を呼び出しGetWindowLong( handle, GWL_STYLE)、返された値で WS_VISIBLE スタイルの存在を確認します。

于 2009-09-16T11:26:22.683 に答える
7

GetWindowPlacementを使用します。フィールドを持つWINDOWPLACEMENT構造を埋めますshowCmd

showCmd
ウィンドウの現在の表示状態を指定します。このメンバーは、次のいずれかの値になります。

于 2009-09-16T11:24:23.203 に答える
2

を使用しますGetWindowPlacementが、あなたが何を望んでいるのか理解できたかどうかはわかりません. WINDOWPLACEMENT構造体を埋めてから、showCmdメンバーを使用します。

于 2009-09-16T11:23:16.107 に答える
0

GetWindowPlacement () 関数は、ウィンドウが最大化または最小化されている場合にのみ機能します。それ以外の場合、showCmd メンバーは、この StackOverflow の回答で指摘されているように、ウィンドウが非表示の場合にも SW_SHOWNORMAL を返します: WINDOWPLACEMENT's showCmd... always 1?

より単純なブール関数IsWindowVisible () を使用して、指定された Window が可視状態かどうかを取得できます。

于 2016-01-05T15:18:15.057 に答える
-1

このタスクに適切なメソッドがあるかどうかはわかりませんが、WindowFromPoint関数を試してみます。

備考

WindowFromPoint関数は、ポイントがウィンドウ内にある場合でも、非表示または無効なウィンドウへのハンドルを取得しません。アプリケーションは、非制限的な検索にChildWindowFromPoint関数を使用する必要があります。

たとえば、コントロールのコーナー座標を画面座標に変換してから、それらのポイントからハンドルを取得しようとします。

于 2009-09-16T11:21:08.590 に答える