§カスタムドロー 備忘録メモ

I. カスタムドローコントロール [Internet Explorer 3.0以降]

コントロール 通知メッセージ
構造体
全般 Customizing a Control's Appearance Using Custom Draw
NM_CUSTOMDRAW Message
レバー NM_CUSTOMDRAW (rebar) Notification NMCUSTOMDRAW Structure
トラックバー NM_CUSTOMDRAW (trackbar) Notification
ヘッダー NM_CUSTOMDRAW (header) Notification
ボタン [Windows XP以降] NM_CUSTOMDRAW (button) Notification
リストビュー NM_CUSTOMDRAW (list view) Notification NMLVCUSTOMDRAW Structure
ツールバー
[Internet Explorer 4.0以降]
NM_CUSTOMDRAW (toolbar) Notification NMTBCUSTOMDRAW Structure
ツールチップ NM_CUSTOMDRAW (ToolTip) Notification NMTTCUSTOMDRAW Structure
ツリービュー NM_CUSTOMDRAW (tree view) Notification NMTVCUSTOMDRAW Structure

§ コントロールのオーナードロー(オーナー描画)

II. NMHDR構造体 / NMCUSTOMDRAW構造体

メンバ 説明 HSP変数
hdr lItemlParam メッセージが送られてくるコントロールのウィンドウハンドル。 NMHDR.0
idFrom メッセージが送られてくるコントロールの識別子。 NMHDR.1
code 通知コード。(NM_CUSTOMDRAW = -12) NMHDR.2
dwDrawStage 現在の描画ステージ。以下のうちの1つです。
グローバル値:
CDDS_POSTERASE
(0x00000004)
消去サイクルが完了した後。
CDDS_POSTPAINT
(0x00000002)
描画サイクルが完了した後。
CDDS_PREERASE
(0x00000003)
消去サイクルが開始する前。
CDDS_PREPAINT
(0x00000001)
描画サイクルが開始する前。
アイテム固有値:
CDDS_ITEM
(0x00010000)
dwItemSpec、uItemState、lItemlParamの値が有効であることを示しています。
CDDS_ITEMPOSTERASE
(0x00010004)
アイテムが消去された後。
(CDDS_ITEM | CDDS_POSTERASE)
CDDS_ITEMPOSTPAINT
(0x00010002)
アイテムが描画された後。
(CDDS_ITEM | CDDS_POSTPAINT)
CDDS_ITEMPREERASE
(0x00010003)
アイテムが消去される前。
(CDDS_ITEM | CDDS_PREERASE)
CDDS_ITEMPREPAINT
(0x00010001)
アイテムが描画される前。
(CDDS_ITEM | CDDS_PREPAINT)
CDDS_SUBITEM
(0x00020000)
[Internet Explorer 4.0以降] サブアイテムが描画されているならば、フラグはCDDS_ITEMPREPAINTCDDS_ITEMPOSTPAINTの組み合わせです。これは、CDDS_PREPAINTからCDRF_NOTIFYITEMDRAWが返される場合でのみ設定されます。
NMCUSTOMDRAW.3
hdc コントロールのデバイスコンテキストのハンドル。 NMCUSTOMDRAW.4
rc left 描画される領域の境界矩形を示したRECT構造体。
矩形の左上隅のX座標。
NMCUSTOMDRAW.5
top 矩形の左上隅のY座標。 NMCUSTOMDRAW.6
right 矩形の右下隅のX座標。 NMCUSTOMDRAW.7
bottom 矩形の右下隅のY座標。 NMCUSTOMDRAW.8
dwItemSpec アイテム番号。このメンバに含まれる情報は、通知が送られてくるコントロールの種類に依存します。 NMCUSTOMDRAW.9
uItemState 現在のアイテムの状態。以下の値の組み合わせです。
CDIS_CHECKED (0x0008) アイテムはチェックされています。
CDIS_DEFAULT (0x0020) アイテムはデフォルトの状態です。
CDIS_DISABLED (0x0004) アイテムは無効になっています。
CDIS_FOCUS (0x0010) アイテムはフォーカスがあります。
CDIS_GRAYED (0x0002) アイテムは灰色になっています。
CDIS_HOT (0x0040) アイテムは現在ポインタの下にあります。(「ホット」の状態)
CDIS_INDETERMINATE
(0x0100)
アイテムは不確定の状態です。
CDIS_MARKED (0x0080) アイテムはマークされています。
CDIS_SELECTED (0x0001) アイテムは選択されています。
CDIS_SHOWKEYBOARDCUES
(0x0200)
[Windows XP以降] アイテムはキーボードキューです。
CDIS_NEARHOT (0x0400) アイテムは現在マウスポインタの下にあるコントロールの一部ですが、アイテム自体は「ホット」の状態ではありません。
CDIS_OTHERSIDEHOT
(0x0800)
アイテムは現在マウスポインタの下にあるスプリットボタンの一部ですが、アイテム自体は「ホット」の状態ではありません。
CDIS_DROPHILITED
(0x1000)
アイテムは現在ドラッグ&ドロップ処理のドロップ対象です。
NMCUSTOMDRAW.10
lItemlParam アプリケーション定義のアイテムデータ。 NMCUSTOMDRAW.11

