/*****************************************************
** Module : CWinampWnd **
** Purpose : Winamp-style window **
** **
** Copyright James Spibey, 2000 (spib@bigfoot.com) **
** Feel free to use and distribute. May not be sold **
** for profit. **
*****************************************************/
#include "stdafx.h"
#include "WinampWnd.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CWinampWnd
CWinampWnd::CWinampWnd()
{
//{{AFX_DATA_INIT(CWinampWnd)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_bFocus = FALSE;
m_bDragging = FALSE;
m_bResizing = FALSE;
m_bShadeMode = FALSE;
m_bDocked = TRUE;
m_bAllowDock = FALSE;
m_bAllowResize = FALSE;
m_nHeightBeforeShadeMode = -1;
m_nSnapOffset = 10;
m_nDockedSide = DOCKED_BOTTOM_LL;
}
CWinampWnd::~CWinampWnd()
{
}
BEGIN_MESSAGE_MAP(CWinampWnd, CWnd)
//{{AFX_MSG_MAP(CWinampWnd)
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_KILLFOCUS()
ON_WM_SETFOCUS()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_SIZE()
ON_WM_ERASEBKGND()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWinampWnd message handlers
BOOL CWinampWnd::Create(CWnd* pParent)
{
CMenu menu;
BOOL bShowWnd = TRUE;
CString classname = AfxRegisterWndClass(CS_DBLCLKS);
return CreateEx(WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_ACCEPTFILES,
classname, "Winamp Window",
(bShowWnd ? NULL : WS_VISIBLE) | WS_CLIPSIBLINGS | WS_POPUP,
0,0,275,116, pParent->GetSafeHwnd(), menu);
}
int CWinampWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
LoadSkin();
CRect rect;
GetParent()->GetWindowRect(&rect);
SetWindowPos(NULL, rect.left, rect.bottom, rect.Width(), rect.Height(), SWP_SHOWWINDOW);
ReadPrefs();
return 0;
}
void CWinampWnd::OnPaint()
{
DrawInterface();
}
void CWinampWnd::DrawInterface(BOOL bPaint)
{
CRect rc, rcClient, rcWnd;
GetClientRect(&rcClient);
GetWindowRect(&rcWnd);
rc = rcClient;
CDC* pDC = GetDC();
CBrush pBrush(RGB(0,0,0));
pDC->FillRect(rcClient, &pBrush);
int bottom = rc.bottom;
int top = rc.top;
int left = rc.left;
int right = rc.right;
int height = bottom - top;
int width = right - left;
if(m_bShadeMode)
{
int FillsNeeded = rcWnd.Width() - (m_map.OffSet(SHADE_LEFT_CORNER).Width() + m_map.OffSet(SHADE_RIGHT_CORNER_ACTIVE).Width());
FillsNeeded = FillsNeeded / m_map.OffSet(SHADE_MIDDLE).Width();
m_Interface.Draw(FALSE, this, 0, 0, m_map.OffSet(SHADE_LEFT_CORNER));
for(int i = 0; i <= FillsNeeded; i++)
m_Interface.Draw(FALSE, this, m_map.OffSet(SHADE_LEFT_CORNER).Width() + (m_map.OffSet(SHADE_MIDDLE).Width() * i) , 0, m_map.OffSet(SHADE_MIDDLE));
if(m_bFocus)
m_Interface.Draw(FALSE, this, (rcWnd.Width() - m_map.OffSet(SHADE_RIGHT_CORNER_ACTIVE).Width()), 0, m_map.OffSet(SHADE_RIGHT_CORNER_ACTIVE));
else
m_Interface.Draw(FALSE, this, (rcWnd.Width() - m_map.OffSet(SHADE_RIGHT_CORNER_INACTIVE).Width()), 0, m_map.OffSet(SHADE_RIGHT_CORNER_INACTIVE));
}
else
{
int FillsNeeded = rcWnd.Width() - (m_map.OffSet(TITLEBAR_LEFT_CORNER).Width() + m_map.OffSet(TITLEBAR_RIGHT_CORNER).Width());
FillsNeeded = FillsNeeded / m_map.OffSet(TITLEBAR_FILL).Width();
if(m_bFocus)
{
m_Interface.Draw(FALSE, this, 0, 0, m_map.OffSet(TITLEBAR_LEFT_CORNER));
for(int i = 0; i <= FillsNeeded; i++)
m_Interface.Draw(FALSE, this, m_map.OffSet(TITLEBAR_LEFT_CORNER).Width() + (m_map.OffSet(TITLEBAR_FILL).Width() * i) , 0, m_map.OffSet(TITLEBAR_FILL));
m_Interface.Draw(FALSE, this, (rcWnd.Width() / 2) - (m_map.OffSet(TITLEBAR_MIDDLE).Width() / 2), 0, m_map.OffSet(TITLEBAR_MIDDLE));
m_Interface.Draw(FALSE, this, (rcWnd.Width() - m_map.OffSet(TITLEBAR_RIGHT_CORNER).Width()), 0, m_map.OffSet(TITLEBAR_RIGHT_CORNER));
}
else
{
m_Interface.Draw(FALSE, this, 0, 0, m_map.OffSet(INACTIVE_TITLEBAR_LEFT_CORNER));
for(int i = 0; i <= FillsNeeded; i++)
m_Interface.Draw(FALSE, this, m_map.OffSet(TITLEBAR_LEFT_CORNER).Width() + (m_map.OffSet(TITLEBAR_FILL).Width() * i) , 0, m_map.OffSet(INACTIVE_TITLEBAR_FILL));
m_Interface.Draw(FALSE, this, (rcWnd.Width() / 2) - (m_map.OffSet(TITLEBAR_MIDDLE).Width() / 2), 0, m_map.OffSet(INACTIVE_TITLEBAR_MIDDLE));
m_Interface.Draw(FALSE, this, (rcWnd.Width() - m_map.OffSet(TITLEBAR_RIGHT_CORNER).Width()), 0, m_map.OffSet(INACTIVE_TITLEBAR_RIGHT_CORNER));
}
FillsNeeded = (height - (m_map.OffSet(TITLEBAR_LEFT_CORNER).Height() + m_map.OffSet(BOTTOM_LEFT).Height())) / m_map.OffSet(LEFT_EDGE).Height();
int y = 0;
for(int i = 0; i <= FillsNeeded; i++)
{
y = m_map.OffSet(TITLEBAR_LEFT_CORNER).Height() + (m_map.OffSet(LEFT_EDGE).Height() * i);
m_Interface.Draw(bPaint, this, 0, y, m_map.OffSet(LEFT_EDGE));
m_Interface.Draw(bPaint, this, width - m_map.OffSet(RIGHT_EDGE).Width(), y, m_map.OffSet(RIGHT_EDGE));
}
m_Interface.Draw(bPaint, this, 0, height - m_map.OffSet(BOTTOM_LEFT).Height(), m_map.OffSet(BOTTOM_LEFT));
FillsNeeded = (rcWnd.Width() - (m_map.OffSet(BOTTOM_LEFT).Width() + m_map.OffSet(BOTTOM_RIGHT).Width())) / m_map.OffSet(BOTTOM_FILL).Width();
for(i = 0; i <= FillsNeeded; i++)
m_Interface.Draw(FALSE, this, m_map.OffSet(BOTTOM_LEFT).Width() + (m_map.OffSet(BOTTOM_FILL).Width() * i) , height - m_map.OffSet(BOTTOM_RIGHT).Height(), m_map.OffSet(BOTTOM_FILL));
m_Interface.Draw(bPaint, this, width - m_map.OffSet(BOTTOM_RIGHT).Width(), height - m_map.OffSet(BOTTOM_RIGHT).Height(), m_map.OffSet(BOTTOM_RIGHT));
}
ReleaseDC(pDC);
}
void CWinampWnd::OnKillFocus(CWnd* pNewWnd)
{
CWnd::OnKillFocus(pNewWnd);
m_bFocus = FALSE;
DrawInterface();
}
void CWinampWnd::OnSetFocus(CWnd* pOldWnd)
{
CWnd::OnSetFocus(pOldWnd);
m_bFocus = TRUE;
DrawInterface();
}
void CWinampWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect rcClient;
GetClientRect(&rcClient);
CRect rcResize;
CRect rcDrag;
CRect rcClose;
CRect rcMinMax;
rcResize = rcClient;
if(m_bShadeMode)
{
rcResize.right = rcResize.right - 21;
rcResize.left = rcResize.right - 7;
rcResize.top = rcResize.top + 3;
rcResize.bottom = rcResize.top + 7;
}
else
{
rcResize.left = rcResize.right - 20;
rcResize.top = rcResize.bottom - 20;
}
rcDrag = rcClient;
rcDrag.bottom = rcDrag.top + 20;
rcClose = rcClient;
rcClose.right = rcClose.right - 3;
rcClose.left = rcClose.right - 7;
rcClose.top = rcClose.top + 3;
rcClose.bottom = rcClose.top + 7;
rcMinMax = rcClient;
rcMinMax.right = rcMinMax.right - 13;
rcMinMax.left = rcMinMax.right - 7;
rcMinMax.top = rcMinMax.top + 3;
rcMinMax.bottom = rcMinMax.top + 7;
if(rcMinMax.PtInRect(point))
m_Interface.Draw(FALSE, this, rcMinMax.left, rcMinMax.top, m_map.OffSet((m_bShadeMode ? MINIMIZE_BUTTON : MAXIMIZE_BUTTON)));
else if(rcClose.PtInRect(point))
m_Interface.Draw(FALSE, this, rcClose.left, rcClose.top, m_map.OffSet(CLOSE_BUTTON));
else if(rcResize.PtInRect(point))
{
SetCapture();
m_bResizing = TRUE;
m_ptResizeFrom = point;
}
else if(rcDrag.PtInRect(point))
{
SetCapture();
m_bDragging = TRUE;
m_ptDragFrom = point;
}
CWnd::OnLButtonDown(nFlags, point);
}
void CWinampWnd::OnLButtonUp(UINT nFlags, CPoint point)
{
CRect rcClient;
GetClientRect(&rcClient);
CRect rcWnd;
GetWindowRect(&rcWnd);
CRect rcClose;
CRect rcMinMax;
rcClose = rcClient;
rcClose.right = rcClose.right - 3;
rcClose.left = r
WinampWnd_demo_DEMO_winamp_winamp 插件_插件
版权申诉
146 浏览量
2022-09-19
12:30:52
上传
评论
收藏 43KB ZIP 举报
![avatar](https://profile-avatar.csdnimg.cn/d600a32f29294db1a3be82ec9708491a_weixin_42651887.jpg!1)
weixin_42651887
- 粉丝: 81
- 资源: 1万+
最新资源
- 基于 python 操作大数据的各种组件
- cifar-10-python和cifar-100-python
- 基于 C#实现神经网络算法和遗传算法作为AI的中国象棋程序
- Windows server 2016.2019 .NET Frameword 3.5安装包
- chilkat 9.5.0.98 系列软件 global unlock code
- 基于 python神经网络实现人类颜值评分
- 使用android实现计算器功能
- 305建筑结构水电欧式6套(14.5x20.2)\施工图1-11卫生间大样031026.dwg
- 305建筑结构水电欧式6套(14.5x20.2)\施工图1-09楼梯大样031026.dwg
- 基于PCL、C++编写的格网边缘点检测程序与代码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
评论0