C++ 如何从MFC中的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, &

我正在尝试获取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;
很明显,我有一些不必要的字符串转换,目前这会在


如何从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);