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

Message Notification from main frame to the Dockpane dialog

本文关键字:消息 通知 对话框 Dockpane 框架      更新时间:2023-10-16

我正在使用SDI MFC应用程序。我在主机上创建了一个dockpane对话框。我有我的视图类派生自CListView。每当用户单击大型机中的Listview时,我都希望在对话框中显示所选的行数据。谁能告诉我如何实现这个,以及如何从主机向对话框发送消息?

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

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是您的对话框控制栏,用于显示当前选定项目的详细信息。