III. dwDrawStageメンバの戻り値 (NMCUSTOMDRAW構造体)

戻り値 説明
CDRF_NOTIFYITEMDRAW
(0x00000020)
コントロールはアイテム関連の描画処理を親に通知します。アイテムが描画される前後にNM_CUSTOMDRAW通知メッセージを送ります。これはdwDrawStageがCDDS_PREPAINTと等しい時に起こります。
CDRF_NOTIFYPOSTERASE
(0x00000040)
コントロールはアイテムが消去された後に親に通知します。これはdwDrawStageがCDDS_PREPAINTと等しい時に起こります。
CDRF_NOTIFYPOSTPAINT
(0x00000010)
コントロールはアイテムが描画された後に親に通知します。これはdwDrawStageがCDDS_PREPAINTと等しい時に起こります。
CDRF_NEWFONT
(0x00000002)
あなたのアプリケーションはアイテム用の新しいフォントを指定しました。コントロールは新しいフォントを使用します。これはdwDrawStageがCDDS_ITEMPREPAINTと等しい時に起こります。
CDRF_NOTIFYSUBITEMDRAW
(0x00000020)
[Internet Explorer 4.0以降]
CDRF_SKIPDEFAULT
(0x00000004)
あなたのアプリケーションは自前でアイテムを描画しました。コントロールはアイテムを描画しません。これはdwDrawStageがCDDS_ITEMPREPAINTと等しい時に起こります。
CDRF_DOERASE
(0x00000008)
コントロールは背景のみ描画します。
CDRF_SKIPPOSTPAINT
(0x00000100)
コントロールはアイテム周りのフォーカス矩形を描画しません。

IV. NMLVCUSTOMDRAW構造体 (リストビュー)

メンバ 説明 HSP変数
nmcd 全般的なカスタムドローの情報を含むNMCUSTOMDRAW構造体。 -
clrText リストビューコントロールで、テキストの表示に使用する色を示したCOLORREF値。 NMLVCUSTOMDRAW.12
clrTextBk リストビューコントロールでテキストの背景表示に使用する色を示したCOLORREF値。 NMLVCUSTOMDRAW.13
iSubItem [Internet Explorer 4.0以降] 描画されているサブアイテムのインデックス。メインのアイテムが描画されているならば、このメンバは0です。 NMLVCUSTOMDRAW.14
dwItemType [Windows XP以降] 描画するアイテムの種類を含んだDWORD。このメンバは以下の値のうちの1つです。
LVCDI_ITEM (0x0000) アイテムを描画します。
LVCDI_GROUP (0x0001) グループを描画します。
NMLVCUSTOMDRAW.15
clrFace [Windows XP以降] アイテムの表面を表示するのに使われている色を表現したCOLORREF値。 NMLVCUSTOMDRAW.16
iIconEffect [Windows XP以降] Glow、Shadow、Pulseのような、アイコンに適用する効果を示したint型の値。 NMLVCUSTOMDRAW.17
iIconPhase [Windows XP以降] アイコンのを示したint型の値。 NMLVCUSTOMDRAW.18
iPartId [Windows XP以降] 描画するアイテムのパーツIDを示したint型の値。 NMLVCUSTOMDRAW.19
iStateId [Windows XP以降] 描画するアイテムの状態IDを示したint型の値。 NMLVCUSTOMDRAW.20
rcText left [Windows XP以降] テキストを描画する矩形を示したRECT。 NMLVCUSTOMDRAW.21
top [Windows XP以降] NMLVCUSTOMDRAW.22
right [Windows XP以降] NMLVCUSTOMDRAW.23
bottom [Windows XP以降] NMLVCUSTOMDRAW.34
uAlign [Windows XP以降] どのようにグループを揃えるべきかを示したUINT。このメンバは以下の値で指示できます。
LVGA_HEADER_CENTER (0x0002) グループは中央です。
LVGA_HEADER_LEFT (0x0001) グループを左側に揃えます。
LVGA_HEADER_RIGHT (0x0004) グループを右側に揃えます。
NMLVCUSTOMDRAW.25

V. NMTVCUSTOMDRAW構造体 (ツリービュー)

