LPCTSTR
とLPCTSTR
のようなもの(たとえばHDC
)とは何ですか?
Brian Kramerの引用 MSDNフォーラム
LPCTSTR
=[〜#〜] l [〜#〜]ong[〜#〜 ] p [〜#〜]ointer to a[〜#〜] c [〜#〜]onst[〜#〜] t [〜#〜]CHAR[〜#〜] str [〜#〜]ing(心配しないでください。長いポインターはポインターと同じです。16ビットウィンドウでは2種類のポインターがありました。)これがテーブルです:
LPSTR
=char*
LPCSTR
=const char*
LPWSTR
=wchar_t*
LPCWSTR
=const wchar_t*
LPTSTR
=char* or wchar_t*
応じて_UNICODE
LPCTSTR
=const char* or const wchar_t*
応じて_UNICODE
TCHARに関連する型を使用する必要はありません。
これらのタイプ、それらを使用するすべての構造タイプ、およびすべての関連する関数は、コンパイル時にANSIまたはUNICODEバージョン(プロジェクトの構成に基づく)にマップされます。 ANSIバージョンでは通常、名前の末尾にAが追加され、UnicodeバージョンではWが追加されます。必要に応じて、これらを明示的に使用できます。 MSDNは必要に応じてこれに注意します。たとえば、MessageBoxIndirectAおよびMessageBoxIndirectW関数をここに一覧表示します。 http://msdn.Microsoft.com/en-us/library/windows/desktop/ms645511(v = vs.85) .aspx
多くのユニコード関数の実装が欠けていたWindows 9xをターゲットにしているのでない限り、ANSIバージョンを使用する必要はありません。 Windows 9xをターゲットにしている場合、コードがTCHARがcharまたはwcharであるかどうかを想定していない限り、TCHARを使用して同じコードベースからansiおよびunicodeバイナリを構築できます。
Windows 9xを気にしない場合は、プロジェクトをUnicodeとして構成し、TCHARをWCHARと同じものとして扱うことをお勧めします。必要に応じてW関数と型を明示的に使用できますが、Windows 9xでプロジェクトを実行する予定がない限り、それは重要ではありません。
これらのタイプは、MSDNの Windows Data Types に記載されています。
LPCTSTR
LPCWSTR
が定義されている場合はUNICODE
、それ以外の場合はLPCSTR
です。詳細については、「文字列のWindowsデータ型」を参照してください。このタイプは、WinNT.hで次のように宣言されています。
#ifdef UNICODE typedef LPCWSTR LPCTSTR; #else typedef LPCSTR LPCTSTR; #endif
LPCWSTR
16ビットUnicode文字のnullで終了する定数文字列へのポインター。詳細については、「フォントで使用される文字セット」を参照してください。
このタイプは、WinNT.hで次のように宣言されています。
typedef CONST WCHAR *LPCWSTR;
HDC
デバイスコンテキスト (DC)へのハンドル。
この型は、WinDef.hで次のように宣言されています。
typedef HANDLE HDC;