リストビューのヘッダ操作について


ぴょぴょ  2007-08-02 00:08:21  No: 65939

今コモンコントロールのリストビューを使い始めた入門者です。
リストビューのヘッダ部に項目を「ファイル」「サイズ」「日時」などと
順番にあるとします。この項目は新しいバージョンではオプション設定で
ドラッグして任意の列に移動できますよね。そこで幾つか知りたいですが、
ある特定の列だけはドラッグ移動を禁止にすることは可能か?

CommCtrl.h ファイルを見てもドラッグ移動の指定列だけを有効/禁止に
するような便利なマクロが上手く見つかりませんでした。
マクロ以外の方法でよいアイディアで実現できるのなら知りたいです。

[質問整理]
1つ目はリストビュー(ヘッダ)の特定列だけドラッグ移動を禁止する方法
2つ目はリストビュー(ヘッダ)の特定列だけドラッグ横幅を禁止する方法
3つ目はリストビュー(ヘッダ)の特定列だけボタンのように押せない方法

[質問理由]
ちなみに1つ目のは一番左に「印」というチェックボックスだけの列を
用意していて、それだけドラッグ移動したくないために質問しました。
2つ目も一番左に「印」という列だけドラッグで横幅を変更したくない。
3つ目はソートを実装するときに「サイズ」と「日時」だけをソート可能
として「印」「ファイル」はソート不可能にしたいのです。

3つ目は特定の列だけソートを内部で行わなければ良いだけですがヘッダ
を押せなくして「最初からソートは不可能だよ」というインターフェイスに
したいのです。用意されているマクロでは恐らく無理でしょうから良い
アイディアで解決できればと思っています。
私自身だけでは思いつきませんでした。

どれか1つでも分かる方やこんなアイディアで出来そうだという情報を
お待ちしています。
それではよろしくお願い致します。


wclrp ( 'o')  2007-08-03 07:05:23  No: 65940

実際に試したわけじゃないのでできるか判りません。

HDN_BEGINTRACKがヘッダコントロールで分割でドラッグ開始時の知らせらしいね。
リストビューでWM_NOTIFYを受け取ってみてはどうでしょうか。
0を返せば無効になるみたいなことがMSDNにあります。
実際のところどうなのかわかりませんけど。

それでも駄目ならヘッダーコントロールをサブクラス化して
ボタンダウンのときデフォルト処理させずreturnさせてしまえば確実。

HDM_HITTESTかなんかで何処でボタンダウンしたか確認したらいいのかも。

今、XPでタスクマネージャのリストビュー見てんだけど
分割部分でマウスカーソルの形状が変わるんだね。
それとマウスホバーで色が変わるんだね。
これらの対応もしないと「最初から不可能だよ」という
ルックアンドフィールにならないね。


ぴょぴょ  2007-08-03 07:39:48  No: 65941

wclrp ( 'o')さん。
情報を有り難うございます。

「HDN_BEGINTRACK」で調べてみます。
http://forums.belution.com/ja/vc/000/204/06s.shtml
をちょっと今読んでいます。MFC 分からないので苦戦中。

>それでも駄目ならヘッダーコントロールをサブクラス化して
>ボタンダウンのときデフォルト処理させずreturnさせてしまえば確実。
サブクラス化は思いつきませんでした。
これは参考になりました。

他にもマウス形状、マウスホバーも考慮しないといけないね。
ちょっと大変だ。でもいろいろ試行錯誤してみる。
まずはヘッダコントロールをお勉強してきます。

あとヘッダコントロールやリストビューの WM_NOTIFY について情報を
知っている方がいましたら教えて下さい。
それではまたお待ちしています。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加