最近まで、リストボックスの水平スクロールバーは
プロパティの項目にチェックをしてやれば使用できるようになるものだと
ろくに調べもしないで勝手に思い込んでいました
が、
どうも色々とめんどくさいことをしないとダメらしいです
苦戦しましたが、やり方解りましたのでメモっときます
5行くらい文字列をリストボックスに表示し、もっとも長い文字列の長さの行に合わせて水平スクロールバーの長さを調節させる処理
リストボックスの横幅が文字を表示しきれている場合は水平スクロールバーは表示されません
最初に、リストボックスのプロパティのスタイルで水平スクロールバーにチェックしておきます
↓処理。
CListBox* lst = (CListBox*)GetDlgItem(IDC_LIST1);
TCHAR RBuff[256];
UCHAR bun[129];
int ii, Size;
int len = 0;
CDC *pListDC;
CFont *pListOldFont;
CString strText;
CString msg;
CString m[5] = {
_T("あいうえお"),
_T("よっぱらい"),
_T("寿司、てんぷら、通天閣"),
_T("3. 141592653589793238462643383279"),
_T("その質問はノーコメントでお願いします。")
};
//リストボックス初期化(まっしろ)
lst->ResetContent();
// もっとも長い文字列の長さを取得
for( ii = 0; ii < 5 ; ii++ )
{
wsprintf(RBuff, _T("%s\n"), m[ii] );
lst->AddString( RBuff );
if( len < strlen( m[ii] ) )
{
msg.Format("%s", RBuff );
len = strlen( m[ii] );
}
}
// リストボックスのデバイスコンテキストを取得
pListDC = mc_list.GetDC();
// デバイスコンテキストにリストボックスのフォントを設定
pListOldFont = pListDC->SelectObject(mc_list.GetFont());
// 格納した最新データの文字列幅取得
Size = pListDC->GetTextExtent(msg).cx;
// 水平スクロールバーを設定
mc_list.SetHorizontalExtent( Size + 10 );
CWnd::UpdateData( FALSE );
■後で、説明文の追加とコメントの修正。
メインフレームからダイアログを呼び出したり、
ダイアログから別のダイアログを呼び出す方法を紹介します。
今回は、一度開いたダイアログボックスを閉じるまで、
他の操作をできなくするモーダルダイアログタイプという方法を使います。
まず呼び出したいダイアログを予め作成しておきます。
例えば、"TestDlg"というIDを付けておきます。
メインフレームのメニューをクリックされたらダイアログが開くという仕様にしておきましょう。
クリックされたら下の関数内に入ります
//////////////////////////////////////////////
// TestDlg表示
void CMainFrame::OnTestMenu()
{
CTestDlg form; // 呼び出すダイアログクラス名を指定
form.DoModal(); // ダイアログ生成
}
//////////////////////////////////////////////
他にも、開いたダイアログボックスを閉じなくても他の操作を指示できる
モードレスダイアログタイプという方法もある様です。
でも、やりかた知りません(笑)
そのうち試してみまーす!
※僕は、VC6.0のMFC環境でしか経験がありませんので
他の環境での記述方法は異なる場合もあります
管理人さんに誘われて初ブログです。
素人同然ですがVBやC等の日記でも書いていこうかなと思います。
よろしくです。