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


ごんたろう  2011-09-15 20:45:06  No: 72909

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

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

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

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

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


gak  2011-09-15 22:11:49  No: 72910

> 列幅をドラッグしても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 22:36:15  No: 72911

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


仲澤@失業者  2011-09-15 22:37:55  No: 72912

gakさんとかぶりました orz


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








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