AfxRegisterWndClass
更新 : 2007 年 11 月
独自のウィンドウ クラスを登録できます。
LPCTSTR AFXAPI AfxRegisterWndClass(
UINT nClassStyle,
HCURSOR hCursor = 0,
HBRUSH hbrBackground = 0,
HICON hIcon = 0
);
パラメータ
nClassStyle
Windows のクラス スタイル、またはウィンドウ クラス用にビットごとの OR (|) 演算子を使用して作成されたスタイルの組み合わせを指定できます。クラスのスタイルの一覧については、Windows SDK の WNDCLASS 構造体の説明を参照してください。NULL にすると、既定値が次のように設定されます。マウス スタイルが CS_DBLCLKS に設定されます。このスタイルでは、ユーザーがマウスをダブルクリックすると、ダブルクリック メッセージがウィンドウ プロシージャに送られます。
矢印カーソル スタイルが Windows 標準の IDC_ARROW に設定されます。
背景ブラシが NULL に設定されます。ウィンドウ背景がウィンドウによって消去されません。
アイコンを Windows 標準のロゴ アイコンに設定します。
hCursor
ウィンドウ クラスで作成された各ウィンドウにインストールされるカーソル リソースへのハンドルを指定します。既定値 0 を使用すると、標準の IDC_ARROW カーソルが表示されます。hbrBackground
ウィンドウ クラスで作成された各ウィンドウにインストールされるブラシ リソースへのハンドルを指定します。既定値 0 にすると、NULL 背景ブラシになります。既定では、ウィンドウは WM_ERASEBKGND の処理中に背景を消去しません。hIcon
ウィンドウ クラスで作成された各ウィンドウにインストールされるアイコン リソースへのハンドルを指定します。既定値 0 にすると、Windows 標準のロゴ アイコンが表示されます。
戻り値
クラス名を持つ NULL で終わる文字列を返します。このクラス名を CWnd や CWnd の派生クラスの Create メンバ関数に渡して、ウィンドウを作ることができます。名前は Microsoft Foundation Class ライブラリで生成されます。
メモ : |
---|
戻り値は静的バッファへのポインタです。この文字列を保存するには、文字列を CString 変数に代入してください。 |
解説
Microsoft Foundation Class ライブラリは、標準のウィンドウ クラスを自動的に登録します。独自のウィンドウ クラスを登録するには、この関数を呼び出します。
AfxRegisterWndClass でクラスに登録される名前は、すべてパラメータに依存します。同一のパラメータで AfxRegisterWndClass を複数回呼び出した場合、最初の呼び出しのクラスだけが登録されます。同一のパラメータによるそれ以降の AfxRegisterWndClass の呼び出しは、既に登録されている名前を返すだけです。
各クラスに別のウィンドウ クラスを取得する代わりに、同一のパラメータで CWnd 派生クラスの AfxRegisterWndClass を複数回呼び出した場合、各クラスは同一のウィンドウ クラスを共有します。CS_CLASSDC クラス スタイルが使用されている場合、問題が発生することがあります。複数の CS_CLASSDC ウィンドウ クラスが登録される代わりに、1 つの CS_CLASSDC ウィンドウ クラスが登録されるので、クラスを使用するすべての C++ ウィンドウで、同一の DC を共有することになります。この問題を回避するには、AfxRegisterClass を呼び出してクラスを登録します。
ウィンドウ クラスの登録と AfxRegisterWndClass 関数の詳細については、テクニカル ノートの「テクニカル ノート 1: ウィンドウ クラスの登録」を参照してください。
使用例
CString strMyClass;
// load stock cursor, brush, and icon for
// my own window class
try
{
strMyClass = AfxRegisterWndClass(
CS_VREDRAW | CS_HREDRAW,
::LoadCursor(NULL, IDC_ARROW),
(HBRUSH) ::GetStockObject(WHITE_BRUSH),
::LoadIcon(NULL, IDI_APPLICATION));
}
catch (CResourceException* pEx)
{
AfxMessageBox(_T("Couldn't register class! (Already registered?)"));
pEx->Delete();
}
必要条件
ヘッダー : afxwin.h