You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
5.3 KiB
166 lines
5.3 KiB
// VelocityPage.cpp : Implementation of CVelocityPage
|
|
#include "stdafx.h"
|
|
#include "ToolProps.h"
|
|
#include "VelocityPage.h"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CVelocityPage
|
|
|
|
CVelocityPage::CVelocityPage()
|
|
{
|
|
m_dwTitleID = IDS_TITLEVelocityPage;
|
|
m_dwHelpFileID = IDS_HELPFILEVelocityPage;
|
|
m_dwDocStringID = IDS_DOCSTRINGVelocityPage;
|
|
m_pVelocity = NULL;
|
|
}
|
|
|
|
CVelocityPage::~CVelocityPage()
|
|
|
|
{
|
|
if (m_pVelocity)
|
|
{
|
|
m_pVelocity->Release();
|
|
}
|
|
}
|
|
|
|
STDMETHODIMP CVelocityPage::SetObjects(ULONG cObjects,IUnknown **ppUnk)
|
|
|
|
{
|
|
if (cObjects < 1 || cObjects > 1)
|
|
return E_UNEXPECTED;
|
|
return ppUnk[0]->QueryInterface(IID_IDirectMusicVelocityTool,(void **) &m_pVelocity);
|
|
}
|
|
|
|
|
|
STDMETHODIMP CVelocityPage::Apply(void)
|
|
|
|
{
|
|
m_pVelocity->SetStrength((long) m_ctStrength.GetValue());
|
|
m_pVelocity->SetLowLimit((long) m_ctLowLimit.GetValue());
|
|
m_pVelocity->SetHighLimit((long) m_ctHighLimit.GetValue());
|
|
m_pVelocity->SetCurveStart((long) m_ctCurveStart.GetValue());
|
|
m_pVelocity->SetCurveEnd((long) m_ctCurveEnd.GetValue());
|
|
m_bDirty = FALSE;
|
|
return S_OK;
|
|
}
|
|
|
|
LRESULT CVelocityPage::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
|
|
{
|
|
if (m_pVelocity)
|
|
{
|
|
m_ctStrength.Init(GetDlgItem(IDC_STRENGTH),GetDlgItem(IDC_STRENGTH_DISPLAY),0,100,true);
|
|
m_ctLowLimit.Init(GetDlgItem(IDC_LOWERLIMIT),GetDlgItem(IDC_LOWERLIMIT_DISPLAY),1,127,true);
|
|
m_ctHighLimit.Init(GetDlgItem(IDC_UPPERLIMIT),GetDlgItem(IDC_UPPERLIMIT_DISPLAY),1,127,true);
|
|
m_ctCurveStart.Init(GetDlgItem(IDC_CURVESTART),GetDlgItem(IDC_CURVESTART_DISPLAY),1,127,true);
|
|
m_ctCurveEnd.Init(GetDlgItem(IDC_CURVEEND),GetDlgItem(IDC_CURVEEND_DISPLAY),1,127,true);
|
|
|
|
long lValue;
|
|
m_pVelocity->GetStrength(&lValue);
|
|
m_ctStrength.SetValue((float)lValue);
|
|
m_pVelocity->GetLowLimit(&lValue);
|
|
m_ctLowLimit.SetValue((float)lValue);
|
|
m_pVelocity->GetHighLimit(&lValue);
|
|
m_ctHighLimit.SetValue((float)lValue);
|
|
m_pVelocity->GetCurveStart(&lValue);
|
|
m_ctCurveStart.SetValue((float)lValue);
|
|
m_pVelocity->GetCurveEnd(&lValue);
|
|
m_ctCurveEnd.SetValue((float)lValue);
|
|
|
|
HWND hWnd = GetDlgItem(IDC_DISPLAY_CURVE);
|
|
::GetWindowRect(hWnd,&m_rectDisplay);
|
|
::DestroyWindow(hWnd);
|
|
ScreenToClient(&m_rectDisplay);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
void CVelocityPage::DrawCurve(HDC hDCIn)
|
|
|
|
{
|
|
float fLowLimit = m_ctLowLimit.GetValue() * (m_rectDisplay.top - m_rectDisplay.bottom ) / 127;
|
|
float fHighLimit = m_ctHighLimit.GetValue() * (m_rectDisplay.top - m_rectDisplay.bottom) / 127;
|
|
float fCurveStart = m_ctCurveStart.GetValue() * (m_rectDisplay.right - m_rectDisplay.left) / 127;
|
|
float fCurveEnd = m_ctCurveEnd.GetValue() * (m_rectDisplay.right - m_rectDisplay.left ) / 127;
|
|
|
|
HDC hDC;
|
|
if (!hDCIn)
|
|
{
|
|
hDC = ::GetDC(m_hWnd);
|
|
}
|
|
else
|
|
{
|
|
hDC = hDCIn;
|
|
}
|
|
if (hDC)
|
|
{
|
|
m_rectDisplay.bottom++;
|
|
::FillRect(hDC, &m_rectDisplay, (HBRUSH) (COLOR_GRADIENTACTIVECAPTION));
|
|
m_rectDisplay.bottom--;
|
|
HPEN hPen = CreatePen(PS_SOLID,1,RGB(0,0,0));
|
|
if (hPen)
|
|
{
|
|
HPEN hOldPen = (HPEN) ::SelectObject(hDC,hPen);
|
|
::MoveToEx(hDC,m_rectDisplay.left,m_rectDisplay.bottom + (int) fLowLimit,NULL);
|
|
::LineTo(hDC,m_rectDisplay.left + (int) fCurveStart,m_rectDisplay.bottom + (int) fLowLimit);
|
|
::LineTo(hDC,m_rectDisplay.left + (int) fCurveEnd,m_rectDisplay.bottom + (int) fHighLimit);
|
|
::LineTo(hDC,m_rectDisplay.right,m_rectDisplay.bottom + (int) fHighLimit);
|
|
::DeleteObject(hPen);
|
|
}
|
|
if (!hDCIn)
|
|
{
|
|
::ReleaseDC(m_hWnd,hDC);
|
|
}
|
|
}
|
|
}
|
|
|
|
LRESULT CVelocityPage::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
|
|
{
|
|
PAINTSTRUCT Paint;
|
|
HDC hDC = ::BeginPaint(m_hWnd,&Paint);
|
|
if (hDC)
|
|
{
|
|
DrawCurve(hDC);
|
|
::EndPaint(m_hWnd,&Paint);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
LRESULT CVelocityPage::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
|
|
{
|
|
LRESULT lr = m_ctStrength.MessageHandler(uMsg, wParam,lParam, bHandled);
|
|
if (!bHandled)
|
|
lr = m_ctLowLimit.MessageHandler(uMsg, wParam, lParam, bHandled);
|
|
if (!bHandled)
|
|
lr = m_ctHighLimit.MessageHandler(uMsg, wParam, lParam, bHandled);
|
|
if (!bHandled)
|
|
lr = m_ctCurveStart.MessageHandler(uMsg, wParam, lParam, bHandled);
|
|
if (!bHandled)
|
|
lr = m_ctCurveEnd.MessageHandler(uMsg, wParam, lParam, bHandled);
|
|
if (bHandled)
|
|
SetDirty(true);
|
|
DrawCurve(NULL);
|
|
return lr;
|
|
}
|
|
|
|
|
|
LRESULT CVelocityPage::OnSlider(UINT uMsg, WPARAM wParam,LPARAM lParam, BOOL& bHandled)
|
|
|
|
{
|
|
LRESULT lr = m_ctStrength.MessageHandler(uMsg, wParam,lParam, bHandled);
|
|
if (!bHandled)
|
|
lr = m_ctLowLimit.MessageHandler(uMsg, wParam, lParam, bHandled);
|
|
if (!bHandled)
|
|
lr = m_ctHighLimit.MessageHandler(uMsg, wParam, lParam, bHandled);
|
|
if (!bHandled)
|
|
lr = m_ctCurveStart.MessageHandler(uMsg, wParam, lParam, bHandled);
|
|
if (!bHandled)
|
|
lr = m_ctCurveEnd.MessageHandler(uMsg, wParam, lParam, bHandled);
|
|
if (bHandled)
|
|
SetDirty(true);
|
|
DrawCurve(NULL);
|
|
return lr;
|
|
}
|
|
|