Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

252 lines
6.5 KiB
C++

// 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);
}