如何将 CMFCListCtrl 与 CListView 一起使用?

发布于 2024-07-06 08:37:08 字数 287 浏览 7 评论 0原文

我想在我的 CListView 类中使用新的 CMFCListCtrl 功能(当然,还有其中的新 CMFCHeaderCtrl)。 遗憾的是,您不能使用 Attach()SubclassWindow(),因为 SysListView32 窗口已与 CListView 对象关联。

我是否必须重写 CListView 的 OnCmdMsg() 并将所有消息路由到我自己的 CMFCListCtrl 实例? (这会起作用吗?)或者有更简单/更干净的解决方案吗?

I'd like to use the new CMFCListCtrl features with my CListView class (and, of course, the new CMFCHeaderCtrl inside it). Unfortunately, you can't use Attach() or SubclassWindow() because the SysListView32 window is already associated with a CListView object.

Do I have to override CListView's OnCmdMsg() and route all messages to my own instance of CMFCListCtrl? (Will that even work?) Or is there an easier/cleaner solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

离鸿 2024-07-13 08:37:08

我将从 CFormView 继承,并让 CMFCListCtrl 占据表单视图的完整对话框。

I'd inherit from CFormView and let the CMFCListCtrl occupy the complete dialog of the form view.

忆悲凉 2024-07-13 08:37:08

如果您想要自己的 CMFCHeaderCtrl (从 CMFCHeaderCtrl 派生的 m_myHeaderCtrl),您必须在自己的 CMFCListCtrl 中重写这三个函数。

CMFCHeaderCtrl& CMyMFCListCtrl::GetHeaderCtrl() 
{ 
   return m_myHeaderCtrl; 
}

void CMyMFCListCtrl::InitHeader()
{
   // Initialize header control:
   m_myHeaderCtrl.SubclassDlgItem(0, this);
}


void CMyMFCListCtrl::OnSize(UINT nType, int cx, int cy)
{
   CListCtrl::OnSize(nType, cx, cy);
   if (myHeaderCtrl.GetSafeHwnd() != NULL)
   {
      myHeaderCtrl.RedrawWindow();
   }
}

现在,您可以在自己的 myHeaderCtrl 中完全响应,定义更多函数
(标题中有多行):

OnDrawItem(CDC* pDC, int iItem, CRect rect, BOOL bIsPressed, BOOL bIsHighlighted);

定义您自己的布局。

afx_msg LRESULT OnHeaderLayout(WPARAM wp, LPARAM lp);  

或通过MFC 代码中的示例

If you want your own CMFCHeaderCtrl (f.e. m_myHeaderCtrl derived from CMFCHeaderCtrl) you have to override these three functions in your own CMFCListCtrl

CMFCHeaderCtrl& CMyMFCListCtrl::GetHeaderCtrl() 
{ 
   return m_myHeaderCtrl; 
}

void CMyMFCListCtrl::InitHeader()
{
   // Initialize header control:
   m_myHeaderCtrl.SubclassDlgItem(0, this);
}


void CMyMFCListCtrl::OnSize(UINT nType, int cx, int cy)
{
   CListCtrl::OnSize(nType, cx, cy);
   if (myHeaderCtrl.GetSafeHwnd() != NULL)
   {
      myHeaderCtrl.RedrawWindow();
   }
}

Now you have the full responce in your own myHeaderCtrl defining some more functions
(f.e. multipe lines in header):

OnDrawItem(CDC* pDC, int iItem, CRect rect, BOOL bIsPressed, BOOL bIsHighlighted);

or defining your own layout by

afx_msg LRESULT OnHeaderLayout(WPARAM wp, LPARAM lp);  

Examples are in the MFC-Code.

谁许谁一生繁华 2024-07-13 08:37:08

CListView 没有很多功能。 就像您在上面的评论中所说的那样,只需从 CView 派生您自己的视图类,处理 WM_SIZE 来调整 CMFCListCtrl 的大小即可。

CListView doesn't have a lot of functionality. Like you said in the comment above, just derive your own view class from CView, handle WM_SIZE to resize the CMFCListCtrl and you're good to go.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文