📄 newmenu.h
字号:
m_menubarItemIndex = UINT(-1);
}
}
else
{
// Draw the hotlight item again.
if(CNewMenu::m_dwLastActiveItem==NULL &&
DrawMenubarItem(this,pNewMenu,nItemIndex,nHotlightStatus))
{
// Set a new Timer
if(m_TimerID==NULL)
{
m_TimerID=GetSafeTimerID(m_hWnd,100);
}
m_menubarItemIndex = nItemIndex;
}
}
return nHitCode;
}
}
}
if (m_menubarItemIndex!=UINT(-1))
{
DrawMenubarItem(this,pNewMenu,m_menubarItemIndex,nStatus);
m_menubarItemIndex=UINT(-1);
}
if(m_TimerID!=NULL)
{
KillTimer(m_TimerID);
m_TimerID=NULL;
}
}
return nHitCode;
}
afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMIS)
{
if(!CNewMenu::OnMeasureItem(GetCurrentMessage()))
{
baseClass::OnMeasureItem(nIDCtl, lpMIS);
}
}
afx_msg LRESULT OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu)
{
LRESULT lresult;
if( DYNAMIC_DOWNCAST(CNewMenu,pMenu) )
lresult=CNewMenu::FindKeyboardShortcut(nChar, nFlags, pMenu);
else
lresult=baseClass::OnMenuChar(nChar, nFlags, pMenu);
return lresult;
}
#ifdef USE_NEW_DOCK_BAR
afx_msg void OnNcPaint()
{
baseClass::OnNcPaint();
DrawSmallBorder();
}
afx_msg void OnPaint()
{
baseClass::OnPaint();
DrawSmallBorder();
}
#if _MFC_VER < 0x0700
afx_msg void OnActivateApp(BOOL bActive, HTASK hTask)
{
baseClass::OnActivateApp(bActive, hTask);
DrawSmallBorder();
}
#else
afx_msg void OnActivateApp(BOOL bActive, DWORD dwThreadID)
{
baseClass::OnActivateApp(bActive, dwThreadID);
DrawSmallBorder();
}
#endif
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized )
{
baseClass::OnActivate(nState,pWndOther, bMinimized );
DrawSmallBorder();
}
void DrawSmallBorder()
{
// To eliminate small border between menu and client rect
MENUINFO menuInfo = {0};
menuInfo.cbSize = sizeof(menuInfo);
menuInfo.fMask = MIM_BACKGROUND;
if(::GetMenuInfo(::GetMenu(m_hWnd),&menuInfo) && menuInfo.hbrBack)
{
CDC* pDC = GetWindowDC();
CRect clientRect;
GetClientRect(clientRect);
ClientToScreen(clientRect);
CRect windowRect;
GetWindowRect(windowRect);
CRect rect(clientRect.left-windowRect.left,clientRect.top-windowRect.top-1,clientRect.right-windowRect.left,clientRect.top-windowRect.top);
CBrush *pBrush = CBrush::FromHandle(menuInfo.hbrBack);
// need for win95/98/me
VERIFY(pBrush->UnrealizeObject());
CPoint oldOrg = pDC->SetBrushOrg(0,0);
pDC->FillRect(rect,pBrush);
pDC->SetBrushOrg(oldOrg);
// must be called
ReleaseDC(pDC);
}
}
#endif
};
#ifdef _AFXDLL
#if _MFC_VER < 0x0700
template<class baseClass>
const AFX_MSGMAP CNewFrame<baseClass>::messageMap = { &CNewFrame<baseClass>::_GetBaseMessageMap, GetMessageEntries()};
#else
template<class baseClass>
const AFX_MSGMAP CNewFrame<baseClass>::messageMap = { &baseClass::GetThisMessageMap, GetMessageEntries()};
#endif
#else
template<class baseClass>
const AFX_MSGMAP CNewFrame<baseClass>::messageMap = { &baseClass::messageMap, GetMessageEntries()};
#endif
/////////////////////////////////////////////////////////////////////////////
// CNewMiniDockFrameWnd for docking toolbars with new menu
class CNewMiniDockFrameWnd: public CNewFrame<CMiniDockFrameWnd>
{
DECLARE_DYNCREATE(CNewMiniDockFrameWnd)
};
// control bar docking
template<class baseClass>
void CNewFrame<baseClass>::EnableDocking(DWORD dwDockStyle)
{
baseClass::EnableDocking(dwDockStyle);
// Owerite registering for floating frame
m_pFloatingFrameClass = RUNTIME_CLASS(CNewMiniDockFrameWnd);
}
/////////////////////////////////////////////////////////////////////////////
// CNewDialog for dialog implementation
class CNewDialog : public CNewFrame<CDialog>
{
DECLARE_DYNAMIC(CNewDialog);
public:
CNewDialog();
CNewDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
CNewDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL);
// Overridables (special message map entries)
virtual BOOL OnInitDialog();
protected:
// Generated message map functions
//{{AFX_MSG(CNewDialog)
afx_msg void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// CNewMiniFrameWnd for menu to documents
class CNewMiniFrameWnd : public CNewFrame<CMiniFrameWnd>
{
DECLARE_DYNCREATE(CNewMiniFrameWnd)
};
/////////////////////////////////////////////////////////////////////////////
// CNewMDIChildWnd for menu to documents
class CNewMDIChildWnd : public CNewFrame<CMDIChildWnd>
{
DECLARE_DYNCREATE(CNewMDIChildWnd)
};
/////////////////////////////////////////////////////////////////////////////
// CNewFrameWnd for menu to documents
class CNewFrameWnd : public CNewFrame<CFrameWnd>
{
DECLARE_DYNCREATE(CNewFrameWnd)
public:
#if _MFC_VER < 0x0700
// dynamic creation - load frame and associated resources
virtual BOOL LoadFrame(UINT nIDResource,
DWORD dwDefaultStyle = WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,
CWnd* pParentWnd = NULL,
CCreateContext* pContext = NULL);
#endif
// under MFC 7.0 the next function is virtual so we don't neet to owerwrite
// loadframe
BOOL Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle = WS_OVERLAPPEDWINDOW,
const RECT& rect = rectDefault,
CWnd* pParentWnd = NULL, // != NULL for popups
LPCTSTR lpszMenuName = NULL,
DWORD dwExStyle = 0,
CCreateContext* pContext = NULL);
#ifdef USE_NEW_DOCK_BAR
// control bar docking
void EnableDocking(DWORD dwDockStyle);
#endif
};
/////////////////////////////////////////////////////////////////////////////
// CNewMDIFrameWnd for menu to documents
class CNewMDIFrameWnd : public CNewFrame<CMDIFrameWnd>
{
DECLARE_DYNCREATE(CNewMDIFrameWnd);
HMENU m_hShowMenu;
public:
CNewMDIFrameWnd():m_hShowMenu(NULL){};
BOOL ShowMenu(BOOL bShow);
#if _MFC_VER < 0x0700
// dynamic creation - load frame and associated resources
virtual BOOL LoadFrame(UINT nIDResource,
DWORD dwDefaultStyle = WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,
CWnd* pParentWnd = NULL,
CCreateContext* pContext = NULL);
#endif
// under MFC 7.0 the next function is virtual so we don't neet to owerwrite
// loadframe
BOOL Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle = WS_OVERLAPPEDWINDOW,
const RECT& rect = rectDefault,
CWnd* pParentWnd = NULL, // != NULL for popups
LPCTSTR lpszMenuName = NULL,
DWORD dwExStyle = 0,
CCreateContext* pContext = NULL);
#ifdef USE_NEW_DOCK_BAR
// control bar docking
void EnableDocking(DWORD dwDockStyle);
#endif
};
/////////////////////////////////////////////////////////////////////////////
// CNewMultiDocTemplate for menu to documents
class CNewMultiDocTemplate: public CMultiDocTemplate
{
DECLARE_DYNAMIC(CNewMultiDocTemplate)
public:
CNewMenu m_NewMenuShared;
// Constructors
public:
CNewMultiDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass);
~CNewMultiDocTemplate();
};
/////////////////////////////////////////////////////////////////////////////
// CNewMemDC helperclass for drawing off screen
class CNewMemDC: public CDC
{
CRect m_rect;
CBitmap* m_pOldBitmap;
CBitmap m_memBitmap;
BOOL m_bCancel;
HDC m_hDcOriginal;
public:
CNewMemDC(LPCRECT pRect, HDC hdc):m_rect(pRect),m_bCancel(FALSE),m_hDcOriginal(hdc)
{
CDC *pOrgDC = CDC::FromHandle(m_hDcOriginal);
CreateCompatibleDC(pOrgDC);
m_memBitmap.CreateCompatibleBitmap (pOrgDC,m_rect.Width (),m_rect.Height());
m_pOldBitmap = SelectObject (&m_memBitmap);
SetWindowOrg(m_rect.left, m_rect.top);
}
// Abborting to copy image from memory dc to client
void DoCancel(){m_bCancel=TRUE;}
~CNewMemDC()
{
if(!m_bCancel)
{
CDC *pOrgDC = CDC::FromHandle(m_hDcOriginal);
pOrgDC->BitBlt (m_rect.left,m_rect.top,m_rect.Width (),m_rect.Height (),this,m_rect.left,m_rect.top,SRCCOPY);
}
SelectObject (m_pOldBitmap);
}
};
/////////////////////////////////////////////////////////////////////////////
// CNewMenuHelper for enabling / disabling menu border, replacing system menu.
#define NEW_MENU_DIALOG_SUBCLASS 1
#define NEW_MENU_DIALOG_SYSTEM_MENU 2
#define NEW_MENU_DEFAULT_BORDER 4
#define NEW_MENU_CHANGE_MENU_STYLE 8
class CNewMenuHelper
{
private:
DWORD m_dwOldFlags;
int m_OldMenuDrawStyle;
public:
CNewMenuHelper(DWORD dwFlags);
CNewMenuHelper(CNewMenu::EDrawStyle setTempStyle);
~CNewMenuHelper();
};
/////////////////////////////////////////////////////////////////////////////
// CNewDockBar support for office2003 colors.
class CNewDockBar : public CDockBar
{
DECLARE_DYNCREATE(CNewDockBar)
public:
CNewDockBar(BOOL bFloating = FALSE); // TRUE if attached to CMiniDockFrameWnd
virtual ~CNewDockBar();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
DECLARE_MESSAGE_MAP()
public:
void EraseNonClient();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnNcPaint();
};
#pragma warning(pop)
#endif // __CNewMenu_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -