ListCtrl控件,如何知道单击的是哪一列

ken16 2001-04-20 01:45:00
在vc中,用ListCtrl控件,当单击其中某一列是,如何知道单击的是哪一列?
就像windows2000中的任务管理器中,单击其中某一列可以排序。
第一个回答正确的给分。
...全文
108 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ken16 2001-05-09
  • 打赏
  • 举报
回复
vc中没有自带的函数可以实现这种功能吗?
panda_w 2001-04-20
  • 打赏
  • 举报
回复
Detecting column index of the item clicked

--------------------------------------------------------------------------------
This article was contributed by Zafir Anjum.
The HitTest() function provided by the CListCtrl class returns only the row index of the item that falls under the point being tested. The HitTest() also has the drawback that it fails if the point is not directly over the first column. To determine the row of the item, we use GetItemRect() to get the rectangular bounds of each visible row and use PtInRect() to determine if the point falls within this rectangle. Once we know the row, we use GetColumnWidth() to determine the bounding rect for each cell and then test the point against each of these bounding rectangles.

// HitTestEx - Determine the row index and column index for a point
// Returns - the row index or -1 if point is not over a row
// point - point to be tested.
// col - to hold the column index
int CMyListCtrl::HitTestEx(CPoint &point, int *col) const
{
int colnum = 0;
int row = HitTest( point, NULL );

if( col ) *col = 0;

// Make sure that the ListView is in LVS_REPORT
if( (GetWindowLong(m_hWnd, GWL_STYLE) & LVS_TYPEMASK) != LVS_REPORT )
return row;

// Get the top and bottom row visible
row = GetTopIndex();
int bottom = row + GetCountPerPage();
if( bottom > GetItemCount() )
bottom = GetItemCount();

// Get the number of columns
CHeaderCtrl* pHeader = (CHeaderCtrl*)GetDlgItem(0);
int nColumnCount = pHeader->GetItemCount();

// Loop through the visible rows
for( ;row <= bottom;row++)
{
// Get bounding rect of item and check whether point falls in it.
CRect rect;
GetItemRect( row, &rect, LVIR_BOUNDS );
if( rect.PtInRect(point) )
{
// Now find the column
for( colnum = 0; colnum < nColumnCount; colnum++ )
{
int colwidth = GetColumnWidth(colnum);
if( point.x >= rect.left
&& point.x <= (rect.left + colwidth ) )
{
if( col ) *col = colnum;
return row;
}
rect.left += colwidth;
}
}
}
return -1;
}


Date Last Updated: April 3, 1999
eggplant 2001-04-20
  • 打赏
  • 举报
回复
首先计算出每列的长度,宽度,即使用CRect来定位一个列,根据鼠标单击的位置,即Point是否落在CRect中,就可以判定单击哪一列了。要用CListCtrl和CHeaderCtrl两个类,源码在程序员大本营2000中VC源码,查看有关CListCtrl的即可。
feelinn 2001-04-20
  • 打赏
  • 举报
回复
我不要分了。
源码直接下载地址: https://pan.quark.cn/s/628ef8894244 在C语言编程环境中,数组被视为一种核心且关键的数据组织形式,其目的是容纳一系列具有相同数据类型的元素。在操作数组的过程中,常常会涉及到从数组中移除某个特定的元素的需求。本文将详细研究这一功能的实现方法,以“从一个数组中移除一个元素”为研究主题,借助给出的代码片段进行深入分析。通过观察代码,我们可以看到一个整型数组`a`被定义,其容量为10个单位,并且利用`for`循环为该数组的各个位置赋值。赋值的表达式`i*3+2`确保了每个索引位置的元素都有一个明确的数值,从而为后续的说明提供了便利。```cint a[10], i, j, x;for (i = 0; i < 10; i++) a[i] = i * 3 + 2;```在接下来的步骤中,程序会引导用户输入一个想要移除的数值,并将这个数值保存在变量`x`中。```cprintf("input delete number:\n");scanf("%d", &x);```为了从数组中移除指定的元素,代码中运用了双层嵌套的`for`循环结构。外层的循环负责遍历整个数组,寻找与变量`x`相等的元素。一旦找到匹配的元素,内层的循环就会将这个元素之后的所有元素依次向前移动一个位置,以此来覆盖掉被找到的元素。然而,该段代码存在一个小缺陷:它未能正确地调整数组的实际长度。```cfor (i = 0; i < 10; i++) { if (a[i] == x) { for (j = i + 1; j < 10; j++) a[i] = a[j]; // 存在问题:未正确处理数组长度变化 a[j] = \0; // 此操作尝试向整型数组中插入字...
内容概要:本文提出了一种基于改进粒子群算法的含碳捕集微网多时间尺度低碳经济调度方法,旨在实现电力系统低碳化与经济性的协同优化。研究构建了涵盖风光储、常规机组及碳捕集装置的微网系统模型,综合考虑可再生能源出力不确定性、负荷需求响应等因素,建立了日前-日内多时间尺度的调度框架。通过引入改进的粒子群优化算法,有效提升了求解效率与全局寻优能力,解决了高维、非线性、多约束的调度优化问题。模型以系统运行成本和碳排放成本为双重优化目标,实现了能源消耗、环境效益与经济成本之间的均衡调度,为含碳捕集技术的微电网低碳运行提供了科学决策支持。; 适合人群:具备一定电力系统、优化算法与Matlab编程基础的科研人员及工程技术人员,尤其适用于从事微电网调度、低碳能源系统、智能优化算法应用等领域研究的硕士、博士研究生及高校教师。; 使用场景及目标:① 掌握多时间尺度微网调度建模方法;② 学习将碳捕集技术融入能源系统优化调度的实现路径;③ 理解改进粒子群算法在复杂电力系统优化问题中的应用策略与性能优势;④ 为撰写相关领域学术论文或开展实际项目提供模型与代码参考。; 阅读建议:建议结合Matlab代码深入理解算法实现细节,重点关注目标函数构建、约束条件处理及算法改进策略部分,可通过调整参数或系统结构进行仿真实验,进一步探究模型的适应性与优化效果。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