gpt4 book ai didi

c++ - 函数调用以返回ListView_SetItemText宏内的字符串

转载 作者:行者123 更新时间:2023-12-02 10:26:16 29 4
gpt4 key购买 nike

有关在ListView_SetItemText宏中设置ListView Windows控件中的项目文本的问题。
为什么以下代码有效(从某种意义上说,文本显示在ListView中)

std::string strNumber = NumberToString(number);
ListView_SetItemText( hListView, iItemIndex, iSubitemIndex, (LPSTR)strNumber.c_str() );

而直接通话不
ListView_SetItemText( hListView, iItemIndex, iSubitemIndex, (LPSTR)NumberToString(number).c_str() );

哪里
std::string NumberToString ( double Number ) 
{
std::ostringstream ss;
ss << Number;
return ss.str();
}

非常感谢

最佳答案

这是宏定义(在commctrl.h中):

#define ListView_SetItemText(w,i,iS,s) \
{ \
LV_ITEM _lvi;\
_lvi.iSubItem=iS;\
_lvi.pszText=s;\
SNDMSG((w),LVM_SETITEMTEXT,i,(LPARAM)(LV_ITEM*)&_lvi);\
}

扩展为:
    ...
_lvi.pszText=(LPSTR)NumberToString(number).c_str();
SNDMSG((hListView),LVM_SETITEMTEXT,iItemIndex,(LPARAM)(LV_ITEM*)&_lvi);
}
NumberToString函数返回一个临时的 std::string,在调用 SNDMSG之前将其删除。因此, _lvi.pszText指向稀薄的空气。 (如果 ListView_SetItemText是真正的函数调用,则您的代码将是绝对安全的。)

关于c++ - 函数调用以返回ListView_SetItemText宏内的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7282820/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com