从主框架到Dockpane对话框的消息通知

时间:2016-10-21 10:50:23

标签: c++ mfc

我正在使用SDI MFC应用程序。我在大型机中创建了一个dockpane对话框。我的视图类派生自 CListView 。每当用户点击大型机中的Listview时,我想在对话框中显示所选的行数据。任何人都可以告诉我如何实现这一点,以及如何将消息从大型机发布到对话框。

1 个答案:

答案 0 :(得分:0)

您可以调用方法更新控制栏窗口中的数据,直接从视图中的选择更改处理程序更新所选项目的详细信息,如下所示:

void CMyListView::OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult) 
{ 
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 

    // Did the item state change?
    if (pNMListView->uChanged & LVIF_STATE)
    {
        // Did the item selection change?
        const bool oldSelState = (pNMListView->uOldState & LVIS_SELECTED) != 0x0;
        const bool newSelState = (pNMListView->uNewState & LVIS_SELECTED) != 0x0;
        const bool selStateChanged = oldSelState != newSelState;
        if(selStateChanged)
        {
            // selection has changed
            CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
            CItemDetailsWnd* pDetailsWnd = pMainWnd->GetDetailsDialogBar();
            CItemData* pItemData = (CItemData*)GetListCtrl().GetItemData(pNMListView->iItem);            
            pDetailsWnd->PopulateDetails(pItemData);
        }
    }
    *pResult = 0; 
}

在此示例中,CItemData是单个CListView项/行的数据持有者。 CItemDetailsWnd是您的对话框控制栏,用于显示当前所选项目的详细信息。