VisualStudio2008ProのMFCダイアログベースでアプリケーションを作成しています。
ダイアログにリストコントロールを貼り付けているのですが、そのリストビューの列幅をユーザーが変更できないようにしたいです。
そこで、イベントハンドラで、OnHdnBegintrackList1関数とOnHdnEndtrackList1関数を作成しました。(稲妻マークのアイコンから)
上記の二つの関数にブレークポイントを張っておきアプリを実行して、列幅をドラッグしてもOnHdnBegintrackList1関数が呼ばれてくれません。
ドラッグし終わりにOnHdnEndtrackList1関数は呼ばれているようです。
どなたか原因お分かりでしょうか。
また、列幅固定のその他の方法などございましたら教えて下さい。
お願いします。
> 列幅をドラッグしても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;
}
HDS_NOSIZINGとかでしょうか(vv;)。
gakさんとかぶりました orz
ツイート | ![]() |