#include "StdAfx.h" #include "KTMenuPage.h" #include "KTMenuCtrl.h" BEGIN_MESSAGE_MAP(KTMenuPage, CAdUiPalette) ON_WM_WINDOWPOSCHANGED() ON_WM_TIMER() ON_WM_DESTROY() ON_WM_CONTEXTMENU() //#if ARX > 15 ON_WM_MOUSEWHEEL() //#endif ON_WM_CREATE() END_MESSAGE_MAP() IMPLEMENT_DYNAMIC(KTMenuPage, CAdUiPalette) KTMenuPage::KTMenuPage(void) { m_pMenCtrl = NULL; } KTMenuPage::~KTMenuPage(void) { if (m_pMenCtrl != NULL) { delete m_pMenCtrl; m_pMenCtrl = NULL; } } BOOL KTMenuPage::CreateMenuBar(LPCTSTR pszMenuFile,LPCTSTR pszTitle,int nIndex) { if (m_pMenCtrl != NULL) return m_pMenCtrl->LoadMenu(pszMenuFile,pszTitle,nIndex); return FALSE; } void KTMenuPage::GetFloatingMinSize (long *pnMinWidth, long *pnMinHeight) { *pnMinWidth=74; *pnMinHeight=200; } BOOL KTMenuPage::OnMouseWheel(UINT nFlags,short zDelta,CPoint pt) { if(m_pMenCtrl!=NULL) { m_pMenCtrl->OnMouseWheel(nFlags,zDelta,pt); return TRUE; } return TRUE; } void KTMenuPage::OnTimer(UINT_PTR nIDEvent) { CAdUiPalette::OnTimer(nIDEvent); } LONG KTMenuPage::onAcadKeepFocus( UINT, LONG ) { return TRUE; } void KTMenuPage::OnSetActive () { } void KTMenuPage::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) { CAdUiPalette::OnWindowPosChanged(lpwndpos); if(m_pMenCtrl != NULL) { CRect rect; GetClientRect(&rect); rect.bottom-=2; m_pMenCtrl->MoveWindow(rect); } } void KTMenuPage::OnContextMenu(CWnd* , CPoint point) { if (m_pMenCtrl == NULL) return; CPoint pt(point); m_pMenCtrl->ScreenToClient(&pt); int iIndex = m_pMenCtrl->HitTest(&pt); if (iIndex >= 0) { CRect rc; m_pMenCtrl->GetItemRect(iIndex, rc); m_pMenCtrl->ClientToScreen(&rc); UINT nFlag; switch (GetParent()->GetParent()->GetDlgCtrlID()) { case AFX_IDW_DOCKBAR_TOP: pt.x = rc.left; pt.y = rc.bottom; nFlag = TPM_LEFTALIGN|TPM_TOPALIGN|TPM_RIGHTBUTTON; break; case AFX_IDW_DOCKBAR_BOTTOM: pt.x = rc.left; pt.y = rc.top; nFlag = TPM_LEFTALIGN|TPM_BOTTOMALIGN|TPM_RIGHTBUTTON; break; case AFX_IDW_DOCKBAR_RIGHT: pt.x = rc.left; pt.y = rc.top; nFlag = TPM_RIGHTALIGN|TPM_TOPALIGN|TPM_RIGHTBUTTON; break; case AFX_IDW_DOCKBAR_LEFT: default: pt.x = rc.left + KTICON_SIZE_X * 6; if (pt.x < point.x) pt.x = point.x; else if (pt.x > rc.right) pt.x = rc.right; pt.y = rc.top; nFlag = TPM_LEFTALIGN|TPM_TOPALIGN|TPM_RIGHTBUTTON; break; } m_pMenCtrl->TrackPopupMenu(nFlag, &pt, iIndex); } } void KTMenuPage::OnDestroy() { m_pMenCtrl->DestroyWindow(); CAdUiPalette::OnDestroy(); } BOOL KTMenuPage::PreTranslateMessage(MSG* pMsg) { return CAdUiPalette::PreTranslateMessage(pMsg); } int KTMenuPage::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CAdUiPalette::OnCreate(lpCreateStruct) == -1) return -1; if (m_pMenCtrl == NULL) m_pMenCtrl = new KTMenuCtrl; if (!m_pMenCtrl->Create(this, WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), 0)) return -1; return 0; }