Microsoft DirectX 8.0 |
ウィンドウを管理する基底クラス。ビデオ レンダラはこのクラスを使ってビデオ ウィンドウを作成する。
宣言 : Winutil.h
このクラスを使うには、CBaseWindow から継承した派生クラスを作成すること。派生クラスでは :
派生クラスのインスタンスを使う前に、PrepareWindow メソッドを呼び出すこと。
Protected メンバ変数 | |
---|---|
m_hInstance | モジュール インスタンスのハンドル。 |
m_hwnd | オブジェクトのウィンドウのハンドル。 |
m_hdc | ウィンドウのデバイス コンテキストのハンドル。 |
m_Width | クライアント エリアの幅、ピクセル。 |
m_Height | クライアント エリアの高さ、ピクセル。 |
m_bActivated | ウィンドウがアクティブになっているかどうかを示すフラグ。 |
m_pClassName | ウィンドウ クラスの名前を含む静的文字列。 |
m_ClassStyles | ウィンドウのクラス スタイル。 |
m_WindowStyles | ウィンドウのウィンドウ スタイル。 |
m_WindowStylesEx | ウィンドウの拡張ウィンドウ スタイル。 |
m_ShowStageMessage | ウィンドウをフォアグラウンドにするプライベート メッセージ。 |
m_ShowStageTop | ウィンドウ スタイルを WS_EX_TOPMOST に設定するプライベート メッセージ。 |
m_RealizePalette | パレットを適用させるプライベート メッセージ。 |
m_MemoryDC | メモリ デバイス コンテキストのハンドル。 |
m_hPalette | ウィンドウのパレットのハンドル。 |
m_bNoRealize | ウィンドウがそのパレットを適用したかどうかを示すフラグ。 |
m_bBackground | パレットがバックグラウンド パレットであるべきかどうかを示すフラグ。 |
m_bRealizing | 新しいパレットが適用されたかどうかを示すフラグ。 |
m_WindowLock | クリティカル セクション、オブジェクトのアクセスを継続させる。 |
m_bDoGetDC | デバイス コンテキストを取得したかどうかを示すフラグ。 |
m_bDoPostToDestroy | ウィンドウがそのデストラクション メッセージに PostMessage を使うか SendMessage を使うかを指定するフラグ。 |
Protected メソッド | |
OnPaletteChange | パレット変更メッセージを扱う。仮想。 |
Public メソッド | |
CBaseWindow | コンストラクタ メソッド。 |
DoneWithWindow | ウィンドウを削除する。 仮想。 |
PrepareWindow | ウィンドウを作成する。 仮想。 |
InactivateWindow | ウィンドウを非アクティブにする。仮想。 |
ActivateWindow | 派生クラスの要求にしたがってウィンドウをアクティブにする。仮想。 |
OnSize | WM_SIZE メッセージを扱う。 仮想。 |
OnClose | WM_CLOSE メッセージを扱う。 仮想。 |
GetDefaultRect | クライアント エリアのデフォルト サイズを取得する。仮想。 |
UninitialiseWindow | ウィンドウのリソースを解放する。仮想。 |
InitialiseWindow | ウィンドウを初期化する。仮想。 |
CompleteConnect | ウィンドウにレンダラの入力ピンが接続されたことを通知する。 |
DoCreateWindow | ウィンドウを作成する。 |
PerformanceAlignWindow | パフォーマンスを最高にするためにウィンドウを DWORD 境界にそろえる。 |
DoShowWindow | ウィンドウの表示状態を設定する。 |
PaintWindow | ウィンドウを再描画させる。 |
DoSetWindowForeground | ウィンドウをフォアグランドに持ってくる。 |
SetPalette | ウィンドウにパレットをインストールする。仮想。 |
SetRealize | ウィンドウがパレットを適用するかどうかを指定する。 |
DoRealisePalette | ウィンドウの現在のパレットを適用する。仮想。 |
PossiblyEatMessage | 派生クラスに他のウィンドウへのメッセージの転送を許可する。 仮想。 |
GetWindowWidth | ウィンドウの現在の幅を取得する。 |
GetWindowHeight | ウィンドウの現在の高さを取得する。 |
GetWindowHWND | ウィンドウのハンドルを取得する。 |
GetMemoryHDC | メモリ デバイス コンテキストのハンドルを取得する。 |
GetWindowHDC | ウィンドウのデバイス コンテキストのハンドルを取得する。 |
OnReceiveMessage | ウィンドウ メッセージを扱う。仮想。 |
Pure Virtual メソッド | |
GetClassWindowStyles | ウィンドウのクラス スタイルを取得する。 |
モジュール インスタンスのハンドル。
構文
HINSTANCE m_hInstance;
注意
DLL エントリ ポイント関数はグローバル変数をモジュール インスタンスのハンドルで設定する。CBaseWindow クラスはこのハンドルをそのコンストラクタ メソッドにストアする。
オブジェクトのウィンドウのハンドル。
構文
HWND m_hwnd;
ウィンドウのデバイス コンテキストのハンドル。
構文
HDC m_hdc;
クライアント エリアの幅、ピクセル。
構文
LONG m_Width;
クライアント エリアの高さ、ピクセル。
構文
LONG m_Height;
ウィンドウがアクティブになってどうかを示すフラグ。TRUE なら、ウィンドウはアクティブになっている。
構文
BOOL m_bActivated;
ウィンドウ クラスの名前を含む静的 (static) 文字列。
構文
LPTSTR m_pClassName;
ウィンドウのクラス スタイル。
構文
DWORD m_ClassStyles;
ウィンドウのウィンドウ スタイル。
構文
DWORD m_WindowStyles;
ウィンドウの拡張ウィンドウ スタイル。
構文
DWORD m_WindowStylesEx;
ウィンドウをフォアグラウンドにするプライベート メッセージ。
構文
UINT m_ShowStageMessage;
注意
DoSetWindowForeground メソッドはこのメッセージを送信する。
ウィンドウ スタイルを WS_EX_TOPMOST に設定するプライベート メッセージ。
構文
UINT m_ShowStageTop;
注意
ビデオ レンダラがフルスクリーン モードに変更したなら、ビデオ レンダラはこのメッセージをウィンドウに送るべきである。
パレットを適用させるプライベート メッセージ。
構文
UINT m_RealizePalette;
注意
SetPalette メソッドはこのメッセージを送る。
メモリ デバイス コンテキストのハンドル。
構文
HDC m_MemoryDC;
ウィンドウのパレットのハンドル。
構文
HPALETTE m_hPalette;
ウィンドウがそのパレットを適用したかどうかを示すフラグ。 TRUE なら、ウィンドウはそのパレットを適用していない。デフォルト値は FALSE 。
構文
BYTE m_bNoRealize;
パレットがバックグラウンド パレットであるべきかどうかを示すフラグ。TRUE なら、そのパレットはバックグラウンド パレットとして選択される。
構文
m_bBackground;
新しいパレットが適用されたかどうかを示すフラグ。 デバッグ ビルドでは、パレットが変わっている間この値は TRUE、それ以外なら FALSE。この変数はリテール ビルドでは使用されない。
構文
BYTE m_bRealizing;
クリティカル セクション、オブジェクトのアクセスを継続させる。
構文
CCritSec m_WindowLock;
デバイス コンテキスト (DC) を取得したかどうかを示すフラグ。TRUE なら、オブジェクトはウィンドウの DC を取得しメモリ DC を作成する。
構文
BOOL m_bDoGetDC;
ウィンドウがそのデストラクション メッセージに PostMessage を使うか SendMessage を使うかを指定するフラグ。TRUE なら、DoneWithWindow メソッドは PostMessage 関数を使って自身にプライベート デストラクション メッセージを送る。FALSE なら、DoneWithWindow は SendMessage を使ってメッセージを送る。デフォルトではこの値は FALSE である。
構文
BOOL m_bDoPostToDestroy;
派生クラスの要求にしたがってウィンドウをアクティブにする。
構文
virtual HRESULT ActivateWindow(void);
戻り値
以下の表に示される HRESULT 値の 1 つを返す。
S_FALSE ウィンドウは既にアクティブになっている。 S_OK 成功。
注意
このメソッドは CBaseWindow::GetDefaultRect を呼び出してウィンドウ サイズを決める。派生クラスは GetDefaultRect をオーバーライドして表示イメージのサイズを返すべきだ。
ウィンドウが既にアクティブなら、ActivateWindow の呼び出しはウィンドウを Z 順の一番上に動かす、しかしウィンドウのリサイズはしない。ウィンドウがペアレントを持っていても同様である。
コンストラクタ メソッド。
構文
CBaseWindow( BOOL bDoGetDC = TRUE BOOL bPostToDestroy = FALSE );
パラメータ
- bDoGetDC
- デバイス コンテキストを取得したかどうかを示すブール値。
bPostToDestroy m_bDoPostToDestroy メンバ変数を指定するブール値。
注意
オブジェクトを作成した後で、PrepareWindow メソッドを呼び出しウィンドウを作成する。それはこれもまた仮想メソッドである InitialiseWindow を呼び出す。これらのメソッドはコンストラクタから分離されているので、必要なら派生クラスはそれらをオーバーライドすることができる。
bDoGetDC の値が TRUE なら、CBaseWindow オブジェクトはウィンドウのデバイス コンテキスト (DC) のハンドルを取得し、それを m_hdc メンバ変数にストアする。そのオブジェクトはまたm_MemoryDC メンバ変数にストアされている互換メモリ DC をも作成する。これらの処理は InitialiseWindow 内で行われる。
ウィンドウにレンダラの入力ピンが接続されたことを通知する。
構文
HRESULT CompleteConnect(void);
戻り値
S_OK を返す。
注意
このメソッドはウィンドウのアクティブ フラグ (m_bActivated) を FALSE にリセットする。ビデオ レンダラがピン接続を完了したとき、ActivateWindow を呼び出してウィンドウのサイズと位置を設定する可能性がある。ActivateWindow にこれらの属性を再計算させるには、最初に CompleteConnect メソッドを呼び出すこと。
ウィンドウを作成する。
構文
HRESULT DoCreateWindow(void);
戻り値
成功なら S_OK を返す、失敗ならその原因を示す HRESULT 値を返す。
注意
PrepareWindow メソッドはこのメソッドを呼び出す。
ウィンドウを削除する。
構文
virtual HRESULT DoneWithWindow(void);
戻り値
S_OK を返す。
注意
このメソッドを派生オブジェクトのデストラクタ メソッドから呼び出すこと。
今メソッドがウィンドウを作成した同じスレッドから呼び出されるなら、メソッドは次の処理を行う :
- InactivateWindow メソッドを呼び出して、ウィンドウを非アクティブにする 。
- UninitialiseWindow メソッドを呼び出して、ウィンドウに使用されたりソースを解放する。
- ウィンドウを削除する。
DoneWithWindow を呼び出すスレッドがそのウィンドウを作成したスレッドではないなら、メソッドはプライベート「destroy」メッセージをそのウィンドウに送る。そのウィンドウはこのメッセージを受け取ると、自分自身に DoneWithWindow を呼び出す。(もし m_bDoPostToDestroy が TRUE なら、そのウィンドウは PostMessage を使う。)
ウィンドウの現在のパレットを適用する。
構文
virtual HRESULT DoRealisePalette( BOOL bForceBackground );
パラメータ
- bForceBackground
- パレットをバックグラウンド パレットにするかどうかを指定するブール値。詳細については、Platform SDK の「SelectPalette」を参照すること。
戻り値
以下の表に示される HRESULT 値の 1 つを返す。
S_FALSE GdiFlush への内部呼び出しがエラーを返した。 S_OK 成功。
注意
CBaseWindow::OnPaletteChange メソッドはこのメソッドを呼び出す。新しいパレットを設定するには、CBaseWindow::SetPalette メソッドを呼び出すこと。
ウィンドウをフォアグランドに持ってくる。
構文
void DoSetWindowForeground( BOOL bFocus );
パラメータ
- bFocus
- ウィンドウにフォーカスを与えるかどうかを示すブール値。この値が TRUE なら、ウィンドウはフォーカスを得る。
ウィンドウの表示状態を設定する。
構文
HRESULT DoShowWindow( LONG ShowCmd );
パラメータ
- ShowCmd
- どのようにウィンドウを表示状態にするかを指定するフラグ。この値は Microsoft® Windows® ShowWindow 関数の nCmdShow パラメータで定義される定数を取り得る。詳細については、Platform SDK を参照すること。
戻り値
S_OK を返す。
ウィンドウのクラス スタイルを取得する。
構文
virtual LPTSTR GetClassWindowStyles( DWORD *pClassStyles, DWORD *pWindowStyles, DWORD *pWindowStylesEx ) PURE;
パラメータ
- pClassStyles
- クラス スタイルを受け取る変数へのポインタ。
- pWindowStyles
- ウィンドウ スタイルを受け取る変数へのポインタ。
- pWindowStylesEx
- 拡張ウィンドウ スタイルを受け取る変数へのポインタ。
戻り値
クラス名を含む静的テキスト文字列を返す。
注意
CBaseWindow::PrepareWindow メソッドはこのメソッドを呼び出し、ウィンドウのクラス スタイルとウィンドウ スタイルを取得する。
このメソッドは純粋仮想、派生クラスはそれを実装しなければならない。次のサンプルはその実装例を示す。
LPTSTR CMyWindowClass::GetClassWindowStyles(DWORD *pClassStyles, DWORD *pWindowStyles, DWORD *pWindowStylesEx) { *pClassStyles = CS_HREDRAW | CS_VREDRAW; *pWindowStyles = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN; *pWindowStylesEx = WS_EX_WINDOWEDGE; return TEXT("MyWindowClass"); }このオブジェクトは RegisterClass 関数に送られる WNDCLASS 構造体の lpszClassName メンバのクラス スタイルを使用する。このオブジェクトは CreateWindowEx 関数の dwExStyle と dwStyle パラメータのウィンドウ スタイルを使用する。詳細については、Platform SDK を参照すること。
クライアント エリアのデフォルト サイズを取得する。
構文
virtual RECT GetDefaultRect(void);
戻り値
デフォルト矩形を返す。
注意
ウィンドウがアクティブになるとき、オブジェクトはこのメソッドを呼び出し、ウィンドウのクライアントエリアをどの大きさにするかを確認する。基底クラスでは、このメソッドは定数 DEFHEIGHT と DEFWIDTH で定義される高さと幅の矩形を返す。ビデオ レンダラーでは、通常派生クラスはネイティブなビデオ イメージのサイズを返す。
メモリ デバイス コンテキスト (DC) のハンドルを取得する。
構文
virtual HDC GetMemoryHDC(void);
戻り値
メモリ DC のハンドルを返す。
ウィンドウのデバイス コンテキスト (DC) のハンドルを取得する。
構文
HDC GetWindowHDC(void);
戻り値
DC のハンドルを返す。
ウィンドウの現在の高さを取得する。
構文
LONG GetWindowHeight(void);
戻り値
ウィンドウの高さを返す、ピクセル値。
ウィンドウのハンドルを取得する。
構文
HWND GetWindowHWND(void);
戻り値
ウィンドウのハンドルを返す。
ウィンドウの現在の幅を取得する。
構文
LONG GetWindowWidth(void);
戻り値
ウィンドウの幅を返す、ピクセル値。
ウィンドウを非アクティブにする。 基底クラスでは、このメソッドはウィンドウを隠す。
構文
virtual HRESULT InactivateWindow(void);
戻り値
次の表に示される HRESULT 値の 1 つを返す。
S_OK 成功。 S_FALSE ウィンドウは既に非アクティブ。
ウィンドウを初期化する。
構文
virtual InitialiseWindow( HWND hwnd );
パラメータ
- hwnd
- ウィンドウのハンドル。
戻り値
S_OK を返す。
注意
デフォルトでは、このメソッドはウィンドウのデバイス コンテキスト (DC) を取得し、互換のメモリ DC を作成する。しかし m_bDoGetDC フラグの値が FALSE なら、このメソッドはデバイス コンテキストを取得しない。メモリ DC はウィンドウにビットマップをブリットする前にビットマップを選択する際に有用である。
DoCreateWindow メソッドはこのメソッドを呼び出す。
WM_CLOSE メッセージを扱う。
構文
virtual BOOL OnClose(void);
戻り値
TRUE を返す。
注意
基底クラスでは、このメソッドは単にウィンドウを隠すだけである。通常、派生クラスはこのメソッドをオーバーライドし、EC_USERABORT イベントを同時に送る。このメソッドをオーバーライドしてウィンドウを削除してはならない。その代わり、自身のフィルタが削除されるとき、CBaseWindow::DoneWithWindow メソッドを呼び出すこと。
パレット変更メッセージを扱う。
構文
virtual LRESULT OnPaletteChange( HWND hwnd, UINT Message );
パラメータ
- hwnd
- ウィンドウのハンドル。
- Message
- メッセージ ID。
戻り値
メッセージが処理されたら 0 を返し、メッセージが処理されなかったら 1 を返す。
注意
このメソッドは WM_PALETTECHANGED と WM_QUERYNEWPALETTE メッセージを扱う。DoRealisePalette メソッドを呼び出して新しいパレットを適用する。
ウィンドウ メッセージを扱う。
構文
virtual LRESULT OnReceiveMessage( HWND hwnd, INT uMsg, WPARAM wParam, LPARAM lParam );
パラメータ
- hwnd
- ウィンドウのハンドル。
- uMsg
- メッセージ ID。
- wParam
- 第 1 メッセージ パラメータ。
- lParam
- 第 2 メッセージ パラメータ。
戻り値
メッセージが処理されたら 0 を返し、メッセージが処理されなかったら 1 を返す。
注意
基底クラスは次のメッセージを扱う。
- WM_CLOSE
- WM_MOVE
- WM_PALETTECHANGED
- WM_QUERYNEWPALETTE
- WM_SIZE
- WM_SYSCOLORCHANGE
派生クラスはこのメソッドをオーバーライドし、他のメッセージを扱うことができる。派生クラスは基底クラス メソッドを呼び出して、その派生クラスでは無視されるメッセージを扱うべきだ。
WM_SIZE メッセージを扱う。
構文
virtual BOOL OnSize( LONG Width, LONG Height );
パラメータ
- Width
- クライアント エリアの幅、ピクセル値。
- Height
- クライアント エリアの高さ、ピクセル値。
戻り値
TRUE を返す。
注意
このメソッドは新しい幅と高さをストアする。受け取った値に対して、CBaseWindow::GetWindowHeight と CBaseWindow::GetWindowWidth メソッドを呼び出すこと。
ウィンドウを再描画させる。
構文
void PaintWindow( BOOL bErase );
パラメータ
- bErase
- バックグラウンドが消去するかどうかを指定する値。この値が TRUE なら、バックグラウンドは消去される。
注意
このメソッドはウィンドウの全クライアントエリアを無効にすることによって WM_PAINT メッセージを生成する。
パフォーマンスを最高にするためにウィンドウを DWORD 境界にそろえる。
構文
HRESULT PerformanceAlignWindow(void);
戻り値
S_OK を返す。
注意
このメソッドは左と上の端を DWORD 境界にそろえ、パフォーマンスを改善する。ウィンドウがペアレントを持っていても、このメソッドは S_OK を返すが境界へのそろえを実行する。
派生クラスに他のウィンドウへのメッセージの転送を許可する。
構文
virtual BOOL PossiblyEatMessage( UINT uMsg, WPARAM wParam, LPARAM lParam );
パラメータ
- uMsg
- メッセージ ID。
- wParam
- 第 1 メッセージ パラメータ。
- lParam
- 第 2 メッセージ パラメータ。
戻り値
メッセージが転送されたら TRUE を返す、失敗したら FALSE を返す。基底クラスは FALSE を返す。
注意
CBaseWindow::OnReceiveMessage メソッドはメッセージを扱う前に PossiblyEatMessage を呼び出す。PossiblyEatMessage が TRUE を返したら、PossiblyEatMessage はそのメッセージを無視する。派生クラスは PossiblyEatMessage をオーバーライドして、所有者ウィンドウへメッセージを転送することができる。たとえば、CBaseWindow から派生した CBaseControlWindow クラスはキーボードとマウスのメッセージを転送する。
ウィンドウを作成する。
構文
virtual HRESULT PrepareWindow(void);
戻り値
HRESULT 値を返す。以下の表に示されるいずれかの値。
S_OK 成功。 E_FAIL 失敗。
注意
このメソッドはオブジェクトを作成した後で呼び出すこと。このメソッドはいくつかの初期登録を行ってから DoCreateWindow メソッドを呼び出してウィンドウを作成する。
ウィンドウにパレットをインストールする。
構文
virtual HRESULT SetPalette( HPALETTE hPalette ); HRESULT SetPalette(void);
パラメータ
- hPalette
- 新しいパレットのハンドル。NULL は不可。
戻り値
以下の表に示される HRESULT 値の 1 つを返す。
S_FALSE GdiFlush への内部呼び出しがエラーを返した。 S_OK 成功。
注意
hPalette パラメータは新しいパレットを指定する。メソッドがパラメータなしで呼び出されると、m_hPalette メンバ変数によって与えられるパレットが選択される。呼び出し元は m_hPalette の有効性を確認しなければならない。
m_bNoRealize メンバ変数の値が FALSE (デフォルト)なら、このメソッドはそのパレットを選択しそれを適用する。そうでなければ、パレットを選択するが、それを適用しない。オブジェクトは使用されていた以前のパレットを削除しない。呼び出し元はパレット削除の責任を持つ。
そのウィンドウを所有者とするスレッドでなくても、スレッドはこのメソッドを安全に呼び出すことができる。ウィンドウはそれ自身に OnPaletteChange メソッドへの呼び出しをキックするプライベート メッセージを送る。
ウィンドウがパレットを適用するかどうかを指定する。
構文
void SetRealize( BOOL bRealize );
パラメータ
- bRealize
- パレットをリアライズするかどうかを指定するブール値。もし TRUE なら、SetPalette メソッドがパレットをリアライズする。
注意
デフォルトでは、SetPalette メソッドは指定したパレットを適用する。このメソッドを呼び出してデフォルトを変更すること、そうすると複数のパレットが選択されるが適用されない。このメソッドは m_bNoRealize メンバ変数を設定する。
ウィンドウのリソースを解放する。
構文
virtual UninitialiseWindow(void);
戻り値
S_OK を返す。
注意
このメソッドは InitialiseWindow メソッドによって取得されたリソースをフリーにする。DoneWithWindow メソッドはこのメソッドを呼び出す。