7

画面に対するウィンドウのクライアント領域の座標を取得するにはどうすればよいですか?

GetClientRectとを使うことを考えましClientToScreenた。また、ブラウザウィンドウでは何ClientRectですか?ドキュメントが表示されている長方形のみHTML、またはドキュメントの寸法を縮小できるブラウザ バーとポップアップ メニューが含まれていますHTMLか?

私はこれを試しました:

HWND hWnd;
RECT rc;
if (GetClientRect(hWnd, &rc)) // get client coords 
{
    MapWindowPoints(hWnd, NULL, reinterpret_cast<POINT*>(&rc), 2); // converts rect rc points
    return rc.top;
}

しかし悲しいことに、ブラウザーのクライアントの四角形にはこれらのポップアップ ブラウザー メニューとバーがすべて含まれているため、ブラウザーの HTML ドキュメント スペースの正確な座標を検出するために使用することはできません。誰かがそれを行う方法を提案した場合は、喜んで試してください。

4

4 に答える 4

13

ClientToScreenはい、次の関数を使用してこれを行うことができます。

RECT rc;
GetClientRect(hWnd, &rc); // get client coords
ClientToScreen(hWnd, reinterpret_cast<POINT*>(&rc.left)); // convert top-left
ClientToScreen(hWnd, reinterpret_cast<POINT*>(&rc.right)); // convert bottom-right

ブラウザの「クライアント」の四角形は、ブラウザの実装によって異なります。Spy++ を使用して、これを自分で発見できます。

于 2013-03-31T21:11:06.310 に答える
1

がコメントしたRaymond Chenように、これを行うための推奨される方法は次のようなものです。

inline POINT get_client_window_position(const HWND window_handle)
{
    RECT rectangle;

    GetClientRect(window_handle, static_cast<LPRECT>(&rectangle));
    MapWindowPoints(window_handle, nullptr, reinterpret_cast<LPPOINT>(& rectangle), 2);

    const POINT coordinates = {rectangle.left, rectangle.top};

    return coordinates;
}
于 2019-06-26T09:52:35.303 に答える
0
POINT origin;
origin.x = 0;
origin.y = 0;
ClientToScreen(hWnd, &origin);

現在origin、画面座標では、クライアント領域の左上隅です。

(x,y) をクライアント領域座標から画面座標に変換するには、 を追加しoriginます。逆を行うには、減算します。

于 2016-04-19T23:41:27.923 に答える