<スクリーン上の色の取得> 前回に引き続き MyColorChecker のもうひとつの重要な機能である チェックカラーについて説明したいと思います。この機能を実現する為に 使用する API 関数は、GetCursorPos、GetDC、GetPixel、ReleaseDC の 4つです。 まず GetCursorPos で、マウスカーソル(マウスポインタ)の現在位置 を取得します。 BOOL GetCursorPos(LPPOINT lpPoint); lpPoint にはマウスカーソルの X、Y 座標を受け取る POINT 構造体へ のポインタが入ります。これで取得できるのはスクリーン座標です。今回は スクリーン座標を使用するのでこのままですが、クライアント座標を使用する 場合には、ScreenToClient 関数を使って変換する必要があります。 次に、カラー情報を取得する為に、GetDC でスクリーン全体のデバイス コンテキストのハンドルを取得します。 HDC GetDC(HWND hWnd); hWnd には、デバイスコンテキストの取得対象となるウィンドウのハンドル
を指定します。NULL を指定するとスクリーン全体のデバイスコンテキストの
ハンドルを取得することができます。 次に、GetPixel を呼び出して、カラー情報を取得します。 COLORREF GetPixel(HDC hdc, int nXPos, int nYPos); hdc には GetDC で取得したデバイスコンテキストのハンドルを、 nXPos、nYPos には、GetCursorPos で取得した POINT 構造体のメンバをそれぞれ 引数に与えます。 最後に取得したデバイスコンテキストを ReleaseDC で解放します。 int ReleaseDC(HWND hWnd, HDC hDC); hWnd にはデバイスコンテキストの取得対象となったウィンドウのハンドル、 hDC には GetDC の戻り値を与えます。 それではコーディングしてみましょう。 POINT pt; HDC hdc; COLORREF crColor; GetCursorPos(&pt); hdc = GetDC(NULL); crColor = GetPixel(hdc, pt.x, pt.y); ReleaseDC(NULL, hdc); |
Copyright (c) 2003-2004 HIDEKAZU KAJIURA. All Rights Reserved. |