C++ 如何从MFC中的CTabCtrl获取当前选项卡项名称?
我正在尝试获取CTabCtrl中当前所选选项卡的文本C++ 如何从MFC中的CTabCtrl获取当前选项卡项名称?,c++,tabs,mfc,C++,Tabs,Mfc,我正在尝试获取CTabCtrl中当前所选选项卡的文本 int tabCurSel = currentTabCtrl->GetCurSel(); TCITEM tcItem; tcItem.mask = TCIF_TEXT; tcItem.cchTextMax = 256; //Do I need this? CString tabCurrentCString; currentTabCtrl->GetItem(tabCurSel, &
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;
很明显,我有一些不必要的字符串转换,目前这会在
如何从CTabCtrl获取字符串?我最终尝试获取std::string,但主要问题是如何从选项卡获取文本。
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()
看起来您正在使用建议的Unicode设置。避免将UNICODE转换为ANSI(std::string
)。这种转换在大多数情况下适用于拉丁语,但并不需要。如果需要在STL中使用,可以使用std::wstring
,如果要将数据发送到internet等,可以转换为UTF-8
std::string str = CW2A(tabCurrentCString, CP_UTF8);
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
std::string str = CW2A(tabCurrentCString, CP_UTF8);