DrvEnablePDEV 関数 (winddi.h)
DrvEnablePDEV 関数は、物理デバイスの特性の説明を GDI に返します。
構文
DHPDEV DrvEnablePDEV(
[in] DEVMODEW *pdm,
[in] LPWSTR pwszLogAddress,
ULONG cPat,
[in, optional] HSURF *phsurfPatterns,
ULONG cjCaps,
[out] ULONG *pdevcaps,
ULONG cjDevInfo,
[out] DEVINFO *pdi,
HDEV hdev,
[in] LPWSTR pwszDeviceName,
HANDLE hDriver
);
パラメーター
[in] pdm
ドライバー データを含む DEVMODEW 構造体へのポインター。
Windows NT 4.0 をサポートするドライバーの場合、GDI が 0 に設定された DEVMODEW メンバーを使用してハードウェアを呼び出すとき、DrvEnablePDEV はハードウェアの既定のモードを返す必要があります: dmBitsPerPel、dmPelsWidth、dmPelsHeight、dmDisplayFrequency。
[in] pwszLogAddress
プリンター ドライバーの場合は、ドライバーが書き込む場所のユーザー名である論理アドレス文字列を指します。 たとえば、"LPT1" や "My Printer" などがあります。
ディスプレイ ドライバーは、このパラメーターを無視する必要があります。
cPat
プリンター ドライバーの場合は、 phsurfPatterns が指すバッファー内のサーフェス ハンドルの数を指定します。 ドライバーは、バッファーの末尾を超えてメモリにアクセスできません。
ディスプレイ ドライバーは、このパラメーターを無視する必要があります。
[in, optional] phsurfPatterns
ディスプレイ ドライバーは、このパラメーターを無視する必要があります。
プリンター ドライバーの場合、ドライバーが標準の塗りつぶしパターンを表すサーフェス ハンドルで塗りつぶすバッファーを指します。 次のパターンを順番に定義する必要があります。
Pattern | 説明 |
---|---|
HS_HORIZONTAL | 水平ハッチ。 |
HS_VERTICAL | 垂直ハッチ。 |
HS_FDIAGONAL | 45 度の上向きハッチ (左から右)。 |
HS_BDIAGONAL | 45 度下向きハッチ (左から右)。 |
HS_CROSS | 水平および垂直クロスハッチ。 |
HS_DIAGCROSS | 45 度のクロスハッチ。 |
これらの各サーフェスは、ラスター デバイス用のモノクロ (1 ピクセルあたり 1 ビット) GDI ビットマップである必要があります。 デバイス ドライバーは、デバイス画面に書き込まれるときに最も標準的なパターンのように見えるパターンを選択する必要があります。
GDI は、ベクター デバイスのサポート ルーチンでこれらのブラシを使用する必要はありません。 したがって、サーフェスは、 DrvRealizeBrush が標準パターンとして認識するデバイスでサポートされるサーフェスにすることができます。
cjCaps
pdevcaps によって指されるバッファーのサイズを指定します。 ドライバーは、バッファーの末尾を超えてメモリにアクセスすることはできません。
[out] pdevcaps
デバイスの機能を記述するために使用される GDIINFO 構造体へのポインター。 GDI は 、DrvEnablePDEV を呼び出してこの構造体をゼロ初期化します。
cjDevInfo
pdi が指す DEVINFO 構造体のバイト数を指定します。 ドライバーは、DEVINFO でこのバイト数以下を変更する必要があります。
[out] pdi
ドライバーと物理デバイスを記述する DEVINFO 構造体へのポインター。 ドライバーは、理解しているメンバーのみを変更する必要があります。 GDI は、 DrvEnablePDEV の呼び出しの前に、この構造体に 0 を設定します。
hdev
デバイスに対する GDI 提供のハンドル。 このハンドルは、 EngGetDriverName などの一部の GDI コールバックへの入力として使用する必要があります。
[in] pwszDeviceName
デバイスのユーザーが読み取り可能な名前である null で終わる文字列へのポインター。
hDriver
出力デバイスへのハンドル。 ディスプレイ ドライバーの場合、これはディスプレイ デバイス ハンドルです。 プリンター ドライバーの場合、このパラメーターは、スプーラーの呼び出しでプリンターのハンドルとして使用する必要があります。
戻り値
戻り値は、関数が成功した場合に有効なデバイスを識別する PDEV へのハンドルです。 つまり、 DrvEnablePDEV は、成功すると、ドライバー定義のプライベート デバイス インスタンス情報にハンドルを返します。 それ以外の場合は NULL を返します。
解説
グラフィックス デバイス ドライバーは、異なる論理アドレスに接続された複数の物理デバイスをサポートしている場合があります。 ドライバーは、異なる描画サーフェスの同時使用もサポートする必要があります。
DrvEnablePDEV の目的は次のとおりです。
- デバイスの物理的な特性を GDI に通知します。
- 現在のデバイス インスタンスを記述するプライベート PDEV 構造体を作成するには (受信した DEVMODE 構造体とデバイス名に基づく)。
1 つの論理デバイスで、次のように区別できるいくつかの PDEV を管理できます。
- ハードウェアの種類 -- 1 つのデバイス ドライバーで "LaserWhiz"、"LaserWhiz II"、"LaserWhiz Super" がサポートされる場合があります。
- 論理アドレス -- 1 つのデバイス ドライバーは、"LPT1"、"COM2"、"\SERVER1\PSLAZER" などに接続されているプリンターをサポートできます。 複数の VGA ディスプレイを同時にサポートできるディスプレイ ドライバーは、ポート番号に従ってそれらを区別する場合があります。たとえば、0x3CEや0x2CEなどです。
- サーフェス -- プリンター ドライバーは、2 つの印刷ジョブを同時に処理できます。 2 つのサーフェスは、印刷される 2 つのページを表します。 同様に、ディスプレイ デバイス ドライバーは、同じデバイス上で 2 つのデスクトップをサポートする場合があります。
デバイスサーフェスにビットマップを割り当てる必要がある場合、これらの割り当ては必要になるまで行う必要はありません。 多くの場合、アプリケーションは実際にデバイスに書き込む前にデバイス情報を要求しますが、大きなビットマップなどのリソースの割り当てを待機すると、メモリを節約できます。
GDI は、この関数を呼び出す前に phsurfPatterns が指すバッファーをゼロ初期化します。
グラフィックス ドライバーには DrvEnablePDEV が必要です。
要件
対象プラットフォーム | デスクトップ |
Header | winddi.h (Winddi.h を含む) |