Strecken eines Bilds und fensters
Im folgenden Beispiel werden die Bilder eines Videoclips dehnt und das Seitenverhältnis der angezeigten Frames geändert. Die im MCIWnd-Fenster angezeigten Frames sind doppelt so hoch und dreimal so breit wie der ursprüngliche Frame. Die Makros MCIWndGetDest und MCIWndPutDest rufen die Zielrechteckkoordinaten ab und definieren sie neu. Die Funktionen GetWindowRect und SetWindowPos verwalten Änderungen an den MCIWnd-Fensterdimensionen.
// extern RECT rCurrent, rDest;
case WM_COMMAND:
switch (wParam)
{
case IDM_CREATEMCIWND:
g_hwndMCIWnd = MCIWndCreate(hwnd,
g_hinst,
WS_CHILD | WS_VISIBLE,
"sample.avi");
break;
case IDM_RESIZEWINDOW: // destination RECT and playback area
GetWindowRect(g_hwndMCIWnd, &rWin); // window size
MCIWndGetDest(g_hwndMCIWnd, &rCurrent); // destination RECT
rDest.top = rCurrent.top; // new boundaries
rDest.right = rCurrent.right;
rDest.left = rCurrent.left +
((rCurrent.left - rCurrent.right) * 3);
rDest.bottom = rCurrent.top +
((rCurrent.bottom - rCurrent.top) * 2);
MCIWndPutDest(g_hwndMCIWnd, &rDest); // new RECT
SetWindowPos(g_hwndMCIWnd, // window to resize
NULL, // z-order: don't care
0, 0, // position: don't care
rDest.right - rDest.left, // width
(rWin.bottom - rWin.top + // height (window -
(rCurrent.bottom - rCurrent.top) + // original RECT +
(rDest.bottom - rDest.top)), // new RECT
SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
break;
}
break;
// Handle other messages here.