如何解决C ++如何禁止对内容进行排序的向量迭代?
我正在创建GUI。在此GUI中,我使用一个列表框。在此列表框中,我希望显示一个TCHAR(string)列表,以允许用户在列表框中选择一个元素。我有一个特定的TCHAR顺序,必须按该顺序显示给用户。验证时发现内容已排序。我不希望内容排序。指导是值得赞赏的。
初始化向量的代码:
std::vector<const TCHAR*> tstmd = { L"ONE",L"TWO",L"THREE" };
使用迭代方法访问向量内容的代码:
void FillListBox(HWND hwndList,std::vector<const TCHAR *> &vtr)
{
for (std::vector<const TCHAR*>::iterator it = vtr.begin(); it != vtr.end(); ++it) {
SendMessage(hwndList,LB_ADDSTRING,(LPARAM)*it);
}
这是我创建列表框的方式:
hwndList = CreateWindow(
TEXT("listbox"),NULL,WS_CHILD | WS_VISIBLE | LBS_STANDARD,cxChar * COL_LIST,cyChar,cxChar * 16 + GetSystemMetrics(SM_CXVSCROLL),cyChar * 3,hwnd,(HMENU)ID_LIST,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
解决方法
您显示的vector
代码未对任何内容进行排序。字符串添加到ListBox的顺序与它们在vector
中出现的顺序相同。
您需要确保列表框本身是在没有LBS_SORT
窗口样式的情况下创建的,而没有使用LBS_STANDARD
样式包括的https://docs.microsoft.com/en-us/azure/media-services/latest/stream-live-tutorial-with-api窗口样式:
LBS_SORT
按字母顺序对列表框中的字符串进行排序。
LBS_STANDARD
按字母顺序对列表框中的字符串进行排序。每当用户单击列表框项目,双击项目或取消选择时,父窗口都会收到通知代码。列表框有一个垂直滚动条,并且在所有侧面都有边框。 此样式结合了
LBS_NOTIFY
,LBS_SORT
,WS_VSCROLL
和WS_BORDER
样式。
改为将您的CreateWindow
呼叫改为:
hwndList = CreateWindow(
TEXT("listbox"),NULL,WS_CHILD | WS_VISIBLE | /*LBS_STANDARD*/(LBS_NOTIFY | /*LBS_SORT |*/ WS_VSCROLL | WS_BORDER),cxChar * COL_LIST,cyChar,cxChar * 16 + GetSystemMetrics(SM_CXVSCROLL),cyChar * 3,hwnd,(HMENU)ID_LIST,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。