メンバ 説明 HSP変数
nmcd 全般的なカスタムドローの情報を含むNMCUSTOMDRAW構造体。 -
clrText ツリービューコントロールでテキストの表示に使用する色を示したCOLORREF値。 NMTVCUSTOMDRAW.12
clrTextBk ツリービューコントロールでテキスト背景の表示に使用する色を示したCOLORREF値。 NMTVCUSTOMDRAW.13
iLevel [Internet Explorer 4.0以降] 描画されているアイテムの0ベースのレベル。ルートアイテムはレベル0に位置し、ルートアイテムの子はレベル1に位置します。 NMTVCUSTOMDRAW.14

VI. NMTTCUSTOMDRAW構造体 (ツールチップ)

メンバ 説明 HSP変数
nmcd 全般的なカスタムドローの情報を含むNMCUSTOMDRAW構造体。 -
uDrawFlags ツールチップが表示される際、ツールチップのテキストをどのように整形するかを示したUINT値。テキストが描画方法を変えるため、アプリケーションはこのフィールドを変更する可能性があります。この値は始めにDrawText関数に渡されます。DrawText関数のuFormatパラメータのすべての値が有効です。 NMTTCUSTOMDRAW.12

VII. NMCUSTOMDRAW構造体 (トラックバー)

メンバ 説明 HSP変数
dwItemSpec トラックバーコントロールは描画されているコントロールの部位を識別するため、構造体のdwItemSpecメンバに以下の値を入れます。
TBCD_CHANNEL
(0x0003)
トラックバーコントロールのつまみがスライドするチャンネル。
TBCD_THUMB
(0x0002)
トラックバーコントロールのつまみ。これはユーザーが動かすコントロール部分です。
TBCD_TICS
(0x0001)
トラックバーコントロールの端に沿って現れる増加目盛り。
NMCUSTOMDRAW.9

VIII. NMTBCUSTOMDRAW構造体 (ツールバー)

メンバ 説明 HSP変数
nmcd   -
hbrMonoDither   NMTBCUSTOMDRAW.12
hbrLines   NMTBCUSTOMDRAW.13
hpenLines   NMTBCUSTOMDRAW.14
clrText   NMTBCUSTOMDRAW.15
clrMark   NMTBCUSTOMDRAW.16
clrTextHighlight   NMTBCUSTOMDRAW.17
clrBtnFace   NMTBCUSTOMDRAW.18
clrBtnHighlight   NMTBCUSTOMDRAW.19
clrHighlightHotTrack   NMTBCUSTOMDRAW.20
rcText left   NMTBCUSTOMDRAW.21
top   NMTBCUSTOMDRAW.22
right   NMTBCUSTOMDRAW.23
bottom   NMTBCUSTOMDRAW.24
nStringBkMode   NMTBCUSTOMDRAW.25
nHLStringBkMode   NMTBCUSTOMDRAW.26
iListGap [Windows XP以降] NMTBCUSTOMDRAW.27

VIIII. HSP向けカスタムドロー関連マクロ定義

/*---------------------------------------------------------

	カスタムドロー関連マクロ定義 for HSP
	by Let's HSP!

---------------------------------------------------------*/

#define WM_NOTIFY 0x004E

#define NM_CUSTOMDRAW -12

#define CDDS_POSTERASE 0x00000004
#define CDDS_POSTPAINT 0x00000002
#define CDDS_PREERASE 0x00000003
#define CDDS_PREPAINT 0x00000001

#define CDDS_ITEMPOSTERASE 0x00010004
#define CDDS_ITEMPOSTPAINT 0x00010002
#define CDDS_ITEMPREERASE 0x00010003
#define CDDS_ITEMPREPAINT 0x00010001
#define CDDS_SUBITEM 0x0020000

#define CDIS_CHECKED 0x0008
#define CDIS_DEFAULT 0x0020
#define CDIS_DISABLED 0x0004
#define CDIS_FOCUS 0x0010
#define CDIS_GRAYED 0x0002
#define CDIS_HOT 0x0040
#define CDIS_INDETERMINATE 0x0100
#define CDIS_MARKED 0x0080
#define CDIS_SELECTED 0x0001
#define CDIS_SHOWKEYBOARDCUES 0x0200
#define CDIS_NEARHOT 0x0400
#define CDIS_OTHERSIDEHOT 0x0800
#define CDIS_DROPHILITED 0x1000

#define CDRF_DODEFAULT 0x00000000
#define CDRF_NOTIFYITEMDRAW 0x00000020
#define CDRF_NOTIFYPOSTERASE 0x00000040
#define CDRF_NOTIFYPOSTPAINT 0x00000010
#define CDRF_NOTIFYITEMERASE 0x00000080
#define CDRF_NEWFONT 0x00000002
#define CDRF_NOTIFYSUBITEMDRAW 0x00000020
#define CDRF_SKIPDEFAULT 0x00000004
#define CDRF_DOERASE 0x00000008
#define CDRF_SKIPPOSTPAINT 0x00000100
Copyright © 2005-2012 HSPプログラミング - Let's HSP!