問題タブ [clistctrl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
events - NM_CUSTOMDRAW イベントを処理してリスト アイテムを取得する方法
私は win32/MFC プロジェクトに取り組んでいます。ときどきいくつかの文字列を追加する必要があるカスタム CListCtrl コントロールがあります。CListCtrl に動的に追加されたアイテムに対して何らかの操作を実行する必要があります。
超基本的には、次のことを行う必要があります。
- 単一要素の追加を 検出します。
- _single items_ IMMEDIATELY AFTER (理想的には、InsertItem() 呼び出しの直後) を取得します。
- 単一アイテムの値をマップに保存します。これを使用して、他の操作を実行します。
メソッド DrawItem() をオーバーライドしてこれを行うことを考えました。しかし、OnDraw イベントは私の CListCtrl では利用できないようです。
イベントは生成されません。
重要: MyCustomCListCtrl には " On Draw Fixed " プロパティがTrueに設定されていますが、" View " プロパティはレポートとして設定されていないことに注意してください。
したがって、こことここで説明されているように、NW_CUSTOMDRAW イベントを処理し、CustomDraw ハンドラーを作成することにしました。
ここでは、別のコード例を表示できます。
次に、CListCtrl から単一の itemID を取得する方法が必要です。
より正確には、NMHDR struct から単一のアイテム IDを取得する方法が必要です。
これどうやってするの?追加したLASTアイテムの ID しか取得できません。私が見つけられない単純な間違いだと確信しています。
以下のサンプルコード:
CList Ctrl を含むダイアログのソース:
私のカスタム CList Ctrl ソース:
どんな助けでも大歓迎です!
PS 次のようなヒントは教えないでください。
- 「自分のドロー固定」プロパティを True に設定します。
- 「ON_WMDRAWITEM()」という行が挿入されていることを確認してください
- CListCtrl をレポートとして変換します。
私はすでにすべてを試しました... :-)
ありがとうございます!
それ
mfc - 項目を MFC CListCtrl オブジェクトに追加して、アイコンが上から下の順序で表示されるようにする方法は?
Visual Studio C++ 2008 v 3.5 SP1 (機能パック付き) を使用しています。
を介して MFCCListCtrl
オブジェクトに項目を追加InsertItem()
すると、ほとんどの表示モードで、それらのアイコンが行の順序が逆になりますが、列の順序は正しくなります。私は「レポート」( LV_VIEW_DETAILS
) モードを使用していないため、言及した行と列は、グリッドまたはレイアウト内でアイコンがどのように並べられているかを示しています。
次のように追加します。
そして、それらが次のように表示されることを望みます:
(ここで、アイコン # はアイテム # と一致し、N は ですitem_count
)。
ただし、「大きいアイコン」、「小さいアイコン」、および「タイル」( LV_VIEW_ICON
、LV_VIEW_SMALLICON
、LV_VIEW_TILE
) モードでは、次のように表示されます。
それらは「リスト」( LV_VIEW_LIST
) モードで正しい順序でのみ表示されますが、水平方向に並べてスクロールします。
(それらがすべて単一の行/列に表示されるかどうかは、アイコンとコントロールの相対的なサイズ/寸法の関数にすぎません。) 垂直方向で逆の順序、または正しい順序で間違った方向にすることができるようです!
どうすれば思いどおりに物事を進めることができますか? これについてドキュメントやフォーラムで何も見たことがありません-テキストによるアイテムの並べ替え(これは望ましくありません)または詳細/レポートモードでの列の順序の並べ替え(これは望ましくありません)についてのみです。
winapi - CListCtrl:水平スクロール位置を維持するには?
CListCtrl の水平スクロール バーの位置を維持するにはどうすればよいですか? リストコントロールの内容を定期的にダンプして再入力するため、古い位置を明示的に記憶して復元することなく、スクロールは左上に戻ります。
関連する質問、CListCtrl: スクロール位置を維持する方法を尋ねました。、以前ですが、当時は垂直スクロール位置にのみ興味があり、提供された回答でそれが解決されました。ただし、今は水平スクロールの位置 (および垂直スクロール) を覚えて復元したいと考えています。
image - CListCtrl の作成中にエラーが発生しました
MFC で CListCtrl を作成しようとしています。CImageListを作成中に取得しています。
mAllContactListCtrl.SetImageList() の呼び出しに失敗しました。
CImage からの CBitmap の作成を使用することが正しいのか、他の場所で間違っているのかを知りたいです。
出力では、文字列を取得していますが、画像は取得していません。
================================================== =======================
上記の関数を InitDialog() から呼び出しています
mfc - MFCCListCtrlヘッダーを右クリック
Visual Studio 6で記述されたMFCアプリがあり、それにいくつかの新しい機能を追加しています。私ができるようにしたいのは、ユーザーがプロパティページ内のリストコントロールのヘッダー列を右クリックしたときにコンテキストメニューを表示することです。クラスウィザードを表示するCListCtrlクラスが追加されました。
プロパティページのClassWizardを介して、listctrlを右クリックするためのハンドラーを追加しました。これは呼び出され、次のコードを追加して、rclickがヘッダーセクション上にあるかどうか、またある場合はどのヘッダーアイテム上にあるかを調べます。このような
ただし、ヒットテストは常に-1を返します。
プロパティページのヘッダーコントロールのHDN_ItemClickメッセージを処理して、代わりに左クリックで試してみました。これはすべてClassWizardで行われるため、ここでこの通知を処理できると期待していました。ただし、これまでに調査したところ、MFCにバグがあり、ClassWizardがこのコードをコードに挿入している可能性がありますが、この通知はリストコントロールの親までは届きません。これは本当ですか?
これを行うための最良の方法は何でしょうか?私は右クリックを好みますが、必要に応じて左クリックでもかまいません。
visual-studio-2008 - MFCを使用するMSVisualC++2008で.bmp画像を操作する際の色の問題
MFCアプリケーションを開発しています。VisualStudioで自分の.bmpイメージを使用しています。[リソースの追加]ダイアログからbmpをインポートし、一意の名前を付けてCImageListを作成します。次に、リストコントロールで画像リストを設定します。
私が抱えている問題は奇妙です。特定の色のみが表示されます。通常は赤と灰色のみです。さまざまなビット深度を使用してみましたが、何も変わりません。VSの画像エディタでbmpがどのように表示されるかを次に示します。
アイコンがリストコントロールに表示されている場合、赤の一部のみが表示され、すべての緑が灰色で表示されます。
何が起こっているのかよくわかりませんが、何が起こっているのか誰かが知っていますか?
ソリューションの更新
visual-c++ - ユーザーがCListCtrlのチェックボックスをクリックしたときに呼び出されるハンドラーをオーバーライドする方法はありますか?(MFC)
リストコントロールのチェックボックスの状態を変更するユーザーの機能を無効にしようとしています。私は現在、実際に状態を変更しています。私はすでにLVN_ITEMCHANGED
メッセージを処理していますが、状態を変更しようとすると、プログラムの残りの部分のレイアウトが原因でオプションがありません。また、ユーザーがリストコントロールをクリックしてチェックボックスをリセットしたときに、HitTestを実行しようとしましたが、探している正確な結果が得られません。
送信された特定のメッセージや、ユーザーがチェックボックス自体をクリックしたときにオーバーライドできる機能はありますか?ハンドラーをオーバーライドするか、メッセージをキャッチして、どこにも行かないようにします。
c++ - 水平スクロール バー付きの C++ MFC リスト コントロール
私が見つけた解決策のどれも私を満足させたり、機能させたりしなかったので、私はこの質問をするためにここに来ました. 私の問題はかなり簡単です。
私はCListCtrl
C++で多くの列を持っています。リストの幅に収まらないので、水平スクロール バーを追加する必要があります。
EnableScrollbar
、ShowScrollBar
、で試しましSetScrollPos
たが、どれも機能しませんでした。水平スクロールバーを作成して正しく表示するにはどうすればよいですか?
mfc - MFC: CListCtrl の最初の列をクリックしたときに行全体を強調表示したくない
ダイアログにレポート スタイルの CListCtrl WITHOUT LVS_EX_FULLROWSELECT があり、最初の列をクリックすると行全体が強調表示されます。これはしたくないのですが、どうすればこの動作を無効にできますか?
c++ - Windows 8 と CListCtrl
現在、製品を Windows 8 (デスクトップ モード) に移植しようとしています。Microsoft によると、この製品は問題なく動作するはずですが、CListCtrl 呼び出しを使用すると問題が発生します。リスト コントロールはリスト項目を生成しますが、テキストはリスト コントロールに表示されず、空のドキュメント アイコンだけが表示されます。
コントロールはオーナー描画コントロールであり、渡されるデータは間違いなく有効ですが、このデータをコントロールの新しいエントリに挿入すると、最終的に空白として表示されます。これは Windows 8 でのみ発生します。
誰かがこの問題に遭遇したことがありますか、または問題が何であるかについて何か考えがありますか?