お世話になっています、GGです。
ListBoxプロパティにSortで有効と無効しているのですが、
プログラムで設定はどうなっているのでしょうか。
環境:.Net MFC使用、Win2000
よろしくお願いします。
…ニホンゴになってないんですけど。
訂正
>ListBoxプロパティにSortで有効と無効しているのですが、
>プログラムで設定はどうなっているのでしょうか。
ListBoxプロパティにSortを有効(無効)しているのですが、
プログラムの場合はどう書くのでしょうか。
よろしくお願いします。
CListBox::Createの引数でスタイルを設定することになろうかと思います。
マニュアルを読んでください。
CListBoxの派生元にCWndクラスがあるのでCWnd::ModifyStyleを使う手もあるかと思います。
コントロールも全てウインドウの一種なのでCWndクラスのメソッドも利用可能です。
コントロールに限らず、CWndクラスから派生しているクラスは基本的にCWndクラスの
メソッドが利用できます。派生先のクラスに適当なメソッドが見つからないときは
CWndクラスの方まで確認するようにした方が良いです。
あと、コントロールやウインドウのスタイルにはCreateで生成した時にしか設定できない
タイプの物と前述のCWnd::ModifyStyleで変更可能なものがあります。
全てのスタイルがCWnd::ModifyStyleで可能なわけではありませんから注意が必要です。
動的にスタイルを換えるやり方を試してみました。
こんな感じでしょうか。(他にもあると思いますが・・・。)
リストボックスのプロパティがソート無の場合、ソート有に換えられました。
CListBox* myLIST = (CListBox *)GetDlgItem(IDC_LIST1);
unsigned long dwStyle;
unsigned long dwStyleEx;
CRect rect;
CFont* pFont;
dwStyle = myLIST->GetStyle();
dwStyleEx = myLIST->GetExStyle();
pFont = myLIST->GetFont();
myLIST->GetWindowRect( &rect );
this->ScreenToClient( &rect );
dwStyle |= LBS_SORT;
myLIST->DestroyWindow();
myLIST->CreateEx( dwStyleEx, _T(LISTBOX), _T("), dwStyle, rect, this,
IDC_LIST1 );
myLIST->SetFont(pFont);
リストボックスのソートに関しては生成時にしか設定できない仕様みたいですね。
従ってさやびさんが書かれているように切り替えるには一度破棄して生成しなおす必要が
あります。さらに言うなら中に表示すべき内容もどこかに保持しておいて再設定が
可能になるようにしておく必要もありますね。
リストボックスに入れたから取り込んだデータは破棄と言うわけには行かないです。
あと考えられる方法としてははじめからソートありのリストボックスとソート無しの
リストボックスを作成しておき、両方に同じようにデータを入れておいて
表示/非表示で切り替えるとかですかねぇ。
これだと破棄と生成という処理をする必要が無いので切り替えも早いと思います。
難点としては非表示の分のリソースも食ってしまう事とどちらを表示しているかで
処理を分岐する必要があるかもと言うことでしょうか。
もっとも後者の方は工夫次第で最小限の制御で済みそうですけれどね。
επιστημηさん、PATIOさん、さやぴさん
ご回答ありがとう。
一番簡単なのは、
>あと考えられる方法としてははじめからソートありのリストボックスとソート無しの
>リストボックスを作成しておき、両方に同じようにデータを入れておいて
>表示/非表示で切り替えるとかですかねぇ。
です。
さやぴさんご紹介の方法は後でやってみます。
できたら報告したします。
今回ご回答いただいて、ほんとにありがとうございました。