2016-10-03 19 views
2

複数のリスト項目があるリストボックスがあります。私たちは、リストの項目をクリックすると、それが崩壊し、クリックされたアイテムの概要が表示されますのようなものを実装する:Win32(C++): - リスト項目を折りたたみ可能にする方法

enter image description here

私はかなりいつかのためにウェブ上でこの検索で​​はなく、持ってきました良い解決策を得ました。私はWin32にとって非常に新しいです。どのようなコントロールのように私が使用すべきか、これにアプローチする方法に関する提案。どんな助けもありがとう。

+2

あなたの質問は何ですか?動作していないコードがありますか?あなたの[MCVE]を示してください。動作するコードが欲しいですか?私たちはここでそれをしません。チュートリアルへの指示や、それが動作するコードをお望みですか?私たちはここでそれをしません。 –

+1

@VipinNagar質問は特に 'winapi'についてです。あなたが提供した答えはhtmlに関するものです。 –

+4

[List Box](https://msdn.microsoft.com/en-us/library/windows/desktop/bb775146.aspx)はその機能を提供していません。 a [一覧表示](https://msdn.microsoft.com/en-us/library/windows/desktop/bb774737.aspx)を参照してください。独自に実装するか、MFCのようなライブラリを使用します([CMFCPropertyGridCtrl](https://msdn.microsoft.com/en-us/library/bb983759.aspx)などを参照)。 @ VipinNagar:助けようとしても問題ありません。しかし、*試してみる*があなたが提供しなければならないすべてのものであれば、ただしないでください。 – IInspectable

答えて

5

標準ListBoxListViewコントロールはネイティブのアイテムを崩壊/拡大をサポートしていません、しかし、いくつかの余分な作業とリストボックスでそれを実現することが可能です。

ListBoxにLBS_OWNERDRAWVARIABLElist box styleを付けて、リストに異なる高さの項目を含めることができます。新しい項目がリストに追加されると、ListBoxはWM_MEASUREITEMメッセージを親ウィンドウに送信して項目の初期高さを求めます。アイテムを折りたたんで表示するか、展開して表示するかによって、適切な高さを返します。

アイテムがリストに追加されると、ListBoxにLB_SETITEMHEIGHTメッセージを送信して、アイテムを折りたたんで表示するか、展開するかに基づいてそのアイテムの新しい高さを割り当てることができます。 ListBoxを無効にしてアイテムの再描画をトリガーします。

LBS_OWNERDRAW...スタイルでは、ListBoxが親ウィンドウにWM_DRAWITEMメッセージを送信するたびに、手動で各リストアイテムを描画する必要があります。 DrawText()のように、指定したアイテムをHDCに描画することができます。アイテムのテキストが現在折りたたまれているか、展開されているかに基づいてパラメータを設定します。また、メッセージ自体によって提供される状態情報を使用して、HDCのフォントと背景/前景色を必要に応じて設定します(特に、選択した状態とフォーカスした状態で項目を表示する場合に重要です)。そして、あなたがする残っているすべては、あなたのクリックハンドラは(GetMessagePos()ScreenToClient()、およびLB_ITEMFROMPOINT経由)上でクリックされた項目のインデックスを決定作るところでそれと

、およびそれにその新に基づいて新しい高さに割り当てます展開/折りたたまれた状態にして、結果として得られる再描画がそれに応じて新しいテキストを描画するようにします。

+0

@JonathanPotter:ありがとう、私の答えを更新しました –

関連する問題