Windowsプログラミング定義ウィンドウハンドル
Windows Programming Definition Window Handle
HWND hwnd
ハンドルとは何ですか?
ハンドルの元の定義はtypedefvoid * HANDLEです。
これはポインタであり、32ビットウィンドウで4バイトを占有します。これが指すメモリのサイズは、そのタイプによって決まります。関数はハンドルを使用してデータを渡します。ハンドルはwinnt.hで次のように定義されています。
#ifdef STRICT typedef void *HANDLE This is the definition of HANDLE #define DECLARE_HANDLE(name) struct name##__ { int unused } typedef struct name##__ *name #else typedef PVOID HANDLE #define DECLARE_HANDLE(name) typedef HANDLE name #endif typedef HANDLE *PHANDLE
STRICT修飾子は、変数タイプが厳密な定義を必要とするかどうかを意味します。ここで、HANDLEは実際にはvoid型のポインターであることがわかります。これはどのような用途ですか? C / C ++言語を学んだ人なら誰でも、void型のポインターは、強制的な型変換によって任意の型のポインターに変換できることを知っています。これは、最も柔軟に使用できます。多くの場合、ハンドルはオブジェクトへのポインタ、またはアドレス、オブジェクトのアドレスです。たとえば、割り当てられたメモリブロック(オブジェクト)の場合、そのハンドルは最初のアドレスですが、問題はありません。ただし、これは常に当てはまるとは限りません。特に、オブジェクトの意味を持たないハンドルの場合はそうです。これは、システムの定義によって異なります。たとえば、システムフックHHOOKの種類は、アドレスであることは言うまでもありません。同じことがウィンドウハンドルにも当てはまります。このような場合、ハンドルはシステム内の物のリストにあるもののIDとして理解できます。
以下は、Windowsアプリケーションの一般的なハンドルタイプです。
ハンドルタイプ | 説明 | ハンドルタイプ | 説明 |
扱う | 一般的なハンドルタイプ | HICON | アイコンハンドルタイプ |
HWND | ウィンドウハンドルタイプ | HCURSOR | カーソルハンドルタイプ |
HINSTANCE | プログラムインスタンスハンドル | HBRUSH | ブラシハンドルタイプ |
HDC | デバイス記述ハンドル | HPEN | ブラシハンドルタイプ |
HMENU | メニューハンドルタイプ | HFONT | フォントハンドルタイプ |
HBITMAP | ビットマップハンドルタイプ | HFILE | ファイルハンドルタイプ |
最も基本的なハンドルはHANDLEとして定義されており、実際にはvoid *型またはint型です。
ウィンドウハンドルhwndは、CreateWindowによって返されたウィンドウハンドルを保存するために使用されます。 CreateWindowは、アプリケーション名に基づきます szAppName 対応するウィンドウオブジェクトクラスはウィンドウを作成し、ウィンドウのハンドルを返します。
ウィンドウハンドルとアプリケーションハンドルには違いがあることに注意してください。
ウィンドウハンドルはユーザーインターフェイス、つまりインターフェイスのハンドルであり、ユーザーはこのハンドルを介してインターフェイスの入力または出力を制御できます。たとえば、インターフェイスからコントロールの入力値を取得したり、インターフェイスにグラフィックを描画したりします。
アプリケーションインスタンスハンドルは、アプリケーション全体を制御します。