CMFCListCtrl 头右键消息处理问题

wmjhl 2015-01-09 11:44:10
http://blog.csdn.net/visualeleven/article/details/6630324# 这里ELEVEN兄的一个方法,问题是我现在把基类改成CMFCListCtrl后,SendMessage会出错.现在是出错信息,要怎么处理?
出错信息:
error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)
1> d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(535) : 参见“CObject::CObject”的声明
1> d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(510) : 参见“CObject”的声明
1> 此诊断出现在编译器生成的函数“CMap<KEY,ARG_KEY,VALUE,ARG_VALUE>::CMap(const CMap<KEY,ARG_KEY,VALUE,ARG_VALUE> &)”中
1> with
1> [
1> KEY=int,
1> ARG_KEY=int,
1> VALUE=int,
1> ARG_VALUE=int
1> ]
部分代码:
if ((((LPNMHDR)lParam)->code == NM_RCLICK))
{
CPoint pt, pt2;
GetCursorPos(&pt);
pt2 = pt;
m_list.ScreenToClient(&pt);
CWnd* pWnd = m_list.ChildWindowFromPoint(pt);
CMFCHeaderCtrl pHeader = m_list.GetHeaderCtrl();
if(pWnd && (pWnd->GetSafeHwnd() == pHeader.GetSafeHwnd()))
{
HDHITTESTINFO info = {0};
info.pt = pt;
pHeader.SendMessage(HDM_HITTEST, 0, (LPARAM)&info);
CString str;
str.Format(_T("Column: %d clicked!"), info.iItem);
AfxMessageBox(str);
}
}
return CDialog::OnNotify(wParam, lParam, pResult);
...全文
224 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wmjhl 2015-01-15
  • 打赏
  • 举报
回复
引用 7 楼 likfeng 的回复:
[quote=引用 6 楼 wmjhl 的回复:] [quote=引用 4 楼 likfeng 的回复:] 注意返回的类型 CMFCHeaderCtrl pHeader = m_list.GetHeaderCtrl(); ---> CMFCHeaderCtrl &pHeader = m_list.GetHeaderCtrl();
这才是正解.有一点不明白的是,改成CMFCHeaderCtrl* pHeader = m_list.GetHeaderCtrl(); 就不能运行的,在使用CListCtrl作基类时就可以这样:CHeaderCtrl* pHeader = m_list.GetHeaderCtrl();[/quote] CMFCListCtrl 中 GetHeaderCtrl() 返回的是引用不是指针[/quote] CHeaderCtrl中的GetHeaderCtrl()返回的也是引用
likfeng 2015-01-15
  • 打赏
  • 举报
回复
引用 6 楼 wmjhl 的回复:
[quote=引用 4 楼 likfeng 的回复:] 注意返回的类型 CMFCHeaderCtrl pHeader = m_list.GetHeaderCtrl(); ---> CMFCHeaderCtrl &pHeader = m_list.GetHeaderCtrl();
这才是正解.有一点不明白的是,改成CMFCHeaderCtrl* pHeader = m_list.GetHeaderCtrl(); 就不能运行的,在使用CListCtrl作基类时就可以这样:CHeaderCtrl* pHeader = m_list.GetHeaderCtrl();[/quote] CMFCListCtrl 中 GetHeaderCtrl() 返回的是引用不是指针
wmjhl 2015-01-14
  • 打赏
  • 举报
回复
引用 4 楼 likfeng 的回复:
注意返回的类型 CMFCHeaderCtrl pHeader = m_list.GetHeaderCtrl(); ---> CMFCHeaderCtrl &pHeader = m_list.GetHeaderCtrl();
这才是正解.有一点不明白的是,改成CMFCHeaderCtrl* pHeader = m_list.GetHeaderCtrl(); 就不能运行的,在使用CListCtrl作基类时就可以这样:CHeaderCtrl* pHeader = m_list.GetHeaderCtrl();
wmjhl 2015-01-14
  • 打赏
  • 举报
回复
引用 3 楼 allenltiverson 的回复:
[quote=引用 2 楼 wmjhl 的回复:] [quote=引用 1 楼 allenltiverson 的回复:] 跪求完整源码。。。
源码地址:ttp://blog.csdn.net/visualeleven/article/details/6630324# 使用CListCtrl作为基类是没有问题的,使用CMFCListCtrl作为基类就会出错. 问题出在这句上:CMFCHeaderCtrl pHeader = m_list.GetHeaderCtrl(); [/quote] 你光让我看别人的例子不结合你实际写的代码我无从下手[/quote] 改个基类,然后头就使用CMFCheaderCtrl类.
likfeng 2015-01-14
  • 打赏
  • 举报
回复
注意返回的类型 CMFCHeaderCtrl pHeader = m_list.GetHeaderCtrl(); ---> CMFCHeaderCtrl &pHeader = m_list.GetHeaderCtrl();
allenltiverson 2015-01-14
  • 打赏
  • 举报
回复
引用 2 楼 wmjhl 的回复:
[quote=引用 1 楼 allenltiverson 的回复:] 跪求完整源码。。。
源码地址:ttp://blog.csdn.net/visualeleven/article/details/6630324# 使用CListCtrl作为基类是没有问题的,使用CMFCListCtrl作为基类就会出错. 问题出在这句上:CMFCHeaderCtrl pHeader = m_list.GetHeaderCtrl(); [/quote] 你光让我看别人的例子不结合你实际写的代码我无从下手
wmjhl 2015-01-10
  • 打赏
  • 举报
回复
引用 1 楼 allenltiverson 的回复:
跪求完整源码。。。
源码地址:ttp://blog.csdn.net/visualeleven/article/details/6630324# 使用CListCtrl作为基类是没有问题的,使用CMFCListCtrl作为基类就会出错. 问题出在这句上:CMFCHeaderCtrl pHeader = m_list.GetHeaderCtrl();
allenltiverson 2015-01-10
  • 打赏
  • 举报
回复
跪求完整源码。。。

16,502

社区成员

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

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

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