windows-nt/Source/XPSP1/NT/multimedia/media/test/sbtest/pos.c
2020-09-26 16:20:57 +08:00

109 lines
2.5 KiB
C

/****************************************************************************
*
* pos.c
*
* Copyright (c) 1991 Microsoft Corporation. All Rights Reserved.
*
***************************************************************************/
#include <windows.h>
#include <mmsystem.h>
#include "sbtest.h"
/****************************************************************************
*
* public data
*
***************************************************************************/
HWND hPosWnd; // position window
/****************************************************************************
*
* internal function prototypes
*
***************************************************************************/
static void Paint(HWND hWnd, HDC hDC);
void CreatePosition(HWND hParent)
{
UINT x, y, dx, dy;
x = GetSystemMetrics(SM_CXSCREEN) / 8;
dx = GetSystemMetrics(SM_CXSCREEN) / 4;
y = GetSystemMetrics(SM_CYSCREEN) / 3;
dy = GetSystemMetrics(SM_CYCAPTION) * 5 / 2;
hPosWnd = CreateWindow("POSITION",
"Wave Position",
WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_THICKFRAME,
x, y, dx, dy,
hParent,
NULL,
ghInst,
(LPSTR)NULL);
}
static void Paint(HWND hWnd, HDC hDC)
{
MMTIME mt;
char buf[20];
if (hWaveOut) {
mt.wType = TIME_SAMPLES;
waveOutGetPosition(hWaveOut, &mt, sizeof(mt));
wsprintf(buf, "%lu ", mt.u.sample);
}
else
wsprintf(buf, "Not Playing");
TextOut(hDC, 0, 0, buf, lstrlen(buf));
}
long FAR PASCAL PosWndProc(HWND hWnd, unsigned message, UINT wParam, LONG lParam)
{
PAINTSTRUCT ps; // paint structure
HMENU hMenu;
// process any messages we want
switch (message) {
case WM_CREATE:
hMenu = GetMenu(hMainWnd);
CheckMenuItem(hMenu, IDM_KEYBOARD, MF_CHECKED);
break;
case WM_PAINT:
BeginPaint(hWnd, &ps);
Paint(hWnd, ps.hdc);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
hMenu = GetMenu(hMainWnd);
CheckMenuItem(hMenu, IDM_KEYBOARD, MF_UNCHECKED);
hPosWnd = NULL;
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
}
return NULL;
}
void ShowPos(void)
{
HDC hDC;
if (!hPosWnd)
return;
hDC = GetDC(hPosWnd);
Paint(hPosWnd, hDC);
ReleaseDC(hPosWnd, hDC);
}