複数のリスト項目があるリストボックスがあります。私たちは、リストの項目をクリックすると、それが崩壊し、クリックされたアイテムの概要が表示されますのようなものを実装する:Win32(C++): - リスト項目を折りたたみ可能にする方法
私はかなりいつかのためにウェブ上でこの検索ではなく、持ってきました良い解決策を得ました。私はWin32にとって非常に新しいです。どのようなコントロールのように私が使用すべきか、これにアプローチする方法に関する提案。どんな助けもありがとう。
複数のリスト項目があるリストボックスがあります。私たちは、リストの項目をクリックすると、それが崩壊し、クリックされたアイテムの概要が表示されますのようなものを実装する:Win32(C++): - リスト項目を折りたたみ可能にする方法
私はかなりいつかのためにウェブ上でこの検索ではなく、持ってきました良い解決策を得ました。私はWin32にとって非常に新しいです。どのようなコントロールのように私が使用すべきか、これにアプローチする方法に関する提案。どんな助けもありがとう。
標準ListBoxとListViewコントロールはネイティブのアイテムを崩壊/拡大をサポートしていません、しかし、いくつかの余分な作業とリストボックスでそれを実現することが可能です。
ListBoxにLBS_OWNERDRAWVARIABLE
list box styleを付けて、リストに異なる高さの項目を含めることができます。新しい項目がリストに追加されると、ListBoxはWM_MEASUREITEM
メッセージを親ウィンドウに送信して項目の初期高さを求めます。アイテムを折りたたんで表示するか、展開して表示するかによって、適切な高さを返します。
アイテムがリストに追加されると、ListBoxにLB_SETITEMHEIGHT
メッセージを送信して、アイテムを折りたたんで表示するか、展開するかに基づいてそのアイテムの新しい高さを割り当てることができます。 ListBoxを無効にしてアイテムの再描画をトリガーします。
LBS_OWNERDRAW...
スタイルでは、ListBoxが親ウィンドウにWM_DRAWITEM
メッセージを送信するたびに、手動で各リストアイテムを描画する必要があります。 DrawText()
のように、指定したアイテムをHDC
に描画することができます。アイテムのテキストが現在折りたたまれているか、展開されているかに基づいてパラメータを設定します。また、メッセージ自体によって提供される状態情報を使用して、HDC
のフォントと背景/前景色を必要に応じて設定します(特に、選択した状態とフォーカスした状態で項目を表示する場合に重要です)。そして、あなたがする残っているすべては、あなたのクリックハンドラは(GetMessagePos()
、ScreenToClient()
、およびLB_ITEMFROMPOINT
経由)上でクリックされた項目のインデックスを決定作るところでそれと
、およびそれにその新に基づいて新しい高さに割り当てます展開/折りたたまれた状態にして、結果として得られる再描画がそれに応じて新しいテキストを描画するようにします。
@JonathanPotter:ありがとう、私の答えを更新しました –
あなたの質問は何ですか?動作していないコードがありますか?あなたの[MCVE]を示してください。動作するコードが欲しいですか?私たちはここでそれをしません。チュートリアルへの指示や、それが動作するコードをお望みですか?私たちはここでそれをしません。 –
@VipinNagar質問は特に 'winapi'についてです。あなたが提供した答えはhtmlに関するものです。 –
[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