曾经做过让某列HeaderCtrl失效的功能,主要是想保持HeaderCtrl宽度不变,方法是重载ListCtrl的虚函数OnNotify,在这个函数中判断某个列的索引iSubItem,如果是要失效的HeaderCtrl则设置*iResult = TRUE表示消息不再往下处理,同时return,代码如下:
BOOL CStyleList::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: Add your specialized code here and/or call the base class
NMHEADER* pNMHeader = (NMHEADER*)lParam;
if (pNMHeader->iItem == 0)
{
*pResult = TRUE;
return TRUE;
}
return CListCtrl::OnNotify(wParam, lParam, pResult);
}
其结果是,被失效的HeaderCtrl向ListCtrl发送的所有通知消息都不被处理,导致对HeaderCtrl的拉动、拖拽等功能将全部失效。
现在,我要做一个很简单的功能:在这个失效HeaderCtrl上设置一个位图图标,由于这个HeaderCtrl的通知消息全部都不被ListCtrl处理,设置位图的操作因此也失效了,是需要改进代码的时候了:
BOOL CStyleList::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: Add your specialized code here and/or call the base class
NMHEADER* pNMHeader = (NMHEADER*)lParam;
if (pNMHeader->iItem == 0 && ((pNMHeader->hdr.code == HDN_BEGINTRACKW) | (pNMHeader->hdr.code == HDN_DIVIDERDBLCLICKW)))
{
*pResult = TRUE;
return TRUE;
}
return CListCtrl::OnNotify(wParam, lParam, pResult);
}
保持HeaderCtrl宽度不变,当然是不能随意左右拉动HeaderCtrl。除此之外,我注意到当在两个HeaderCtrl之间双击也会造成HeaderCtrl的宽度变化,因此,需要屏蔽这两个通知消息码:
HDN_BEGINTRACKW : 当开始调整HeaderCtrl宽度时
HDN_DIVIDERDBLCLICKW:当在两个HeaderCtrl之间双击改变HeaderCtrl宽度时
分享到:
相关推荐
1、ListCtrl和HeaderCtrl支持共用位图底图,可以整个应用程序使用同一张完整底图图片,完美实现换肤等需要; 2、ListCtrl和HeaderCtrl支持独立位图底图,绘制背景时各自使用自己的独立底图; 3、ListCtrl和...
MFC重绘CListCtrl的scrollbar,headerctrl和items的代码.用于MFC的UI的设计。
今天参考http://www.vckbase.com/document/viewdoc/?id=1855 关于改变 CListCtrl、CHeaderCtrl ...但是在对话框中每次调用该类,程序能够编译通过,但是在运行中程序总是提示出错,然后程序挂掉。请大家帮帮忙。谢谢
用mfc绘制的CListCtrl控件,非常简单实用,使用了HeaderCtrl子类,界面很全面,就是里面的图片是我自己画的,使用者可以根据自己情况修改。
CListCtrl 自绘,很漂亮! 改变文本色 headerctrl背景等.不包括滚动条。 滚动条自绘请看我另一资源
2,HeaderCtrl.zip 多行标题的CListCtrl(19KB) 3,RoundBut.zip 你需要圆形的按钮吗?这个类已经替你做好了,它可是有正常、平面、下推几种风格的,快使用它吧(25KB) 4,TransBut.zip 实现背景透明的按钮类(306KB) 5,...
1,WINAPI_OCX.zip 封装了部分Windows API的控件(92KB)<END><br>2,HeaderCtrl.zip 多行标题的CListCtrl(19KB)<END><br>3,RoundBut.zip 你需要圆形的按钮吗?这个类已经替你做好了,它可是有正常、平面、下推...
clistctrl自定义表头,用户可以根据需要来定义自己的表头高度,还可以过滤想要的内容。
clistctrl header image