リストビューのヘッダ部を固定

[戻る]
Ponta 2005/08/29(月) 12:02:12
リストビューの使い方で質問です。

ヘッダ部分(最上部)にタイトルを入れる事は
出来たのですが、これって「|」をスライドすると
幅を変えられますが、コレを固定にしたいと思ってます。
ネットで、以下の情報を見つけたのですが、
ソースの書き方がわかりません。

>>ListView_GetHeader()で取得できるHeaderControlを
>>EnableWindow()で無効化するという方法もありますが。

ListView_GetHeader((HWND)m_ListCtrl.m_hWnd)で
HeaderControlを取った後、EnableWindow()を呼ぶ方法が
わかりません。

上記の方法以外でもやり方があれば教えてください。
VC6.0・MFCです。

Ponta 2005/08/29(月) 12:52:12
ちょっと進歩しました。
HeaderControlって、リストコントロールにあるんですね。
で、こんなソース書いてみましたが、

CHeaderCtrl* a = (CHeaderCtrl*)ListView_GetHeader((HWND)m_ListCtl.m_hWnd);
a->EnableWindow(FALSE);

EnableWindow()で異常終了します。なんででしょう?

dairygoods 2005/08/29(月) 13:06:15
ListView_GetHeader の戻り値が、CHeaderCtrl* でないからです。

MFCをお使いなら、CListCtrl::GetHeaderCtrl()を使った方が、
悩まないですむでしょう。

Ponta 2005/08/29(月) 13:18:00
((CHeaderCtrl *)(m_ListCtrl.GetHeaderCtrl()))->EnableWindow(FALSE);

ご指摘の方法ですぐ出来ました。

ListView_GetHeader()の戻り値はHWND型ですが、
(CHeaderCtrl *)でキャストしてやれば使えるものだと思ってましたが、
違うんですね・・・。

ありがとうございました。

Ponta 2005/08/29(月) 13:18:18
[[解決]]
チェック忘れました。

RAPT 2005/08/29(月) 22:54:35
> ListView_GetHeader()の戻り値はHWND型ですが、
> (CHeaderCtrl *)でキャストしてやれば使えるものだと思ってましたが、

CWnd(およびその派生クラス)にアタッチしてやれば、利用可能です。

CHeaderCtrl hc;
hc.Attach( hWnd );
hc.EnableWindow();
hc.Detach();

ま、SDKでやるなら
::EnableWindow(hWnd, FALSE);
で済みますが。

RAPT 2005/08/29(月) 22:55:15
typo
> hc.EnableWindow();
hc.EnableWindow(FALSE);

古いスレッドには追加発言できません。