- 締切済み
[WIN32/SDK] リストボックス(初級)
リストボックスにアイテムを追加後に ソートさせたいんですが、 どのような方法でできますか? お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
[質問主です] GetWindowLong, SetWindowLong で リストボックスのウインドウスタイルを変更して LBS_SORT を追加してもソートされなかったので、 以下のようにして解決しました。 void SortListItem (HWND hListBox){ int i; int count ; // リストボックスアイテム数 char* ptr; count = ListBox_GetCount (hListBox); // リストのアイテム数取得 ptr = (char*)malloc (BUF_SIZE*count); // BUF_SIZE : 十分大きい値 if(ptr){ ZeroMemory (ptr, BUF_SIZE*count); for (i=0; i<count; i++){ ListBox_GetText(hListBox, 0, ptr + i*BUF_SIZE); ListBox_DeleteString(hListBox, 0); } for (i=0; i<count; i++) ListBox_AddString (hListBox, ptr + i*BUF_SIZE); free(ptr); } } // qsort 関数用 int qsort_item (const void* a, const void* b){ return strcmp ((char*)a, (char*)b); }
お礼
void SortListItem (HWND hListBox){ int i; int count ; // リストボックスアイテム数 char* ptr; count = ListBox_GetCount (hListBox); // リストのアイテム数取得 ptr = (char*)malloc (BUF_SIZE*count); // BUF_SIZE : 十分大きい値 if(ptr){ ZeroMemory (ptr, BUF_SIZE*count); for (i=0; i<count; i++){ ListBox_GetText(hListBox, 0, ptr + i*BUF_SIZE); ListBox_DeleteString(hListBox, 0); } qsort (ptr, count, BUF_SIZE, qsort_item); // <========== 忘れてました。 for (i=0; i<count; i++) ListBox_AddString (hListBox, ptr + i*BUF_SIZE); free(ptr); } } // qsort 関数用 int qsort_item (const void* a, const void* b){ return strcmp ((char*)a, (char*)b); }