我正在尝试在CTabCtrl中获取当前所选选项卡的文本。
int tabCurSel = currentTabCtrl->GetCurSel();
TCITEM tcItem;
tcItem.mask = TCIF_TEXT;
tcItem.cchTextMax = 256; //Do I need this?
CString tabCurrentCString;
currentTabCtrl->GetItem(tabCurSel, &tcItem);
tabCurrentCString = tcItem.pszText;
CT2A tabCurrentChar(tabCurrentCString);
std::string tabCurrentStr(tabCurrentChar);
return tabCurrentStr;
我显然有一些不必要的字符串转换,目前这会返回"错误读取字符串的字符"在
tcItem.pszText;
如何从CTabCtrl获取字符串?我最终试图获得一个std :: string,但主要的问题是如何从选项卡中获取文本。
答案 0 :(得分:2)
tcItem.pszText
指向0
。要用文本填充它,必须在调用GetItem
之前指向缓冲区:
<强> pszText 强>
指向以null结尾的字符串的指针,该字符串包含选项卡文本 结构包含有关选项卡的信息。如果结构是 接收信息时,该成员指定缓冲区的地址 收到标签文本。
示例:
TCITEM tcItem { 0 };
tcItem.mask = TCIF_TEXT;
const int len = 256;
tcItem.cchTextMax = len;
TCHAR buf[len] = { 0 };
tcItem.pszText = buf;
currentTabCtrl->GetItem(tabCurSel, &tcItem);
tcItem.pszText
和buf
都会指向相同的文字。或者CString
/ CString::GetBuffer()
CString::ReleaseBuffer()
CString tabCurrentCString;
TCITEM tcItem;
tcItem.mask = TCIF_TEXT;
tcItem.cchTextMax = 256;
tcItem.pszText = tabCurrentCString.GetBuffer(tcItem.cchTextMax);
BOOL result = currentTabCtrl->GetItem(tabCurSel, &tcItem);
tabCurrentCString.ReleaseBuffer();
if (result)
MessageBox(tabCurrentCString); //success
看起来您正在使用推荐的Unicode设置。避免将UNICODE转换为ANSI(std::string
)。这种转换大部分时间都适用于拉丁语言,但不需要。如果您需要在STL中使用{1}},或者如果您想将数据发送到互联网等,则可以使用转换为UTF-8。
std::wstring