●リストビューのヘッダの幅を変更できないよう固定する
リストビューの列項目でユーザーに見せたくない項目がある場合、リストビューのヘッダの幅を 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);
}
より完璧にするとしたら、境界線にマウスが来た際にマウスカーソルが変更されるのも阻止する。