16,548
社区成员




CTabDlg *Dlg=(CTabDlg*)GetParent()->GetParent ();
Dlg->GetDlgItem(IDC_Tab1_EDIT)->SetWindowTextW(sFromList1);
BOOL CMainDlg ::ListCtrlItemSelChangedCallback(CWnd *pWnd, int iItem, int iSubItem, LPCTSTR szItemStr)
{
CMainDlg *pDlg = (CMainDlg *)pWnd;
pDlg->SetDlgItemText(IDC_EDIT1, szItemStr);
return TRUE;
}
//subDlg1.h
class CSubDlg1 : ……
{
public:
//回调窗口指针 及回调函数指针
CWnd *m_pCallbackWnd;
BOOL (*pItemSelChangedCallback)(CWnd *pWnd, int iItem, int iSubItem, LPCTSTR szItemStr);
//LVN_ITEMCHANGED 消息响应声明
afx_msg void OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult);
//subDlg1.cpp
CSubDlg1 :: CSubDlg1 () : ……
{
//初始化
m_pCallbackWnd = NULL;
pItemSelChangedCallback = NULL;
……
}
//消息映射
BEGIN_MESSAGE_MAP(……)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST, OnItemchangedList)
……
END_MESSAGE_MAP()
//响应 LVN_ITEMCHANGED
void CSubDlg1 ::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CListCtrl *pListCtrl = (CListCtrl*)CWnd::FromHandle(pNMListView->hdr.hwndFrom);
if(pListCtrl
&& pNMListView->iItem >= 0 //选择项有效
&& (pNMListView->uNewState & LVIS_SELECTED) //当前选中
&& (!(pNMListView->uOldState & LVIS_SELECTED)) //之前未选中
&& 1)
{
//获取字符数据
CString str = pListCtrl->GetItemText(pNMListView->iItem, pNMListView->iSubItem);
TRACE(_T("OnItemchangedList item=%d subItem=%d ItemText=%s\n"),
pNMListView->iItem, pNMListView->iSubItem, str);
//回调
if(m_pCallbackWnd && pItemSelChangedCallback)
{
pItemSelChangedCallback(m_pCallbackWnd, pNMListView->iItem, pNMListView->iSubItem, str);
}
}
*pResult = 0;
}
//主对话框
//mainDlg.h
class CMainDlg : ……
{
CSubDlg1 m_sbuDlg1;
//静态回调函数
static BOOL ListCtrlItemSelChangedCallback(CWnd *pWnd, int iItem, int iSubItem, LPCTSTR szItemStr);
//mainDlg.cpp
BOOL CMainDlg :: OnInitDialog()
{
……
//初始化回调函数指针
m_sbuDlg1.m_pCallbackWnd = this;
m_sbuDlg1.pItemSelChangedCallback = ListCtrlItemSelChangedCallback;
m_sbuDlg1.Create……
……
}
//回调函数
BOOL CMainDlg ::ListCtrlItemSelChangedCallback(CWnd *pWnd, int iItem, int iSubItem, LPCTSTR szItemStr)
{
CT1Dlg *pDlg = (CT1Dlg *)pWnd;
pDlg->SetDlgItemText(IDC_EDIT1, szItemStr);
return TRUE;
}