Windows API プログラミングの基礎

SendMessage と PostMessage

http://eternalwindows.jp/winbase/window/window05.html

ちなみに、派生パターンとしてタイムアウト時間を設定できるSendMessageTimeoutもある。
http://eternalwindows.jp/windevelop/message/message04.html

LPARAM と WPARAM

http://eternalwindows.jp/winbase/base/base08.html

LPARAM:Long型のパラメーター = 数値列
WPARAM:Word型のパラメーター = どのキーが押されたか?の情報

TCHAR と LPCTSTR と LPTSTR

このことから「UNICODE」が定義されているとTCHARはWCHAR、定義されていないと「char」と同一になります。つまり、前に挙げた

・TCHAR = char
・LPCTSTR = const char*
・LPTSTR = char*

というのは「UNICODE」が定義されていないときの置き換えということになり、「UNICODE」が定義されているときには

・TCHAR = WCHAR
・LPCTSTR = const WCHAR*
・LPTSTR = WCHAR*

という関係になります。

http://www.usefullcode.net/2006/11/tcharlpctstrlptstr.html

ちなみに、ユニコードとは、符号化文字集合のことです。

1.「文字」と「文字に割り当てた番号」の対応表

を「符号化文字集合」と言います。
符号化文字集合は「変換対象となる文字の一覧」が書いてある表です。

もうひとつの対応表

2.「文字に割り当てた番号」と「実際にコンピュータさんが扱う数字」の対応表

は「文字符号化方式」と言います。

http://wa3.i-3-i.info/word11422.html

そして、文字列操作関数の一覧です。
文字列操作関数一覧 - Cの部屋

マルチバイト と ユニコード

・マルチバイトとは従来のchar型みたいに1Byte文字と2Byte文字を分けて考える概念のこと
ユニコードとはWCHAR型の様に日本語や中国語やアルファベットや数値などを区別無く扱う概念のこと

おそらくVisual Studio2005から初心者を最大に悩ませる罠が
マルチバイト(MBCS)とユニコード(wchar_t)の相違点でしょう。

Visual Studio2003までは標準設定がマルチバイトだったのでWindowsAPIや
DirectX用の関数の引数に文字列を受け渡す時は

TestFunc("文字列");

みたいな感じでオッケーでした。

しかし、Visual Studio2005からはこれではダメなんです。
標準設定がユニコード設定なので多くの関数において文字列は


TestFunc( L"文字列" );
TestFunc( _T("文字列") );
TestFunc( _TEXT("文字列") );


のいずれかで受け渡さなないとダメです。


vllv.us

MessageBoxA と MessageBoxW

news.mynavi.jp

Windowsのbstr型の文字列をメッセージボックスに出力させたい場合は、MessageBoxWを使います。
そのとき、固定値文字列はTEXT("")ではなく、L""で表現します。