リスト・ボックスの水平スクロールの設定



リストボックスの水平スクロールを設定したい場合、ダイアログ・エディタで
プロパティを開いて、水平スクロールにチェックを入れるのみでは水平スクロールバー
が表示されません。それと同時に”SetHorizontalExtent”を使用してスクロール幅を
設定する必要があります。SetHorizontalExtentの詳細はMSDNを参照して下さい。



【サンプル】

    CString ss;
    CSize sz;
    int  dx = 0;

    TEXTMETRIC   tm;

    //エディットボックスからデータを取得
    CEdit* myEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1);
    myEdit1->GetWindowText(ss);

    //リストボックスへデータを追加
    CListBox* myListBox1 = (CListBox*)GetDlgItem(IDC_LIST1);
    myListBox1->AddString(ss);

    //テキストボックス上のテキストデータのフォント情報を取得
    CDC* pDC = myListBox1->GetDC();
    CFont* pFont = myListBox1->GetFont();
    CFont* pOldFont = pDC->SelectObject(pFont);
    pDC->GetTextMetrics(&tm); 
    
    //テキストボックス上に追加された文字列の長さ(ピクセル)を取得
    myListBox1->GetText(0, ss);
    sz = pDC->GetTextExtent(ss);
    dx = sz.cx + tm.tmAveCharWidth; //設定するスクロール幅を少し広げる

    //デバイス コンテキストを解放
    myListBox1->ReleaseDC(pDC);

    //水平スクロール幅を指定
    myListBox1->SetHorizontalExtent(dx);