2025-11-28 00:35:46 +09:00

241 lines
6.6 KiB
C++

// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft Corporation. All rights reserved
#include "stdafx.h"
#include "tedmaintoolbar.h"
#include "resource.h"
#include <assert.h>
const int CTedMainToolbar::PLAY_BUTTON = 0;
const int CTedMainToolbar::STOP_BUTTON = 1;
const int CTedMainToolbar::PAUSE_BUTTON = 2;
#define NANO_TO_SECS(x) x / 10000000LL;
CTedMainToolbar::CTedMainToolbar()
: m_hStaticFont(NULL)
{
}
CTedMainToolbar::~CTedMainToolbar()
{
if(m_hStaticFont)
{
DeleteObject(m_hStaticFont);
}
}
HRESULT CTedMainToolbar::Init(HWND parentWnd, _U_MENUorID id)
{
HRESULT hr = S_OK;
if(Create(parentWnd, NULL, LoadAtlString(IDS_TOOLBAR), WS_CHILD | WS_VISIBLE, 0, id, NULL) == NULL)
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
return hr;
}
CTrackbarControl* CTedMainToolbar::GetSeekBar()
{
return &m_trackBar;
}
CTrackbarControl* CTedMainToolbar::GetRateBar()
{
return &m_rateBar;
}
void CTedMainToolbar::ShowRateBar(int nCmdShow)
{
m_rateLabel.ShowWindow(nCmdShow);
m_rateBar.ShowWindow(nCmdShow);
}
void CTedMainToolbar::EnableButton(int nID, BOOL fEnable)
{
assert(nID < m_iButtonCount);
if(nID >= m_iButtonCount) return;
SendMessage(TB_ENABLEBUTTON, m_buttons[nID].idCommand, MAKELONG(fEnable, 0));
}
void CTedMainToolbar::EnableButtonByCommand(UINT nID, BOOL fEnable)
{
SendMessage(TB_ENABLEBUTTON, nID, MAKELONG(fEnable, 0));
}
void CTedMainToolbar::SetTrackbarScrollCallback(HANDLESCROLLPROC scrollCallback)
{
m_trackBar.SetScrollCallback(scrollCallback);
}
void CTedMainToolbar::SetTrackbarRange(int minValue, int maxValue)
{
m_trackBar.SetRange(minValue, maxValue);
}
void CTedMainToolbar::SetTimeLabel(const CAtlStringW& strLabel)
{
m_timeLabel.SetWindowText(strLabel);
}
void CTedMainToolbar::UpdateTimeDisplay(MFTIME time, MFTIME duration)
{
DWORD dwMax = m_trackBar.GetMaxRange();
LONG lPos = 0;
if ( duration > 0 )
{
lPos = LONG( (LONGLONG) dwMax * time / duration );
}
if(!m_trackBar.IsTracking()) m_trackBar.SetPos(lPos);
DWORD dwTotalSecs = (DWORD) NANO_TO_SECS(duration);
DWORD dwTotalMins = dwTotalSecs / m_iSecondsInMinute;
dwTotalSecs = dwTotalSecs % m_iSecondsInMinute;
DWORD dwCurrSecs = (DWORD) NANO_TO_SECS(time);
DWORD dwCurrMins = dwCurrSecs / m_iSecondsInMinute;
dwCurrSecs = dwCurrSecs % m_iSecondsInMinute;
CAtlString strTime;
strTime.Format(L"%d:%02d/%d:%02d", dwCurrMins, dwCurrSecs, dwTotalMins, dwTotalSecs);
m_timeLabel.SetWindowText(strTime);
}
void CTedMainToolbar::UpdateRateDisplay(float flRate)
{
CAtlString strRateText = LoadAtlString(IDS_RATE);
CAtlString strRate;
strRate.Format(L"%s (%2.2f)", strRateText, flRate);
m_rateLabel.SetWindowText(strRate);
}
void CTedMainToolbar::MarkResolved(bool fResolved)
{
CAtlString str = LoadAtlString( fResolved ? IDS_TOPO_STATUS_RESOLVED : IDS_TOPO_STATUS_NOT_RESOLVED );
m_resolvedLabel.SetWindowText(str);
}
LRESULT CTedMainToolbar::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
SendMessage(TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), 0);
TBADDBITMAP tbAddBitmap;
tbAddBitmap.hInst = _AtlBaseModule.GetModuleInstance();
tbAddBitmap.nID = UINT_PTR(IDB_MAINTOOL);
SendMessage(TB_ADDBITMAP, m_iButtonCount, (LPARAM)&tbAddBitmap);
ZeroMemory(m_buttons, sizeof(m_buttons));
m_buttons[0].iBitmap = 0;
m_buttons[0].fsState = 0;
m_buttons[0].fsStyle = TBSTYLE_BUTTON;
m_buttons[0].idCommand = ID_PLAY_PLAY;
m_buttons[1].iBitmap = 1;
m_buttons[1].fsState = 0;
m_buttons[1].fsStyle = TBSTYLE_BUTTON;
m_buttons[1].idCommand = ID_PLAY_STOP;
m_buttons[2].iBitmap = 2;
m_buttons[2].fsState = 0;
m_buttons[2].fsStyle = TBSTYLE_BUTTON;
m_buttons[2].idCommand = ID_PLAY_PAUSE;
SendMessage(TB_ADDBUTTONS, m_iButtonCount, (LPARAM)&m_buttons);
RECT rect;
GetClientRect(&rect);
rect.left += m_iToolbarButtonWidth;
rect.right = rect.left + m_iTrackbarWidth;
m_trackBar.Init(m_hWnd, rect, true, true);
rect.left = rect.right + m_iMarginSize;
rect.right = rect.left + m_iTimeLabelWidth;
rect.top += m_iMarginSize;
CAtlString strFontSize = LoadAtlString(IDS_FONT_SIZE_14);
CAtlString strFontFace = LoadAtlString(IDS_FONT_FACE_ARIAL);
LOGFONT lfLabelFont;
lfLabelFont.lfHeight = _wtol(strFontSize);
lfLabelFont.lfWidth = 0;
lfLabelFont.lfEscapement = 0;
lfLabelFont.lfOrientation = 0;
lfLabelFont.lfWeight = FW_DONTCARE;
lfLabelFont.lfItalic = FALSE;
lfLabelFont.lfUnderline = FALSE;
lfLabelFont.lfStrikeOut = FALSE;
lfLabelFont.lfCharSet = DEFAULT_CHARSET;
lfLabelFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
lfLabelFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lfLabelFont.lfQuality = DEFAULT_QUALITY;
lfLabelFont.lfPitchAndFamily = FF_DONTCARE | DEFAULT_PITCH;
wcscpy_s(lfLabelFont.lfFaceName, 32, strFontFace);
m_hStaticFont = CreateFontIndirect(&lfLabelFont);
m_timeLabel.Create(m_hWnd, &rect, L"0:00/0:00", WS_CHILD | WS_VISIBLE);
m_timeLabel.SetFont(m_hStaticFont);
rect.left = rect.right + m_iMarginSize;
rect.right = rect.left + m_iRateLabelWidth;
m_rateLabel.Create(m_hWnd, &rect, LoadAtlString(IDS_RATE_1_0), WS_CHILD | WS_VISIBLE);
m_rateLabel.SetFont(m_hStaticFont);
rect.left = rect.right += m_iMarginSize;
rect.right = rect.left + m_iRateBarWidth;
m_rateBar.Init(m_hWnd, rect, true, true);
rect.left = rect.right += m_iMarginSize;
rect.right = rect.left + m_iResolvedLabelWidth;
m_resolvedLabel.Create(m_hWnd, &rect, LoadAtlString(IDS_TOPO_STATUS_NOT_RESOLVED), WS_CHILD | WS_VISIBLE);
m_resolvedLabel.SetFont(m_hStaticFont);
return 0;
}
LRESULT CTedMainToolbar::OnVScroll(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
HWND hFocused = ::GetFocus();
if(hFocused == m_trackBar.m_hWnd)
{
m_trackBar.HandleScroll(LOWORD(wParam), HIWORD(wParam));
}
else
{
m_rateBar.HandleScroll(LOWORD(wParam), HIWORD(wParam));
}
return 0;
}
LRESULT CTedMainToolbar::OnHScroll(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
HWND hFocused = ::GetFocus();
if(hFocused == m_trackBar.m_hWnd)
{
m_trackBar.HandleScroll(LOWORD(wParam), HIWORD(wParam));
}
else
{
m_rateBar.HandleScroll(LOWORD(wParam), HIWORD(wParam));
}
return 0;
}