ページ 11

コンボボックスのソート

Posted: 2010年6月22日(火) 22:10
by 爺プログラマー
リストにソート掛をけるにはCreateWindowEx(でCBS_SORTオプションを設定しますが、
順番に並んでくれません。

又、ソートの対象が今一よくわかりません。
ファイル作成日付順にするにはどの様にしたら良いか教えてください。

Re:コンボボックスのソート

Posted: 2010年6月22日(火) 22:15
by シエル
コードを貼っていただけますか?

Re:コンボボックスのソート

Posted: 2010年6月22日(火) 23:05
by 爺プログラマー
h_ComboBox1 = CreateWindowEx(0, "COMBOBOX", "",WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST|CBS_SORT,X, Y, 500, 200, hWnd, (HMENU)IDC_COMBOBOX, h_Inst, NULL);

strcat(INI_BUFF+Folder,"\\*.wav");
List_len = 0;
i=-1;

//ファイルの検索
hFind = FindFirstFile(INI_BUFF+Folder, &lpFileData);

next_file:

FILENAME=lpFileData.cFileName;
j=strlen(FILENAME)-4;
FILENAME[j]=0;//拡張子削除

SendMessage(h_ComboBox1, CB_ADDSTRING, 0, (LPARAM)FILENAME);

if(j > List_len)List_len = j;

if(FindNextFile(hFind,&lpFileData)!=0)goto next_file;

FindClose(hFind);

SetWindowText(h_EditBox,FILENAME);//最後のファイル名をテキストボックスに書き込む

List_len = List_len * 8;
SendMessage(h_ComboBox1,CB_SETDROPPEDWIDTH,List_len,NULL);//最大幅設定

i=SendMessage(h_ComboBox1, CB_GETCOUNT, 0, 0)-1;//行数取得

SendMessage(h_ComboBox1, CB_SETCURSEL, i, 0);//最後の行を初期表示にする
return 0;

Re:コンボボックスのソート

Posted: 2010年6月22日(火) 23:20
by シエル
コンボボックスのCBS_SORTのオプションはアルファベット順にソートだった気がします。
順番に並ばないというのはアルファベット順にも並ばないということですか?
ファイル作成日順に並ばないということですか?

Re:コンボボックスのソート

Posted: 2010年6月22日(火) 23:34
by 爺プログラマー
初期段階のCB_ADDSTRINGではアルファベット順になりますが、作成後ある項目を削除して同じアイテム番号の所にCB_INSERTSTRINGでストリングを送った後開くとそのストリングは順番になっていません。
リストの内容を変更した後ではソート対象にはならないのでしょうか?

Re:コンボボックスのソート

Posted: 2010年6月22日(火) 23:45
by YuO
MSDNをちゃんと読みましょう。

> Unlike the CB_ADDSTRING message, the CB_INSERTSTRING message does not cause a list with the CBS_SORT style to be sorted.
と,CB_INSERTSTRINGではソートされた状態にはならないと書いてあります。

MSDN: CB_INSERTSTRING Message (Windows)
http://msdn.microsoft.com/en-us/library/bb775875.aspx

ソートした状態を保ちたいのであれば,CB_ADDSTRINGを使ってください。

Re:コンボボックスのソート

Posted: 2010年6月22日(火) 23:55
by 爺プログラマー
わかりました、全てをもう一度順に送ってやればいいのですね。
リスト作成対象のフォルダーの表示順が反映されることになるようです。

ネットは人を無精者にするようです。
ちゃんと読んでいる人には頭が下がります。