トップ回答者
VisualStudio2017C++ディスクトップで,Windowのタイトルが最初の1文字しか表示されない.

質問
-
開発環境 VisualStudio 2017 C++ Windows ディスクトップアプリケーション
構成 プラットフォーム x64
構成プロパティの文字セット マルチ バイト文字セットを使用する
プログラム:自動で生成されるプログラム プロジェクト名:WindowsProject3
実行させると,Windowタイトルに表示される文字列が,最初の1文字(この場合は「W」)しか表示されない.
WindowText関数を使用しても最初の1文字のみ表示
注1)文字セットが ユニコードの場合は正常(この場合は,「WindowsProject3」が表示される.)
注2)プラットフォームがx86の場合は正常(この場合は,「WindowsProject3」が表示される.)
注3)VisualStudio2019 コミュニティでも同様の現象が発生
回答
-
自動生成されたプロジェクトのコードがszTitle,szWindowClassというフィールドにWCHARを使っていることからわかるように、Unicode文字セット前提のコードが生成されています。
ここをTCHARかCHARに変更してください。そうするとCreateWindowW,LoadStringW,WNDCLASSEXW,MAKEINTRESOURCEW,RegisterClassExWという末尾にW付の関数と構造体でエラーが出るはずなのでWを外してください。
これらはUnicode用の関数や構造体です。x86で発生しないのは、おそらくプロジェクトのプロパティのダイアログでプラットフォームをWin32にした状態での文字セットを変更しておらずUnicode文字セットのままになっているからでしょう。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 編集済み gekkaMVP 2020年7月10日 9:33
- 回答の候補に設定 kumo-msftMicrosoft contingent staff, Moderator 2020年7月13日 7:57
- 回答としてマーク 恵夢 2020年7月19日 3:38
すべての返信
-
自動生成されたプロジェクトのコードがszTitle,szWindowClassというフィールドにWCHARを使っていることからわかるように、Unicode文字セット前提のコードが生成されています。
ここをTCHARかCHARに変更してください。そうするとCreateWindowW,LoadStringW,WNDCLASSEXW,MAKEINTRESOURCEW,RegisterClassExWという末尾にW付の関数と構造体でエラーが出るはずなのでWを外してください。
これらはUnicode用の関数や構造体です。x86で発生しないのは、おそらくプロジェクトのプロパティのダイアログでプラットフォームをWin32にした状態での文字セットを変更しておらずUnicode文字セットのままになっているからでしょう。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 編集済み gekkaMVP 2020年7月10日 9:33
- 回答の候補に設定 kumo-msftMicrosoft contingent staff, Moderator 2020年7月13日 7:57
- 回答としてマーク 恵夢 2020年7月19日 3:38
-
恵夢さん、こんにちは。フォーラムオペレーターのKumoです。
MSDNフォーラムにご投稿くださいましてありがとうございます。
ご質問いただいた件ですが、その後いかがでしょうか。
gekkaさんから寄せられた投稿はお役に立ちましたか。
参考になった投稿には [回答としてマーク] をお願い致します。
設定いただくことで、
他のユーザーもお役に立つ回答を見つけやすくなります。
お手数ですが、ご協力の程どうかよろしくお願いいたします。MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~