2011-01-31 9 views
0

シナリオ1 空のvC++プロジェクトを作成し、そこにcファイルと#includeを追加しました。今私のmain()関数で、私のマウスをMessageBox関数の上に置くと、MessageBoxAに解決されます。MessageBoxがMessageBoxWに解決されていませんか?

シナリオ2 私は今ここでwin32のWindowsプロジェクトを作成します。ここでMessageBoxはMessageBoxWに解決されますか? プロジェクトプロパティ - > c/C++ - >プリプロセッサプロパティを確認しました。WIN32が定義されていましたので、これまでのプロジェクトでも同じ結果が得られました。

私は何をすべきでしょうか。もちろん、私は後者のタイプのプロジェクトを使うことができますが、私を、ちょっとしたことを学びたいと思う頑固なルーキーと考えてください。

ありがとうございました。

答えて

3

新しい空のプロジェクトのデフォルトの「文字セット」プロパティは、プリプロセッサがUNICODEプリプロセッサシンボルを定義しませんので、MessageBoxMessageBoxAによって置き換えられることを意味し、「マルチバイト」です。 Win32プロジェクトの場合

は、デフォルトの「文字セット」プロパティが UNICODEを定義するプリプロセッサ を意味し、これMessageBoxMessageBoxWによって置き換えられます「ユニコード」、です。

MSDNの記事Working with Stringsをご参照ください。

3

これは、プロジェクト構成によって決定されるUNICODE条件の有無によって決まります。Unicodeまたはマルチバイト文字セットです。

1

Project +プロパティ、構成プロパティ、全般。これは文字セットプロパティです。 すべてがの仕組みを理解した後で空プロジェクトを作成してください。すべての間違いを犯すのが最も簡単な方法です。

1

一般的な推奨事項:常にMessageBoxW()を使用してください。 MBCSの設定でプログラムをコンパイルする理由はまったくありません。文字通り「テキストが壊れた」という意味です。

+1

MessageBoxを記述し、条件をMessageBoxWにマップする方が良いです - この方法ではかなり良いです。 –

+0

+1、MBCSは十分に近いです。 –

+1

@david私は同意できません。間違ったコードをできるだけ早く間違って見なければなりません。 –