本人想要用CListCtrlEx 来替换clistview中的clistctrl,看以前各位大虾的帖子写的是这样:
CListCtrlEx m_MyList;//在CListView类中添加一个CListCtrlEx成员变量
...
方法1(smatter(充内行)的回帖 ):
//在PreSubclassWindow里加就可以了
m_MyList.SubclassWindow(GetListCtrl().m_hWnd);
方法2( zcy_beijing (行云流水) 的帖子 ):
//CMyListView类的OnCreate()函数中添加:
m_MyList.SubclassWnd(GetListCtrl().m_hWnd);
方法3( laiyiling(最熟悉的陌生人) 的回帖):
//在视图里定义CMyListCtrl最成员对象,在OnInitUpdate函数里
CRect rect;
GetClientRect(&rect);
m_MyList.MoveWindow(rect);//函数把你自己的控件占满整个客户区就可以了。但几种方法都会出错。
方法1运行后显示INT 3的汇编代码,提示“User beakpoint called from code at 0x77fa144b”方法2运行后显示ASSERT异常,程序停在
BOOL CWnd::Attach(HWND hWndNew)
{
ASSERT(m_hWnd == NULL); // only attach once, detach on destroy
ASSERT(FromHandlePermanent(hWndNew) == NULL);
// must not already be in permanent map
方法3运行后显示ASSERT异常,程序停在
void CWnd::MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint)
{
ASSERT(::IsWindow(m_hWnd));
不知这些方法是否可行,或者还应该进行一些别的操作,希望各位高手能指点一二,先谢谢了
CListCtrlEx m_MyList;//在CListView类中添加一个CListCtrlEx成员变量
...
方法1(smatter(充内行)的回帖 ):
//在PreSubclassWindow里加就可以了
m_MyList.SubclassWindow(GetListCtrl().m_hWnd);
方法2( zcy_beijing (行云流水) 的帖子 ):
//CMyListView类的OnCreate()函数中添加:
m_MyList.SubclassWnd(GetListCtrl().m_hWnd);
方法3( laiyiling(最熟悉的陌生人) 的回帖):
//在视图里定义CMyListCtrl最成员对象,在OnInitUpdate函数里
CRect rect;
GetClientRect(&rect);
m_MyList.MoveWindow(rect);//函数把你自己的控件占满整个客户区就可以了。但几种方法都会出错。
方法1运行后显示INT 3的汇编代码,提示“User beakpoint called from code at 0x77fa144b”方法2运行后显示ASSERT异常,程序停在
BOOL CWnd::Attach(HWND hWndNew)
{
ASSERT(m_hWnd == NULL); // only attach once, detach on destroy
ASSERT(FromHandlePermanent(hWndNew) == NULL);
// must not already be in permanent map
方法3运行后显示ASSERT异常,程序停在
void CWnd::MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint)
{
ASSERT(::IsWindow(m_hWnd));
不知这些方法是否可行,或者还应该进行一些别的操作,希望各位高手能指点一二,先谢谢了
解决方案 »
- 响应鼠标消息的难题
- 如何在新程序中调用已有的窗体?
- 求教一个关于图片程序内存管理的问题。
- 在W2K的VC60下跑OpenGL例程的问题!
- 关于动态释放COM组件(DLL模式)请教,各位大侠指点指点哈,小弟感激中。。。
- 帮帮忙?
- 如何调出系统数据源配置的对话框?
- CScrollView中的OnUpdate怎么才能触发?
- 怎么才能让Connect()也成为非阻塞模式?
- 我现在大四,请问一下各位现在的或当年的毕业设计题目是什么,怎么搞的,有什么收获?能谈一下吗?
- 能不能把微软网站上最新的MSDN Liberary 下载下来,网上看太慢了?是不是交钱购买光盘??
- 【请教】怎样获取硬盘与U盘的通讯内容【请教】
m_tree.SubclassWindow(hwnd);但是这时不要用原先的CTreeCtrl(用GetTreeCtrl()得到)
可能这样吧CListCtrlEx::OnInitialUpdate()
{
CListCtrlEx::OnInitialUpdate(); //先调用了基类的OnInitialUpdate
// 然后才是你的代码
}
{
CMyListView::OnInitialUpdate(); //先调用了基类的OnInitialUpdate
// 然后才是你的代码
}
顺手又写错了,csdn不能修改真是不方便CMyListView::OnInitialUpdate()
{
CListView::OnInitialUpdate(); //先调用了基类的OnInitialUpdate
// 然后才是你的代码
}
方案1:把Ctrl和View中重复的功能作成模板(可以参考CHTMLEditCtrl/CHTMLEditView的实现)
方案2:在FormView里面创建一个Listctrl,在FormView大小变化时移动它以充满整个窗口
方案3:单独编写Ctrl和View,把Ctrl和View中重复的代码作成辅助函数供窗口的消息相应函数调用。
void CMyListView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
m_TestListCtrl.SubclassWindow(GetListCtrl().m_hWnd); // TODO: Add your specialized code here and/or call the base class
}
void CMyListView::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
HWND hwnd = GetListCtrl().m_hWnd;
if (hwnd)
{
CWnd* pListCtrl = CWnd::FromHandlePermanent(hwnd);
if (pListCtrl)
{
if (!pListCtrl->IsKindOf(RUNTIME_CLASS(CListCtrlEx)))
{
pListCtrl->Detach();
m_MyList.SubclassWindow(hwnd);
}
}
else
m_Header.SubclassWindow(hwnd);
}
CListCtrl::PreSubclassWindow();
}
CListCtrl::PreSubclassWindow();
改成CListView::PreSubclassWindow();