为什么我的对话框程序不能响应listctrl的HDN_ITEMCHANGED消息??

thinkingsheep 2005-06-29 10:47:33
我在一个对话框中添加了一个listctrl,我像选中一项的时候响应更新,于是添加了响应HDN_ITEMCHANGED消息,可是我中断调试发现当我选中一列的时候根本没有进入对应的OnItemchangedList函数,我以前就是这么做的,可以的,请问是什么回事啊?大家帮帮我.
...全文
421 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
thinkingsheep 2005-06-30
  • 打赏
  • 举报
回复
抓狂了,重建了一个工程,还是不行。把代码帖出来给大家看!
BOOL CDbconfig2Dlg::OnInitDialog()//初始化listctrl
{
CDialog::OnInitDialog();
......//省略,自动生成的
DWORD dwStyle=GetWindowLong(m_list.GetSafeHwnd(),GWL_STYLE);
dwStyle |= LVS_REPORT;
SetWindowLongA(m_list.GetSafeHwnd(),GWL_STYLE,dwStyle);
m_list.SetExtendedStyle(LVS_EX_HEADERDRAGDROP|LVS_EX_FULLROWSELECT|LVS_EX_TRACKSELECT);


ShowData();

return TRUE; // return TRUE unless you set the focus to a control
}


BOOL CDbconfig2Dlg::ShowData()//从数据库读数据,显示。正常,全部正确读出来了
{
int i = 0, iCount;
m_list.DeleteAllItems();//首先清空listview
iCount = m_list.GetHeaderCtrl()->GetItemCount();
for(i = 0; i < iCount; i++)
{
m_list.DeleteColumn(0);
}
for(i = 0; i < iCount; i++)
{
m_list.GetHeaderCtrl()->DeleteItem(0);
}

CString strSql;
strSql = "select * from IDInfo";

m_db.ConnectDB("WBA","", "");
CODBCSet set;
m_db.PrepareSql(strSql, set);

for(i = 0; i < set.GetCols(); i++)
{
m_list.InsertColumn(i, set.m_coldatafmt[i].name,LVCFMT_CENTER,80);
}
int iRow = 0;
while(m_db.FetchData())
{
for(i = 0; i < set.GetCols(); i++)
{
if(i == 0)
{
m_list.InsertItem(iRow, set.m_coldata[0].value);
}
else
{
m_list.SetItemText(iRow, i, set.m_coldata[i].value);
}

}
iRow++;
}
set.Empty();
m_db.DisConnect();

return TRUE;
}

void CDbconfig2Dlg::OnItemchangedList2(NMHDR* pNMHDR, LRESULT* pResult)
{
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
......//这边break,但是发现根本进不到这边,也就是说没有响应这个消息!
*pResult = 0;
}
cieon_123 2005-06-30
  • 打赏
  • 举报
回复
你在属性里选择single select看看
hxue1981 2005-06-30
  • 打赏
  • 举报
回复
再加个|LVS_EX_ONECLICKACTIVATE试试!感觉问题不在这,可能从新建ClistCtrl资源会好!
VC总是出现这种莫名其妙的问题,好好的代码,程序读到那就跳过去了!
thinkingsheep 2005-06-30
  • 打赏
  • 举报
回复
list设成report模式,然后初始化:
DWORD dwStyle=GetWindowLong(m_list.GetSafeHwnd(),GWL_STYLE);
dwStyle |= LVS_REPORT;
SetWindowLongA(m_list.GetSafeHwnd(),GWL_STYLE,dwStyle);
m_list.SetExtendedStyl(LVS_EX_HEADERDRAGDROP|LVS_EX_FULLROWSELECT|LVS_EX_TRACKSELECT);
添加表头,添加数据。就是这个顺序,但是不能响应事件,救命啊,问题在哪里啊??
hxue1981 2005-06-30
  • 打赏
  • 举报
回复
HDN_ITEMCHANGED是选中行发生变化时发出的讯息!你先确保初始化ClistCtrl时的基本格式正确!
在OnItemchangedList函数中代码保证无误,用MessageBox测试一下!
thinkingsheep 2005-06-30
  • 打赏
  • 举报
回复
我发现任何事件都不能响应,HDN_ITEMCLICK也设中断了,但是没反应,根本没进去。我是参考http://www.vckbase.com/document/viewdoc/?id=597例子做的,以前都是没问题的,真是奇怪了!救命啊!
xing_xing_xing 2005-06-29
  • 打赏
  • 举报
回复
应该响应HDN_ITEMCLICK 这个消息。
HDN_ITEMCHANGED是header的宽度改变才有的消息

16,551

社区成员

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

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

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