205 lines
4.4 KiB
C++
205 lines
4.4 KiB
C++
// OXStaticMenuItem.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "OXStaticMenuItem.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COXStaticMenuItem
|
|
|
|
COXStaticMenuItem::COXStaticMenuItem()
|
|
{
|
|
m_bPressedDown=FALSE;
|
|
m_clrActive=RGB(192,0,0);
|
|
m_clrNormalText=GetTextColor();
|
|
}
|
|
|
|
COXStaticMenuItem::~COXStaticMenuItem()
|
|
{
|
|
if(::IsWindow(GetSafeHwnd()))
|
|
DestroyWindow();
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(COXStaticMenuItem, COXStaticText)
|
|
//{{AFX_MSG_MAP(COXStaticMenuItem)
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_WM_LBUTTONUP()
|
|
ON_WM_CREATE()
|
|
//}}AFX_MSG_MAP
|
|
ON_MESSAGE(HWM_MOUSEENTER, OnMouseEnter)
|
|
ON_MESSAGE(HWM_MOUSELEAVE, OnMouseLeave)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COXStaticMenuItem message handlers
|
|
|
|
static BOOL bIsCreating=FALSE;
|
|
|
|
int COXStaticMenuItem::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
bIsCreating=TRUE;
|
|
|
|
if(COXStaticText::OnCreate(lpCreateStruct)==-1)
|
|
return -1;
|
|
|
|
m_MouseSpy.HookWindow(this);
|
|
// call this function in oder to get HWM_MOUSEENTER and HWM_MOUSELEAVE messages
|
|
m_MouseSpy.InstallSpy();
|
|
|
|
return 0;
|
|
}
|
|
|
|
void COXStaticMenuItem::PreSubclassWindow()
|
|
{
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
|
|
if(!bIsCreating)
|
|
{
|
|
m_MouseSpy.HookWindow(this);
|
|
// call this function in oder to get HWM_MOUSEENTER and
|
|
// HWM_MOUSELEAVE messages
|
|
m_MouseSpy.InstallSpy();
|
|
}
|
|
|
|
COXStaticText::PreSubclassWindow();
|
|
}
|
|
|
|
LONG COXStaticMenuItem::OnMouseEnter(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
UNREFERENCED_PARAMETER(wParam);
|
|
UNREFERENCED_PARAMETER(lParam);
|
|
|
|
CWnd* pParentWnd=GetParent();
|
|
ASSERT(pParentWnd);
|
|
CRect rect;
|
|
GetWindowRect(rect);
|
|
rect.InflateRect(1,1,0,0);
|
|
pParentWnd->ScreenToClient(rect);
|
|
MoveWindow(rect);
|
|
|
|
m_clrNormalText=GetTextColor();
|
|
SetTextColor(m_clrActive,TRUE);
|
|
|
|
NotifyParent(SMIN_ACTIVATED);
|
|
|
|
return (LONG)0;
|
|
}
|
|
|
|
LONG COXStaticMenuItem::OnMouseLeave(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
UNREFERENCED_PARAMETER(wParam);
|
|
UNREFERENCED_PARAMETER(lParam);
|
|
|
|
CWnd* pParentWnd=GetParent();
|
|
ASSERT(pParentWnd);
|
|
CRect rect;
|
|
GetWindowRect(rect);
|
|
if(m_bPressedDown)
|
|
{
|
|
rect.OffsetRect(-2,-2);
|
|
m_bPressedDown=FALSE;
|
|
}
|
|
rect.DeflateRect(1,1,0,0);
|
|
pParentWnd->ScreenToClient(rect);
|
|
MoveWindow(rect);
|
|
|
|
SetTextColor(m_clrNormalText,TRUE);
|
|
|
|
NotifyParent(SMIN_DEACTIVATED);
|
|
|
|
return (LONG)0;
|
|
}
|
|
|
|
void COXStaticMenuItem::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
CWnd* pParentWnd=GetParent();
|
|
ASSERT(pParentWnd);
|
|
CRect rect;
|
|
GetWindowRect(rect);
|
|
rect.OffsetRect(2,2);
|
|
pParentWnd->ScreenToClient(rect);
|
|
MoveWindow(rect);
|
|
|
|
m_bPressedDown=TRUE;
|
|
|
|
COXStaticText::OnLButtonDown(nFlags, point);
|
|
}
|
|
|
|
void COXStaticMenuItem::OnLButtonUp(UINT nFlags, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
if(m_bPressedDown)
|
|
{
|
|
CWnd* pParentWnd=GetParent();
|
|
ASSERT(pParentWnd);
|
|
CRect rect;
|
|
GetWindowRect(rect);
|
|
rect.OffsetRect(-2,-2);
|
|
pParentWnd->ScreenToClient(rect);
|
|
MoveWindow(rect);
|
|
|
|
m_bPressedDown=FALSE;
|
|
|
|
NotifyParent(SMIN_CLICKED);
|
|
}
|
|
|
|
COXStaticText::OnLButtonUp(nFlags, point);
|
|
}
|
|
|
|
void COXStaticMenuItem::SetProperties(COLORREF clrText/*=::GetSysColor(COLOR_BTNTEXT)*/,
|
|
COLORREF clrBack/*=::GetSysColor(COLOR_BTNFACE)*/,
|
|
COLORREF clrActive/*=RGB(192,0,0)*/,
|
|
int nFontHeight/*=12*/,
|
|
int nFontWeight/*=FW_NORMAL*/,
|
|
CString sFontName/*=_T("MS Sans Serif")*/,
|
|
BOOL bEmboss/*=TRUE*/,
|
|
int nHorzAlignment/*=OX_ALIGNHORZ_LEFT*/,
|
|
int nVertAlignment/*=OX_ALIGNVERT_CENTER*/)
|
|
{
|
|
SetTextColor(clrText);
|
|
SetBkColor(clrBack);
|
|
m_clrActive=clrActive;
|
|
LOGFONT lf;
|
|
if(GetLogFont(&lf))
|
|
{
|
|
lf.lfHeight=nFontHeight;
|
|
lf.lfWeight=nFontWeight;
|
|
SetLogFont(&lf);
|
|
}
|
|
SetFontName(sFontName);
|
|
|
|
SetEmboss(bEmboss);
|
|
SetHorzAlignment(nHorzAlignment);
|
|
SetVertAlignment(nVertAlignment);
|
|
SetCharSet(ANSI_CHARSET,TRUE);
|
|
}
|
|
|
|
|
|
void COXStaticMenuItem::NotifyParent(int nEventID)
|
|
{
|
|
ASSERT(IsWindow(GetSafeHwnd()));
|
|
ASSERT(nEventID==SMIN_ACTIVATED || nEventID==SMIN_DEACTIVATED ||
|
|
nEventID==SMIN_CLICKED);
|
|
|
|
CWnd* pParentWnd=GetParent();
|
|
ASSERT(pParentWnd!=NULL);
|
|
|
|
NMHDR nmhdr;
|
|
nmhdr.code=nEventID;
|
|
nmhdr.hwndFrom=GetSafeHwnd();
|
|
nmhdr.idFrom=GetDlgCtrlID();
|
|
pParentWnd->SendMessage(WM_NOTIFY,nmhdr.idFrom,(LPARAM)&nmhdr);
|
|
}
|
|
|
|
|