開発環境は VC++.net 非MFC です。
XMLファイルから、必要な要素を取り出しリストボックスに表示するプログラムを
作っています。
↓のようにして取り出した要素を _variant_t に格納し、メッセージボックスに
表示することはできたのですが、リストボックスに表示する方法がわかりません。
pElemRoot->getElementsByTagName(BSTR(Lname), &pNodeList);
_variant_t varText[5];
for(i=0; i<5; i++)
{
pNodeList->get_item(i, &pNode1);
pNode1->get_firstChild(&pNode2);
pNode2->get_nodeValue(&varText[i]);
MessageBoxW(NULL, varText[i].bstrVal, L名前, MB_OK);
}
リストボックスへの表示方法を教えていただけないでしょうか。
_bstr_t型をつかうと便利です。
で、リストボックスってどこにあるの?
コントロールIDもしくはウィンドウハンドルをはわかるのでしょうか?
リストボックスの作成も何もわからない場合
http://www.kumei.ne.jp/c_lang/index_sdk.html
の18章から21章あたりを参考にされるとよいでしょう。
リストボックスはダイアログボックスプロシージャ内にあり、ウィンドウハンドル
は取得できています。
↓のコードで実行してみたのですが、文字化け(?)のように意味不明な文字列が
表示されてしまいます。
for(i=0; i<5; i++)
ListBox_AddString(hList1,verText[i].bstrVal);
_bstr_t型を使う場合は、_variant_t型から_bstr_t型へキャストすればいいのですか??
>_bstr_t型を使う場合は、_variant_t型から_bstr_t型へキャストすればいいのです
か??
おそらくそれでも出来ます。
ListBox_AddString(hList1, _bstr_t(verText[i].bstrVal));
でもいけます。
_bstr_tクラスには operator const char* があるため、うまいことキャストできるよう
になっています。
また、MessageBoxWのように、
SendMessageW(hList1, LB_ADDSTRING, 0L, (LPARAM)verText[i].bstrVal);
明にワイド文字列を渡しても、いけるはず。
>おそらくそれでも出来ます。
違った。
_bstr_tにキャストするならば、verText[i].bstrValをキャストするということでした。
ListBox_AddString(hList1, (_bstr_t)verText[i].bstrVal);
ということ。
Blueさんありがとうございました。
ListBox_AddString(hList1, (_bstr_t)verText[i].bstrVal);
で実行したところ、リストボックスに文字化けせず、正しく表示することが
できました。