曾经做过让某列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宽度时
分享到:
相关推荐
在编程领域,特别是涉及到图形用户界面(GUI)开发时,"ListCtrl重绘...在这个过程中,HeaderCtrlCl.cpp和HeaderCtrlCl.h两个文件主要负责表头的定制,而ListCtrlCl.cpp和ListCtrlCl.h则专注于整个ListCtrl的重绘工作。
1、ListCtrl和HeaderCtrl支持共用位图底图,可以整个应用程序使用同一张完整底图图片,完美实现换肤等需要; 2、ListCtrl和HeaderCtrl支持独立位图底图,绘制背景时各自使用自己的独立底图; 3、ListCtrl和...
在Windows应用程序中,ListCtrl经常与HeaderCtrl一起使用,HeaderCtrl用于显示列标题。 创建ListCtrl的Demo步骤如下: 1. **初始化项目**:首先,我们需要一个MFC应用程序框架。打开Visual Studio,创建一个新的...
在MFC(Microsoft Foundation Classes)库中,ListCtrl控件是一种强大的组件,常用于显示多列数据,并且具有类似于电子表格的功能。然而,标准的ListCtrl控件并未直接支持在表头或标题栏中添加复选框。但在某些场景...
在MFC编程中,CListCtrl是一个非常常用的控件,用于显示列表项,通常用于创建类似Windows资源管理器的界面。然而,为了提供更个性化的用户界面(UI),有时我们需要自定义CListCtrl的滚动条(scrollbar)、表头...
今天参考http://www.vckbase.com/document/viewdoc/?id=1855 关于改变 CListCtrl、CHeaderCtrl ...但是在对话框中每次调用该类,程序能够编译通过,但是在运行中程序总是提示出错,然后程序挂掉。请大家帮帮忙。谢谢
m_listCtrl.GetWindowLong(m_listCtrl.GetHeaderCtrl()->m_hWnd, GWL_STYLE) | HDS_DRAGDROP); ``` 六、总结 CListCtrl是MFC中的强大工具,它的灵活性和可扩展性使其成为创建各种复杂列表视图的理想选择。通过对...
listCtrl.Create(LVS_REPORT | LVS_SHOWSELALWAYS, rect, pParentWnd, nID)) { // 创建失败处理 } ``` 其中`LVS_REPORT`表示使用报表视图模式,`LVS_SHOWSELALWAYS`表示始终显示选中状态。 ##### 3.2 添加和删除...
在Windows应用程序开发中,`CHeaderCtrl` 是MFC(Microsoft Foundation Classes)库中的一个类,用于处理控件头部,通常在列表视图`CListCtrl`中使用,显示列标题。这个`Change-CHeaderCtrl-Height_Font_Color.zip_...
在Windows编程中,CListCtrl是MFC(Microsoft Foundation Classes)库中的一个重要控件,...以上内容提供了改变文本颜色和HeaderCtrl背景的基本方法,但在实际应用中,可能还需要结合具体需求进行进一步的定制和优化。
本项目的核心是实现一个可过滤的表头,这通过`Filter headerctrl`标签得到体现。在提供的压缩包文件中,包含了实现这一功能的相关源代码,如`FilterHeaderCtrl.cpp`、`FilterListCtrl.cpp`等。 首先,`...
在Windows编程领域,CListCtrl是MFC(Microsoft Foundation Classes)库中用于创建类似Windows资源管理器风格的列表视图控件的一个类。这个控件允许程序员以表格形式展示数据,用户可以对其进行排序、选择和操作。在...
这个类是MFC对Windows API中的控件,如Windows Common Controls库中的ListView或HeaderCtrl的封装,提供了更高级的功能和更易用的接口。 基于VC的"可编辑、调整宽度的CDataGrid类实例代码"是一个实用的开发示例,它...
同时,我们可以在其他文件中创建和导出模块,然后在主模块中引用它们: ```javascript // header/index.js import angular from 'angular'; export default angular.module('header', []).name; // app.js import ...
在Web开发中,AngularJS是一个非常流行的前端框架,用于构建动态单页应用程序(SPA)。然而,由于浏览器缓存机制的存在,...在实际开发中,根据项目的具体需求,选择合适的方法来处理缓存问题,以达到最佳的用户体验。
Angular-Ui-Router与ocLazyLoad的结合使用,正是解决这个问题的有效方法。本文将深入讲解如何利用这两个工具实现动态加载脚本,从而提高应用性能。 Angular-Ui-Router是AngularJS的一个插件,它提供了更高级的路由...
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 你需要圆形的按钮吗?这个类已经替你做好了,它可是有正常、平面、下推...