Leaked source code of windows server 2003
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

// 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;
}