初步修复
This commit is contained in:
parent
8fc4357cc6
commit
e4714f3f0e
46705 changed files with 12004901 additions and 0 deletions
273
Third/XTToolkitPro/Source/SkinFramework/XTPSkinObjectMenu.cpp
Normal file
273
Third/XTToolkitPro/Source/SkinFramework/XTPSkinObjectMenu.cpp
Normal file
|
|
@ -0,0 +1,273 @@
|
|||
// XTPSkinObjectMDI.cpp: implementation of the CXTPSkinObjectMDI class.
|
||||
//
|
||||
// This file is a part of the XTREME SKINFRAMEWORK MFC class library.
|
||||
// (c)1998-2008 Codejock Software, All Rights Reserved.
|
||||
//
|
||||
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
||||
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
||||
// CONSENT OF CODEJOCK SOFTWARE.
|
||||
//
|
||||
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
||||
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
||||
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
||||
// SINGLE COMPUTER.
|
||||
//
|
||||
// CONTACT INFORMATION:
|
||||
// support@codejock.com
|
||||
// http://www.codejock.com
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "Common/XTPDrawHelpers.h"
|
||||
|
||||
#include "XTPSkinObjectMenu.h"
|
||||
#include "XTPSkinManager.h"
|
||||
#include "XTPSkinDrawTools.h"
|
||||
|
||||
#define MN_SELECTITEM 0x01E5
|
||||
#define MN_GETHMENU 0x01E1
|
||||
|
||||
POINT CXTPSkinObjectFrame::m_sMenuOffset = {0, 0};
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[]=__FILE__;
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
IMPLEMENT_DYNCREATE(CXTPSkinObjectMenu, CXTPSkinObjectFrame)
|
||||
|
||||
CXTPSkinObjectMenu::CXTPSkinObjectMenu()
|
||||
{
|
||||
}
|
||||
|
||||
CXTPSkinObjectMenu::~CXTPSkinObjectMenu()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CXTPSkinObjectMenu, CXTPSkinObjectFrame)
|
||||
//{{AFX_MSG_MAP(CXTPSkinObjectMenu)
|
||||
ON_WM_NCPAINT()
|
||||
ON_WM_PAINT()
|
||||
ON_WM_ERASEBKGND()
|
||||
ON_MESSAGE(WM_PRINT, OnPrint)
|
||||
ON_MESSAGE(WM_PRINTCLIENT, OnPrintClient)
|
||||
ON_MESSAGE(MN_SELECTITEM, OnSelectItem)
|
||||
|
||||
ON_MESSAGE(WM_KEYDOWN, OnKeyDown)
|
||||
ON_MESSAGE(WM_SYSKEYDOWN, OnKeyDown)
|
||||
ON_MESSAGE(WM_CHAR, OnChar)
|
||||
ON_WM_WINDOWPOSCHANGING()
|
||||
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CXTPSkinObjectMenu::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
|
||||
{
|
||||
lpwndpos->y += m_sMenuOffset.y;
|
||||
lpwndpos->x += m_sMenuOffset.x;
|
||||
|
||||
CXTPSkinObjectFrame::OnWindowPosChanging(lpwndpos);
|
||||
}
|
||||
|
||||
void CXTPSkinObjectMenu::OnPaint()
|
||||
{
|
||||
CXTPSkinObjectPaintDC dc(this); // device context for painting
|
||||
OnDraw(&dc);
|
||||
}
|
||||
|
||||
#define MIIM_BITMAP 0x00000080
|
||||
struct MENUITEMINFO98
|
||||
{
|
||||
UINT cbSize;
|
||||
UINT fMask;
|
||||
UINT fType; // used if MIIM_TYPE (4.0) or MIIM_FTYPE (>4.0)
|
||||
UINT fState; // used if MIIM_STATE
|
||||
UINT wID; // used if MIIM_ID
|
||||
HMENU hSubMenu; // used if MIIM_SUBMENU
|
||||
HBITMAP hbmpChecked; // used if MIIM_CHECKMARKS
|
||||
HBITMAP hbmpUnchecked; // used if MIIM_CHECKMARKS
|
||||
DWORD dwItemData; // used if MIIM_DATA
|
||||
LPWSTR dwTypeData; // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0)
|
||||
UINT cch; // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0)
|
||||
HBITMAP hbmpItem; // used if MIIM_BITMAP
|
||||
};
|
||||
|
||||
void CXTPSkinObjectMenu::OnDraw(CDC* pDC)
|
||||
{
|
||||
|
||||
/*NONCLIENTMETRICS nm;
|
||||
::ZeroMemory(&nm, sizeof(NONCLIENTMETRICS));
|
||||
nm.cbSize = sizeof(NONCLIENTMETRICS);
|
||||
VERIFY(::SystemParametersInfo(SPI_GETNONCLIENTMETRICS,
|
||||
sizeof(NONCLIENTMETRICS), &nm, 0));
|
||||
CFont fnt;
|
||||
fnt.CreateFontIndirect(&nm.lfMenuFont);
|
||||
|
||||
CXTPFontDC fntDc(pDC, &fnt);
|
||||
TEXTMETRIC tm;
|
||||
pDC->GetTextMetrics(&tm);
|
||||
|
||||
CXTPClientRect rc(this);
|
||||
|
||||
pDC->FillSolidRect(rc, GetColor(COLOR_MENU));
|
||||
|
||||
pDC->SetBkMode(TRANSPARENT);
|
||||
|
||||
HMENU hMenu = (HMENU)SendMessage(MN_GETHMENU);
|
||||
if (!hMenu)
|
||||
return;
|
||||
|
||||
|
||||
|
||||
int nCount = GetMenuItemCount(hMenu);
|
||||
int y = 0;
|
||||
int x = 0;
|
||||
|
||||
for (int i = 0; i < nCount; i++)
|
||||
{
|
||||
MENUITEMINFO98 info = { sizeof(MENUITEMINFO98), MIIM_TYPE | MIIM_STATE | MIIM_BITMAP};
|
||||
::GetMenuItemInfo(hMenu, i, TRUE, (MENUITEMINFO*)&info);
|
||||
|
||||
if ((info.fType & MFT_SEPARATOR) == MFT_SEPARATOR)
|
||||
{
|
||||
int nHeight = GetSystemMetrics(SM_CYMENUSIZE) / 2;
|
||||
|
||||
int yT = y + (nHeight / 2) - 1;
|
||||
RECT rcItem;
|
||||
|
||||
rcItem.left = x + 1;
|
||||
rcItem.top = yT;
|
||||
rcItem.right = rc.right - 1;
|
||||
rcItem.bottom = yT + GetSystemMetrics(SM_CYEDGE);
|
||||
|
||||
DrawEdge(pDC->GetSafeHdc(), &rcItem, BDR_SUNKENOUTER, BF_TOP | BF_BOTTOM);
|
||||
|
||||
y += nHeight;
|
||||
}
|
||||
else
|
||||
{
|
||||
int nHeight = 0;
|
||||
nHeight = max(nHeight, tm.tmHeight + tm.tmExternalLeading + GetSystemMetrics(SM_CYEDGE));
|
||||
|
||||
nHeight += 2;
|
||||
|
||||
|
||||
CRect rcItem(0, y, rc.right, y + nHeight);
|
||||
|
||||
if (info.fState & MFS_HILITE)
|
||||
{
|
||||
pDC->FillSolidRect(rcItem, GetColor(COLOR_HIGHLIGHT));
|
||||
}
|
||||
|
||||
y += nHeight;
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
CXTPClientRect rc(this);
|
||||
CXTPBufferDC dc(pDC->GetSafeHdc(), rc);
|
||||
|
||||
dc.FillSolidRect(rc, GetColor(COLOR_MENU));
|
||||
|
||||
dc.SetBkMode(TRANSPARENT);
|
||||
DefWindowProc(WM_PRINTCLIENT, (WPARAM)dc.GetSafeHdc(), 0);
|
||||
|
||||
//GetMenuBarInfo();
|
||||
}
|
||||
|
||||
void CXTPSkinObjectMenu::OnDrawNonCLient(CDC* pDC)
|
||||
{
|
||||
CRect rcBorders = m_rcBorders;
|
||||
CXTPWindowRect rc(this);
|
||||
rc.OffsetRect(-rc.TopLeft());
|
||||
|
||||
XTPSkinFrameworkDrawFrame(pDC->GetSafeHdc(), rc, 1, GetColor(COLOR_3DSHADOW));
|
||||
rc.DeflateRect(1, 1);
|
||||
XTPSkinFrameworkDrawFrame(pDC->GetSafeHdc(), rc, rcBorders.left - 1, GetColor(COLOR_MENU));
|
||||
}
|
||||
|
||||
BOOL CXTPSkinObjectMenu::OnEraseBkgnd(CDC* /*pDC*/)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void CXTPSkinObjectMenu::OnNcPaint()
|
||||
{
|
||||
CWindowDC dc(this);
|
||||
OnDrawNonCLient(&dc);
|
||||
}
|
||||
|
||||
LRESULT CXTPSkinObjectMenu::OnPrint(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
CDC* pDC = CDC::FromHandle((HDC)wParam);
|
||||
if (lParam & PRF_NONCLIENT)
|
||||
{
|
||||
OnDrawNonCLient(pDC);
|
||||
}
|
||||
if (lParam & PRF_CLIENT)
|
||||
{
|
||||
CPoint pt = pDC->SetWindowOrg(-m_rcBorders.left, -m_rcBorders.top);
|
||||
OnDraw(pDC);
|
||||
pDC->SetWindowOrg(pt);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
LRESULT CXTPSkinObjectMenu::OnPrintClient(WPARAM wParam, LPARAM /*lParam*/)
|
||||
{
|
||||
CDC* pDC = CDC::FromHandle((HDC)wParam);
|
||||
OnDraw(pDC);
|
||||
return 1;
|
||||
}
|
||||
|
||||
LRESULT CXTPSkinObjectMenu::OnSelectItem(WPARAM /*wParam*/, LPARAM /*lParam*/)
|
||||
{
|
||||
SetRedraw(FALSE);
|
||||
LRESULT lResult = Default();
|
||||
SetRedraw(TRUE);
|
||||
|
||||
Invalidate(FALSE);
|
||||
|
||||
return lResult;
|
||||
}
|
||||
|
||||
LRESULT CXTPSkinObjectMenu::OnKeyDown(WPARAM wParam, LPARAM /*lParam*/)
|
||||
{
|
||||
if (wParam == VK_UP || wParam == VK_DOWN)
|
||||
{
|
||||
SetRedraw(FALSE);
|
||||
LRESULT lResult = Default();
|
||||
|
||||
if (IsWindow(m_hWnd))
|
||||
{
|
||||
SetRedraw(TRUE);
|
||||
Invalidate(FALSE);
|
||||
}
|
||||
|
||||
return lResult;
|
||||
}
|
||||
else
|
||||
{
|
||||
return Default();
|
||||
}
|
||||
}
|
||||
|
||||
LRESULT CXTPSkinObjectMenu::OnChar(WPARAM /*wParam*/, LPARAM /*lParam*/)
|
||||
{
|
||||
LRESULT lResult = Default();
|
||||
|
||||
if (IsWindow(m_hWnd))
|
||||
{
|
||||
Invalidate(FALSE);
|
||||
}
|
||||
|
||||
return lResult;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue