« ホットキーコントロールの入力制限をなくす | メイン | キーボードカスタマイズ機能 »

2008/01/20(日)

リストビューのヘッダの幅を変更できないよう固定する

リストビューの列項目でユーザーに見せたくない項目がある場合、リストビューのヘッダの幅を 0 で固定する必要がある。リストビューのヘッダの幅を固定するには、リストビューをサブクラス化し、WM_NOTIFYとしてHDN_BEGINTRACK, HDN_DIVIDERDBLCLICK が飛んできた場合に TRUE を返す。ただし、環境によっては UNICODE 環境じゃないのに HDN_BEGINTRACKW, HDN_DIVIDERDBLCLICKW が飛んでくる事があるので、HDN_BEGINTRACKW, HDN_BEGINTRACKA, HDN_DIVIDERDBLCLICKW, HDN_DIVIDERDBLCLICKA を全て禁止する。

LRESULT OnNotify(int idFrom, NMHDR* pnmhdr)
{
    // ヘッダの幅を変更できないようにする
    // UNICODE環境じゃなくてもHDN_*Wが飛んでくる場合があるようなので、
    // HDN_*A, HDN_*W 両方とも禁止
    HD_NOTIFY * phdn = (HD_NOTIFY *)pnmhdr;
    switch(phdn->hdr.code)
    {
    case HDN_BEGINTRACKA:
    case HDN_BEGINTRACKW:
    case HDN_DIVIDERDBLCLICKA:
    case HDN_DIVIDERDBLCLICKW:
        if(phdn->iItem == 1)
            return TRUE;
        break;
    }
    return CListView::OnNotify(idFrom, pnmhdr);
}

より完璧にするとしたら、境界線にマウスが来た際にマウスカーソルが変更されるのも阻止する。

トラックバックURL

このエントリーのトラックバックURL:
http://www.edolfzoku.com/diary/mt-tb.cgi/172

コメントする