// navsptcedlg.cpp : implementation file // #include "stdafx.h" #include "geomative.h" #include "navsptcedlg.h" #include "Constant.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern int g_iCurrListColIndex; extern int g_iCurrListColOrder; extern int CALLBACK ListStrCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lSortObject); extern int g_UIOffset; ///////////////////////////////////////////////////////////////////////////// // CNavSptCEDlg dialog CNavSptCEDlg::CNavSptCEDlg(CWnd* pParent /*=NULL*/) : CDialog(CNavSptCEDlg::IDD, pParent) { //{{AFX_DATA_INIT(CNavSptCEDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CNavSptCEDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CNavSptCEDlg) DDX_Control(pDX, IDC_LIST_EXEC_CE, m_ceList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CNavSptCEDlg, CDialog) //{{AFX_MSG_MAP(CNavSptCEDlg) ON_WM_SIZE() ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_EXEC_CE, OnColumnclickListExecce) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_EXEC_CE, OnItemchangedListExecce) ON_NOTIFY(NM_RCLICK, IDC_LIST_EXEC_CE, OnRclickListExecce) ON_WM_SHOWWINDOW() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CNavSptCEDlg message handlers void CNavSptCEDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: Add your message handler code here CListCtrl* pNavCEList = NULL; pNavCEList = (CListCtrl*)(this->GetDlgItem(IDC_LIST_EXEC_CE)); if (pNavCEList != NULL) { CRect rect; GetClientRect(&rect); pNavCEList->MoveWindow(&rect); } pNavCEList = NULL; } BOOL CNavSptCEDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here CString strColTitle; m_ceList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE | LVS_EX_GRIDLINES); g_iCurrListColIndex = (int)VAL_ZERO; g_iCurrListColOrder = (int)VAL_ZERO; strColTitle.Empty(); strColTitle.LoadString(IDS_DB_SCON_SNAME+g_UIOffset); m_ceList.InsertColumn(0, strColTitle, LVCFMT_LEFT, 150); strColTitle.Empty(); strColTitle.LoadString(IDS_DB_SCON_DEFINER+g_UIOffset); m_ceList.InsertColumn(1, strColTitle, LVCFMT_LEFT, 80); strColTitle.Empty(); strColTitle.LoadString(IDS_DB_SCON_DEDATE+g_UIOffset); m_ceList.InsertColumn(2, strColTitle, LVCFMT_LEFT, 80); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CNavSptCEDlg::Schedule() { int iSptRecIndex = (int)VAL_ZERO; POSITION posSptRec; DWORD dwItemHandle = (DWORD)VAL_ZERO; DWORD dwImageState = (DWORD)VAL_ZERO; DWORD dwTempStyle = (DWORD)VAL_ZERO; posSptRec = m_ceList.GetFirstSelectedItemPosition(); iSptRecIndex = m_ceList.GetNextSelectedItem(posSptRec); if (VAL_MINUS_ONE != iSptRecIndex) { dwItemHandle = m_ceList.GetItemData(iSptRecIndex); dwImageState = m_ceList.GetItemState(iSptRecIndex, TVIS_STATEIMAGEMASK); } else { dwTempStyle = PZ_STYLE_SCON_CE; dwTempStyle <<= HANDLE_OFFSET; dwItemHandle |= dwTempStyle; } if (TAB_INDEX_CE == ((CTabCtrl*)GetParent())->GetCurSel()) { ::SendMessage(GetParentFrame()->m_hWnd, WM_SCHEDULE, (WPARAM)dwItemHandle, (LPARAM)dwImageState); } } void CNavSptCEDlg::OnColumnclickListExecce(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here g_iCurrListColIndex = pNMListView->iSubItem; g_iCurrListColOrder = !g_iCurrListColOrder; m_ceList.SortItems(ListStrCompare, (LPARAM)&m_ceList); *pResult = 0; } void CNavSptCEDlg::OnItemchangedListExecce(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here if (((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED) && ((pNMListView->uNewState & LVIS_SELECTED) == VAL_ZERO)) { Schedule(); } else if (((pNMListView->uOldState & LVIS_SELECTED) == VAL_ZERO) && ((pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)) { Schedule(); } *pResult = 0; } void CNavSptCEDlg::OnRclickListExecce(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here CMainFrame* pMainFrm = NULL; int iSptRecIndex = 0; UINT uFlags; CPoint listPoint; GetCursorPos(&listPoint); m_ceList.ScreenToClient(&listPoint); MapWindowPoints(&m_ceList, &listPoint, 1); iSptRecIndex = m_ceList.HitTest(listPoint, &uFlags); m_ceList.ClientToScreen(&listPoint); // Schedule(); pMainFrm = (CMainFrame*)AfxGetMainWnd(); ASSERT(NULL != pMainFrm); if (pMainFrm->MDIGetActive()->IsZoomed()) //当子窗口尺寸为max时,之前主框架中的菜单位置编号递增1 { if ((VAL_MINUS_ONE != iSptRecIndex) && (LVHT_ONITEM & uFlags)) { if (NULL != pMainFrm->GetMenu()->GetSubMenu(3)->GetSubMenu(2)) { pMainFrm->GetMenu()->GetSubMenu(3)->GetSubMenu(2)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, listPoint.x, listPoint.y, GetParentFrame()); } } else {//here? if (NULL != pMainFrm->GetMenu()->GetSubMenu(3)->GetSubMenu(2)) { GetCursorPos(&listPoint); pMainFrm->GetMenu()->GetSubMenu(3)->GetSubMenu(2)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, listPoint.x, listPoint.y, GetParentFrame()); } } } else //当子窗口尺寸为max时,之前主框架中的菜单位置编号递减1 { if ((VAL_MINUS_ONE != iSptRecIndex) && (LVHT_ONITEM & uFlags)) { if (NULL != pMainFrm->GetMenu()->GetSubMenu(2)->GetSubMenu(2)) { pMainFrm->GetMenu()->GetSubMenu(2)->GetSubMenu(2)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, listPoint.x, listPoint.y, GetParentFrame()); } } else { if (NULL != pMainFrm->GetMenu()->GetSubMenu(2)->GetSubMenu(2)) { GetCursorPos(&listPoint); pMainFrm->GetMenu()->GetSubMenu(2)->GetSubMenu(2)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, listPoint.x, listPoint.y, GetParentFrame()); } } } *pResult = 0; } void CNavSptCEDlg::OnShowWindow(BOOL bShow, UINT nStatus) { CDialog::OnShowWindow(bShow, nStatus); // TODO: Add your message handler code here if (TRUE == bShow) { Schedule(); } } BOOL CNavSptCEDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN) { return TRUE; } if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE) { return TRUE; } return CDialog::PreTranslateMessage(pMsg); }