LVM_GETITEM 和 LVM_GETITEMTEXT 有什么区别?
What is the difference between LVM_GETITEM and LVM_GETITEMTEXT?
我想获取 ListView 行的文本(项目和子项目的文本),但我不确定是否应该使用 LVM_GETITEM
或 LVM_GETITEMTEXT
。
这两个消息有什么区别,第一个检索有关项目或子项目的全部信息,而另一个仅检索文本?
两者 LVM_GETITEM and LVM_GETITEMTEXT 都可用于检索项目或子项目的文本数据。由于检索项目的文本数据是一项非常常见的操作,因此提供 LVM_GETITEMTEXT
消息是为了方便实施。
为了说明差异,这里有两个使用任一消息的实现(为简洁起见省略了错误处理):
std::wstring GetListViewItemText( HWND a_hWnd, int a_Item, int a_SubItem) {
std::vector<wchar_t> buffer( 1024 );
LVITEM lvi = { 0 };
lvi.mask = LVIF_TEXT; // Only required when using LVM_GETITEM
lvi.pszText = buffer.data();
lvi.cchTextMax = static_cast<int>( buffer.size() );
lvi.iItem = a_Item; // Only required when using LVM_GETITEM
lvi.iSubItem = a_SubItem;
::SendMessage( hwnd, LVM_GETITEM, 0, reinterpret_cast<LPARAM>( &lvi ) );
return std::wstring( lvi.pszText );
}
稍短,使用 LVM_GETITEMTEXT
:
std::wstring GetListViewItemText( HWND a_hWnd, int a_Item, int a_SubItem) {
std::vector<wchar_t> buffer( 1024 );
LVITEM lvi = { 0 };
lvi.pszText = buffer.data();
lvi.cchTextMax = static_cast<int>( buffer.size() );
lvi.iSubItem = a_SubItem;
::SendMessage( hwnd, LVM_GETITEMTEXT, a_Item, reinterpret_cast<LPARAM>( &lvi ) );
return std::wstring( lvi.pszText );
}
我想获取 ListView 行的文本(项目和子项目的文本),但我不确定是否应该使用 LVM_GETITEM
或 LVM_GETITEMTEXT
。
这两个消息有什么区别,第一个检索有关项目或子项目的全部信息,而另一个仅检索文本?
两者 LVM_GETITEM and LVM_GETITEMTEXT 都可用于检索项目或子项目的文本数据。由于检索项目的文本数据是一项非常常见的操作,因此提供 LVM_GETITEMTEXT
消息是为了方便实施。
为了说明差异,这里有两个使用任一消息的实现(为简洁起见省略了错误处理):
std::wstring GetListViewItemText( HWND a_hWnd, int a_Item, int a_SubItem) {
std::vector<wchar_t> buffer( 1024 );
LVITEM lvi = { 0 };
lvi.mask = LVIF_TEXT; // Only required when using LVM_GETITEM
lvi.pszText = buffer.data();
lvi.cchTextMax = static_cast<int>( buffer.size() );
lvi.iItem = a_Item; // Only required when using LVM_GETITEM
lvi.iSubItem = a_SubItem;
::SendMessage( hwnd, LVM_GETITEM, 0, reinterpret_cast<LPARAM>( &lvi ) );
return std::wstring( lvi.pszText );
}
稍短,使用 LVM_GETITEMTEXT
:
std::wstring GetListViewItemText( HWND a_hWnd, int a_Item, int a_SubItem) {
std::vector<wchar_t> buffer( 1024 );
LVITEM lvi = { 0 };
lvi.pszText = buffer.data();
lvi.cchTextMax = static_cast<int>( buffer.size() );
lvi.iSubItem = a_SubItem;
::SendMessage( hwnd, LVM_GETITEMTEXT, a_Item, reinterpret_cast<LPARAM>( &lvi ) );
return std::wstring( lvi.pszText );
}