DrawIconEx関数 - Win32API

DrawIconExは、アイコンまたはカーソル(あるいはアニメーションカーソルのひとつのフレーム)をデバイスコンテキストに描画します。

画像の左上隅の座標を渡して描画する位置を指定します。画像はX軸、Y軸のどちらの方向にも引き伸ばすことができます。

Syntax

C++
BOOL DrawIconEx(
  HDC    hdc,
  int    xLeft,
  int    yTop,
  HICON  hIcon,
  int    cxWidth,
  int    cyWidth,
  UINT   istepIfAniCur,
  HBRUSH hbrFlickerFreeDraw,
  UINT   diFlags
);

Parameters

hdc
アイコンまたはカーソルを描画するデバイスコンテキストのハンドルを指定します。
xLeft
アイコンまたはカーソルの左上隅の論理x座標を指定します。
yTop
アイコンまたはカーソルの左上隅の論理y座標を指定します。
hIcon
描画するアイコンまたはカーソルのハンドルを指定します。アニメーションカーソルのハンドルを指定することもできます。
cxWidth
アイコンまたはカーソルの幅を論理単位で指定します。
このパラメーターがゼロでdiFlagsパラメーターがDI_DEFAULTSIZEの場合は、アイコンの幅にはGetSystemMetrics(SM_CXICON)で取得できるシステムメトリック値が使用されます。
このパラメーターがゼロでDI_DEFAULTSIZEが使用されていない場合は、アイコンの幅には実際のリソース幅が使用されます。
cyWidth
アイコンまたはカーソルの高さを論理単位で指定します。
このパラメーターがゼロでdiFlagsパラメーターがDI_DEFAULTSIZEの場合は、アイコンのにはGetSystemMetrics(SM_CYICON)で取得できるシステムメトリック値が使用されます。
このパラメーターがゼロでDI_DEFAULTSIZEが使用されていない場合は、アイコンの高さには実際のリソース幅が使用されます。
istepIfAniCur
hIcon にアニメーションカーソルを指定した場合、描画対象のフレームのインデックス番号を指定します。hIconにアニメーションカーソルを指定しなかった場合は、このパラメーターは無視されます。
hbrFlickerFreeDraw
ちらつきのない描画に使用するブラシのハンドルを指定します。有効なブラシのハンドルを指定すると、システムは直接デバイスコンテキストに描画しないで、指定されたブラシを背景色に使ってオフスクリーンビットマップを作成しアイコン(またはカーソル)をそのビットマップ内に描画した後、hdcパラメータで指定されたデバイスコンテキストにそのビットマップをコピーします。
NULL を指定すると、アイコンまたはカーソルをデバイスコンテキストに直接描画します。
diFlags
描画フラグを指定します。以下の値の論理和(or)を指定します。
DI_COMPAT (0x0004)
このフラグは無視されます。
DI_DEFAULTSIZE (0x0008)
cxWidth と cyWidth の各パラメータで 0 が指定されている場合、アイコンのシステムメトリック値によって指定された幅と高さ用いてアイコンまたはカーソルを描画します。 cxWidth と cyWidth の各パラメータで 0 を指定し、このフラグを指定しなかった場合、この関数はリソースの実際のサイズを使います。
DI_IMAGE (0x0002)
画像を使用してアイコンまたはカーソルを描画します。
DI_MASK (0x0001)
マスクを使用してアイコンまたはカーソルを描画します。
DI_NOMIRROR (0x0010)
アイコンをミラーリングされていないアイコンとして描画します。デフォルトでは、hdcがミラーリングされている場合、アイコンはミラーリングされたアイコンとして描画されます。
DI_NORMAL (0x0003)
DI_IMAGEとDI_MASKの 組み合わせです。

Return value

関数が成功した場合、戻り値はゼロ以外です。 関数が失敗した場合、戻り値はゼロです。拡張エラー情報を取得するには、GetLastError関数を使用します。

Remarks

DrawIconEx 関数は、アイコンの左上隅をxLeft と yTop で指定された位置に描画します。 この位置は、デバイスコンテキストの現在のマッピングモードの影響を受けます。
DrawIcon (hDC, X, Y, hIcon)は、次のようにDrawIconExを呼び出した場合と同じです。
DrawIconEx (hDC, X, Y, hIcon, 0, 0, 0, NULL, DI_NORMAL | DI_COMPAT | DI_DEFAULTSIZE); 

Requirements

Microsoft Windowsデベロッパーセンター DrawIconEx function (winuser.h) 参照

Research note

  • カーソルを表示する場合は、hotspotを考慮する必要があります。hotspotは、GetIconInfoで取得できます。
  • マウスカーソルの位置は、GetCursorInfoで取得できます。
  • アニメーションさせる場合は、istepIfAniCurを使うようです。
  • DI_COMPATは、以前は「ユーザー指定の画像の代わりにシステムのデフォルト画像を使用してアイコンまたはカーソルを描画します。」と意味だったようですが、現在は指定しても無視されるようです。