gpt4 book ai didi

c++ - 为 MFC 文档 View 子类化 ListView

转载 作者:行者123 更新时间:2023-11-27 23:12:32 27 4
gpt4 key购买 nike

我有以下代码在我的 MFC MDI 应用程序的文档窗口中创建一个 ListView :

int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
return -1;

CRect getWindowRect, windowRect;
this->GetWindowRect(&getWindowRect);

windowRect.left = 0;
windowRect.top = 0;
windowRect.right = getWindowRect.right;
windowRect.bottom = getWindowRect.bottom;

CListCtrl *CarsListView = new CListCtrl();
CarsListView->Create( WS_CHILD | WS_VISIBLE | LVS_REPORT, windowRect, this, 9001 );

CarsListView->InsertColumn(0, _T("Reg. no"), LVCFMT_LEFT, 500);
CarsListView->InsertColumn(1, _T("Status"), LVCFMT_RIGHT, 100);
CarsListView->InsertColumn(2, _T("Type"), LVCFMT_LEFT, 60);

CarsListView->ShowWindow(SW_SHOW);
return 0;
}

它工作正常,它创建控件并显示它。但我无法点击或悬停它。有人告诉我应该将此控件子类化,但我真的不知道他的意思。我想我应该创建一个类 CarsListView 并实现消息处理程序,但这看起来非常复杂。 (例如,我是否必须重新设计列标题上的悬停操作?)

我需要有关此主题的帮助。我怎样才能让它发挥作用?

最佳答案

在您的 OnCreate 方法中,您初始化了一个局部变量 CListCtrl *CarsListView。当方法结束时,变量超出范围。在这种情况下,控件本身可以工作,但您的程序将出现内存泄漏,因为您没有将指针保存在 CarsListView 的任何位置。我假设您永远不会删除它。

我建议您创建一个 CChildFrame 类的成员变量,而不是这样做(在 h 文件中):

class CChildFrame: public xxxxxx
{
protected:
CListCtrl CarsListView;
}

那么,你有两个选择:

  1. 使用 DDE/DDX .您将需要 DDX_Control函数子类化列表控件。这是最简单的方法

  2. 跟着你的方法。在您的 OnCreate 方法中调用 Create() 方法来创建 CarsListView 控件的窗口。您不需要调用 new CListCtrl()

说了这么多,我认为你需要熟悉一下 Class Wizard .在它的帮助下,只需单击几下即可创建成员变量和实现 DDE

关于c++ - 为 MFC 文档 View 子类化 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19144704/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com