Files
FC1/Editor/Controls/AnimationToolBar.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

180 lines
4.4 KiB
C++

// AnimationToolBar.cpp : implementation file
//
#include "stdafx.h"
#include "AnimationToolBar.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAnimationToolBar
CAnimationToolBar::CAnimationToolBar()
{
}
CAnimationToolBar::~CAnimationToolBar()
{
}
BEGIN_MESSAGE_MAP(CAnimationToolBar, CToolBar)
//{{AFX_MSG_MAP(CAnimationToolBar)
ON_WM_SIZE()
ON_WM_CTLCOLOR()
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAnimationToolBar message handlers
void CAnimationToolBar::OnSize(UINT nType, int cx, int cy)
{
////////////////////////////////////////////////////////////////////////
// Resize the keyframe slider
////////////////////////////////////////////////////////////////////////
unsigned int iIndex;
RECT rcCtrl, rcToolbar;
CToolBar::OnSize(nType, cx, cy);
if (!GetToolBarCtrl().GetButtonCount())
return;
// Get the index of the keyframe slider position in the toolbar
iIndex = 0;
while (GetItemID(iIndex) != IDR_KEYFRAMES)
iIndex++;
if (GetItemID(iIndex) != IDR_KEYFRAMES)
return;
// Get size and position of toolbar and slider control
GetItemRect(iIndex, &rcCtrl);
GetClientRect(&rcToolbar);
// Get new slider width
rcCtrl.right = rcToolbar.right;
// Set in if the slider is created
if (m_cKeyframes.m_hWnd)
{
m_cKeyframes.SetWindowPos(NULL, 0, 0, (rcToolbar.right - rcCtrl.left) / 2,
18, SWP_NOMOVE | SWP_NOOWNERZORDER);
}
// Get the index of the animation sequence combo box position in the toolbar
iIndex = 0;
while (GetItemID(iIndex) != IDR_ANIM_SEQUENCES)
iIndex++;
if (GetItemID(iIndex) != IDR_ANIM_SEQUENCES)
return;
// Get size and position of toolbar and combo box control
GetItemRect(iIndex, &rcCtrl);
GetClientRect(&rcToolbar);
// Get new combo box width
rcCtrl.right = rcToolbar.right;
// Set in if the combo box is created
if (m_cAnimSequences.m_hWnd)
{
m_cAnimSequences.SetWindowPos(NULL, 0, 0, (rcToolbar.right - rcCtrl.left) / 2,
18, SWP_NOMOVE | SWP_NOOWNERZORDER);
// Place the combox box right of the keyframe slider
GetItemRect(iIndex, &rcCtrl);
rcCtrl.top += 3;
rcCtrl.bottom += 200;
rcCtrl.left = (rcToolbar.right) / 2 + 65;
rcCtrl.right = (rcToolbar.right) / 2 - 75;
::SetWindowPos(m_cAnimSequences.m_hWnd, NULL, rcCtrl.left, rcCtrl.top,
rcCtrl.right, rcCtrl.bottom, SWP_NOZORDER);
}
}
HBRUSH CAnimationToolBar::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CToolBar::OnCtlColor(pDC, pWnd, nCtlColor);
CFont cComboBoxFont;
if (nCtlColor == CTLCOLOR_EDIT)
{
VERIFY(cComboBoxFont.CreatePointFont(60, "Terminal"));
pDC->SelectObject(&cComboBoxFont);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
int CAnimationToolBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CToolBar::OnCreate(lpCreateStruct) == -1)
return -1;
if (!LoadToolBar(IDR_ANIMATION))
return -1;
// Create controls in the animation bar
CRect rect;
GetClientRect( &rect );
// Get the index of the keyframe slider position in the toolbar
int iIndex = 0;
while (GetItemID(iIndex) != IDR_KEYFRAMES)
iIndex++;
// Convert that button to a seperator and get its position
SetButtonInfo(iIndex, IDR_KEYFRAMES, TBBS_SEPARATOR, 0);
GetItemRect(iIndex, &rect);
// Expand the rectangle
rect.top += 2;
rect.bottom -= 2;
// TODO: Remove WS_DISABLED when animation is implemented
m_cKeyframes.Create(WS_CHILD|WS_VISIBLE|TBS_HORZ|TBS_BOTTOM|TBS_AUTOTICKS,rect,this,NULL);
// Get the index of the animation sequence combo box position in the toolbar
iIndex = 0;
while (GetItemID(iIndex) != IDR_ANIM_SEQUENCES)
iIndex++;
// Convert that button to a seperator and get its position
//SetButtonInfo(iIndex, IDR_ANIM_SEQUENCES, TBBS_SEPARATOR, 252);
SetButtonInfo(iIndex, IDR_ANIM_SEQUENCES, TBBS_SEPARATOR, 0);
GetItemRect(iIndex, &rect);
// Expand the rectangle
rect.top += 2;
rect.bottom += 75;
// TODO: Remove WS_DISABLED when animation is implemented
m_cAnimSequences.Create(WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST,rect,this,NULL);
m_cKeyframes.SetRange(0, 50);
return 0;
}
CString CAnimationToolBar::GetAnimName()
{
int sel = m_cAnimSequences.GetCurSel();
if (sel == CB_ERR)
{
return "";
}
CString str;
m_cAnimSequences.GetLBText( sel,str );
return str;
}