2013-10-03 3 views
1

Я строю мое приложение в режиме UNICODE и хотите преобразовать CString в LPWSTR.Basically я один один класс, содержащий CString в качестве переменной-члена, как,CString к LPWSTR в МФЦ

class MyClass 
{ 
    CString TreeNodeName; 
} 

И я хочу использовать следующую структуру для вставки элемента в дерево управления,

TVINSERTSTRUCT tvInsert; 
tvInsert.hParent = ParentNode; 
tvInsert.hInsertAfter = NULL; 
tvInsert.item.mask = TVIF_TEXT; 
tvInsert.item.lParam = (long)ClassObject; 
tvInsert.item.pszText = ClassObject->TreeNodeName; //Need this conversion 

Пожалуйста, помогите мне, как конвертировать CString TreeNodeName; до tvInsert.item.pszText?

+1

Я знаю, что вы можете не знать ответ на этот вопрос, но какую кодировку вы используете для текста в CString? Вы видите, что вопрос неопровержимо, если вы не знаете эту информацию. Если вы не знаете, возможно, вы могли бы объяснить, откуда вы берете значение «TreeNodeName». – john

+0

@john спасибо за быстрый ответ, в основном я храню некоторые значения из файлов XML в TReeNodeName, что является нормальной кодировкой ASCII –

+0

Кажется, я был под недоразумением, так как вы находитесь в режиме Unicode, вы можете просто назначить напрямую, как говорит Джонатан Поттер. Я думал, что необходим какой-то перевод, основанный на символах. – john

ответ

4

Если я не понял этот вопрос, все, что вам нужно сделать, это указать CString на LPCTSTR, чтобы использовать его с функциями Windows API. See here for a description.

Поскольку член TVITEM::pszText является LPTSTR, вам нужно будет снова перевести его в неконстантный, однако это должно быть безопасно для таких действий, как TVM_INSERTITEM, поскольку строка, которую вы поставляете, не изменяется.

tvInsert.item.pszText = (LPTSTR)(LPCTSTR)ClassObject->TreeNodeName; 
+0

Эй, спасибо, одна глупая ошибка с моей стороны. :( –

Смежные вопросы