###前提・実現したいこと
VisualStudio2008 SP1のMFCアプリケーションでEditBoxに文字列を表示したい。
そのためにstd::string型の文字列をwchar *型に変換する必要があるようなのでこれを実現したい。
よろしくお願いいたします。
###発生している問題・エラーメッセージ
型変換が実現できない。
###該当のソースコード
c++
1 Hoge hoge = new Hoge("foo"); 2 string msg = hoge->getMessage(); 3 GetDlgItem(IDC_EDIT1)->SetWindowTextW(msg); 4 5 //IDC_EDIT1のEditBoxにfooと表示したい。
*Hogeはclassで、コンストラクタでメンバにstd::string型文字列を持たせてgetMessage()関数でstd::string型文字列を取り出します。
*IDC_EDIT1はEditBoxのIDです。
実際のコードとは異なりますが上コードのようなコードを実現したいと考えています。
###試したこと
LPCTSTR型にキャストし、文字化けしました。
[MSDNに載っていた方法](https://msdn.microsoft.com/ja-jp/library/ms235631.aspx#System::String からの変換)はpin_ptr : 定義されていない識別子です。
とエラーが出て対処できずにいます。
###補足情報(言語/FW/ツール等のバージョンなど)
- VisualStudio2008 SP1
- C++ / MFC
- Windows7 Professional SP1 64bit
- プロジェクトプロパティページ > 構成プロパティ > 文字セット > Unicode文字セットを使用する
ベストアンサーには問題を解決できる内容の回答を最初に提示していただいた方を選択しています。
###ちなみに、LPCTSTR->std::stringしたい場合も多いですね!
こうしてます
超絶めんどくさいです
1行、20文字くらいで終わるいい方法知ってたら教えてください
c++
1// TCHAR -> char 2std::string MyCommon::TCHARArrayToString( TCHAR *src) 3{ 4 std::vector<char> rtnValue; 5#ifdef UNICODE 6 // デフォルトでUNICODEが選択されてるのに何でしょうこのめんどくささは。 7 // TCHAR -> char 8 char tcb[ MAX_PATH]; 9 WideCharToMultiByte( CP_ACP, 0, src, -1, tcb, sizeof(tcb), NULL, NULL); 10 11 for(int i = 0; tcb[i] != '\0'; ++i) rtnValue.push_back( tcb[i]); 12#else 13 14 for(int i = 0; tcb[i] != '\0'; ++i) rtnValue.push_back( src[i]); 15#endif 16 std::string s( rtnValue.begin(), rtnValue.end()); 17 18 return s; 19}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/02 06:29
2018/01/22 10:29