掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CWnd 派生クラスでスクロールバーをつけるには? (ID:69219)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
開発環境:WindowsXPsp2 VC++.NET2003 MFC 行ごとに高さが異なるリストボックスのようなものが欲しくて 自作しているのですが、スクロールバーをつける方法について 悩んでいます。 現在のところ、リソースエディタでダイアログにピクチャ コントロールを貼り付けて、ダイアログの OnInitDialog 内で 動的サブクラス化して自作クラスに紐づけています。 // 実装イメージ class CMyList : public CWnd ... CMyList m_list; CXxxxDialog::OnInitDialog() { m_list.SubclassWindow( GetDlgItem( IDC_STATIC1 )->GetSafeHwnd() ); } 当初、リストボックスをオーナードローすればいいかと思い、 CListBox 派生クラスを用いていましたが、AddString する前に OnMeasureItem が一回だけ呼ばれますが、AddString 以降に 呼ばれない仕様のようなので、この方法は 断念しました。 そこで、CWnd 派生にして OnPaint ですべて自前描画しています。 この方法である程度自分がやりたいことが実現できそうでしたので、 次はスクロールバー、というところで行き詰ってしまいました。 MSDN をみると、 (1) WS_XXX でスクロールバーを指定するか (2) CreateWindow して SB_CTL を使うか、 (3) スクロールバーを描画できる API があるので WM_PAINT で自分で描画しろ のいずれかの方法があるとありました。 ところが、(1) は、CreateWindow を使用せず動的サブクラス化して いるので使用できないようです。 (2) の方法について、CMyList クラスに CScrollBar のオブジェクトを 持たせてみましたが、結びつける方法がわかりませんでした。 (OnEraseBlgnd などのタイミングで CScrollBar::SetParent(this) を 呼び出したらアサートしました。) (3) 「スクロールバーを描画できる API がある」とのことですが、 実際の API がみつけられませんでした。 上記を実現できる方法について何かご存知の方はお教えいただけない でしょうか。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.