MFCのリストビューで列幅を固定するには?


ごんたろう  2011-09-15 11:45:06  No: 72909  IP: [192.*.*.*]

VisualStudio2008ProのMFCダイアログベースでアプリケーションを作成しています。
ダイアログにリストコントロールを貼り付けているのですが、そのリストビューの列幅をユーザーが変更できないようにしたいです。

そこで、イベントハンドラで、OnHdnBegintrackList1関数とOnHdnEndtrackList1関数を作成しました。(稲妻マークのアイコンから)

上記の二つの関数にブレークポイントを張っておきアプリを実行して、列幅をドラッグしてもOnHdnBegintrackList1関数が呼ばれてくれません。

ドラッグし終わりにOnHdnEndtrackList1関数は呼ばれているようです。
どなたか原因お分かりでしょうか。

また、列幅固定のその他の方法などございましたら教えて下さい。
お願いします。

編集 削除
gak  2011-09-15 13:11:49  No: 72910  IP: [192.*.*.*]

> 列幅をドラッグしてもOnHdnBegintrackList1関数が呼ばれてくれません
普通は呼ばれると思うので、普通じゃない事が起こってるんではなかろうか。

> また、列幅固定のその他の方法などございましたら教えて下さい。
動作環境がvista以降であるならば、リストビューのヘッダコントロールに HDS_NOSIZING(0x0800)スタイルを設定してやれば良い。
xp以前ならば、リストビューのヘッダコントロールの
・HDN_BEGINTRACKA
・HDN_BEGINTRACKW
・HDN_DIVIDERDBLCLICKA
・HDN_DIVIDERDBLCLICKW
に対応するハンドラで *pResult に 1 を指定してやれば良い。

上記だけでは(実際のサイズ変更は禁止できるが)マウスカーソルが「変更可能です」カーソルに変わるのはそのままなので、
ヘッダコントロールの WM_SETCURSOR に対応したハンドラでマウスカーソルを自分で指定してやれば良い。

BOOL myCHeaderCtrl::OnSetCursor(...) {
    HCURSOR cursor = HCURSOR(::GetClassLongPtr(m_hWnd, GCLP_HCURSOR));
    if (cursor == NULL) {
        cursor = ::LoadCursor(NULL, IDC_ARROW);
    }
    ::SetCursor(cursor);
    return TRUE;
}

編集 削除
仲澤@失業者  2011-09-15 13:36:15  No: 72911  IP: [192.*.*.*]

HDS_NOSIZINGとかでしょうか(vv;)。

編集 削除
仲澤@失業者  2011-09-15 13:37:55  No: 72912  IP: [192.*.*.*]

gakさんとかぶりました orz

編集 削除