📄 mciwnd.c
字号:
case MCIWNDM_GETDEVICEW:
{
MCI_SYSINFO_PARMSW mci_sysinfo;
mci_sysinfo.lpstrReturn = (LPWSTR)lParam;
mci_sysinfo.dwRetSize = wParam;
mwi->lasterror = mciSendCommandW(mwi->mci, MCI_SYSINFO,
MCI_SYSINFO_INSTALLNAME,
(DWORD_PTR)&mci_sysinfo);
TRACE("MCIWNDM_GETDEVICEW: %s\n", debugstr_wn((LPWSTR)lParam, wParam));
return 0;
}
case MCIWNDM_VALIDATEMEDIA:
TRACE("MCIWNDM_VALIDATEMEDIA\n");
if (mwi->mci)
{
SendMessageW(hWnd, MCIWNDM_GETSTART, 0, 0);
SendMessageW(hWnd, MCIWNDM_GETLENGTH, 0, 0);
}
return 0;
case MCIWNDM_GETFILENAMEA:
TRACE("MCIWNDM_GETFILENAMEA: %s\n", debugstr_w(mwi->lpName));
if (mwi->lpName)
WideCharToMultiByte(CP_ACP, 0, mwi->lpName, -1, (LPSTR)lParam, wParam, NULL, NULL);
return 0;
case MCIWNDM_GETFILENAMEW:
TRACE("MCIWNDM_GETFILENAMEW: %s\n", debugstr_w(mwi->lpName));
if (mwi->lpName)
strncpyW((LPWSTR)lParam, mwi->lpName, wParam);
return 0;
case MCIWNDM_GETTIMEFORMATA:
case MCIWNDM_GETTIMEFORMATW:
{
MCI_STATUS_PARMS mci_status;
TRACE("MCIWNDM_GETTIMEFORMAT %08x %08lx\n", wParam, lParam);
/* get format string if requested */
if (wParam && lParam)
{
if (wMsg == MCIWNDM_GETTIMEFORMATA)
{
char cmd[64];
wsprintfA(cmd, "status %d time format", mwi->alias);
mwi->lasterror = mciSendStringA(cmd, (LPSTR)lParam, wParam, 0);
if (mwi->lasterror)
return 0;
}
else
{
WCHAR cmdW[64];
static const WCHAR formatW[] = {'s','t','a','t','u','s',' ','%','d',' ','t','i','m','e',' ','f','o','r','m','a','t',0};
wsprintfW(cmdW, formatW, mwi->alias);
mwi->lasterror = mciSendStringW(cmdW, (LPWSTR)lParam, wParam, 0);
if (mwi->lasterror)
return 0;
}
}
mci_status.dwItem = MCI_STATUS_TIME_FORMAT ;
mwi->lasterror = mciSendCommandW(mwi->mci, MCI_STATUS,
MCI_STATUS_ITEM,
(DWORD_PTR)&mci_status);
if (mwi->lasterror)
return 0;
return mci_status.dwReturn;
}
case MCIWNDM_SETTIMEFORMATA:
{
UNICODE_STRING stringW;
TRACE("MCIWNDM_SETTIMEFORMATA %s\n", debugstr_a((LPSTR)lParam));
RtlCreateUnicodeStringFromAsciiz(&stringW, (LPCSTR)lParam);
lParam = (LPARAM)stringW.Buffer;
}
/* fall through */
case MCIWNDM_SETTIMEFORMATW:
{
static const WCHAR formatW[] = {'s','e','t',' ','%','d',' ','t','i','m','e',' ','f','o','r','m','a','t',' ',0};
WCHAR *cmdW;
TRACE("MCIWNDM_SETTIMEFORMATW %s\n", debugstr_w((LPWSTR)lParam));
if (mwi->mci)
{
cmdW = HeapAlloc(GetProcessHeap(), 0, (lstrlenW((LPCWSTR)lParam) + 64) * sizeof(WCHAR));
wsprintfW(cmdW, formatW, mwi->alias);
strcatW(cmdW, (WCHAR *)lParam);
mwi->lasterror = mciSendStringW(cmdW, NULL, 0, 0);
/* fix the range tracking according to the new time format */
if (!mwi->lasterror)
SendDlgItemMessageW(hWnd, CTL_TRACKBAR, TBM_SETRANGEMAX, 1,
SendMessageW(hWnd, MCIWNDM_GETLENGTH, 0, 0));
}
if (wMsg == MCIWNDM_SETTIMEFORMATA)
HeapFree(GetProcessHeap(), 0, (void *)lParam);
return 0;
}
case MCIWNDM_CAN_PLAY:
TRACE("MCIWNDM_CAN_PLAY\n");
if (mwi->mci)
return mci_get_devcaps(mwi, MCI_GETDEVCAPS_CAN_PLAY);
return 0;
case MCIWNDM_CAN_RECORD:
TRACE("MCIWNDM_CAN_RECORD\n");
if (mwi->mci)
return mci_get_devcaps(mwi, MCI_GETDEVCAPS_CAN_RECORD);
return 0;
case MCIWNDM_CAN_SAVE:
TRACE("MCIWNDM_CAN_SAVE\n");
if (mwi->mci)
return mci_get_devcaps(mwi, MCI_GETDEVCAPS_CAN_SAVE);
return 0;
case MCIWNDM_CAN_EJECT:
TRACE("MCIWNDM_CAN_EJECT\n");
if (mwi->mci)
return mci_get_devcaps(mwi, MCI_GETDEVCAPS_CAN_EJECT);
return 0;
case MCIWNDM_CAN_WINDOW:
TRACE("MCIWNDM_CAN_WINDOW\n");
switch (mwi->dev_type)
{
case MCI_DEVTYPE_ANIMATION:
case MCI_DEVTYPE_DIGITAL_VIDEO:
case MCI_DEVTYPE_OVERLAY:
return 1;
}
return 0;
case MCIWNDM_CAN_CONFIG:
TRACE("MCIWNDM_CAN_CONFIG\n");
if (mwi->hdrv)
return SendDriverMessage(mwi->hdrv, DRV_QUERYCONFIGURE, 0, 0);
return 0;
case MCIWNDM_SETZOOM:
TRACE("MCIWNDM_SETZOOM %ld\n", lParam);
mwi->zoom = lParam;
if (mwi->mci && !(mwi->dwStyle & MCIWNDF_NOAUTOSIZEWINDOW))
{
RECT rc;
rc.left = rc.top = 0;
rc.right = MulDiv(mwi->size.cx, mwi->zoom, 100);
rc.bottom = MulDiv(mwi->size.cy, mwi->zoom, 100);
if (!(mwi->dwStyle & MCIWNDF_NOPLAYBAR))
rc.bottom += 32; /* add the height of the playbar */
AdjustWindowRect(&rc, GetWindowLongW(hWnd, GWL_STYLE), FALSE);
SetWindowPos(hWnd, 0, 0, 0, rc.right - rc.left, rc.bottom - rc.top,
SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
}
return 0;
case MCIWNDM_GETZOOM:
TRACE("MCIWNDM_GETZOOM: %d\n", mwi->zoom);
return mwi->zoom;
case MCIWNDM_EJECT:
{
MCI_SET_PARMS mci_set;
TRACE("MCIWNDM_EJECT\n");
mci_set.dwCallback = (DWORD_PTR)hWnd;
mwi->lasterror = mciSendCommandW(mwi->mci, MCI_SET,
MCI_SET_DOOR_OPEN | MCI_NOTIFY,
(DWORD_PTR)&mci_set);
MCIWND_notify_mode(mwi);
MCIWND_UpdateState(mwi);
return mwi->lasterror;
}
case MCIWNDM_SETVOLUME:
case MCIWNDM_GETVOLUME:
case MCIWNDM_SETSPEED:
case MCIWNDM_GETSPEED:
case MCIWNDM_SETREPEAT:
case MCIWNDM_GETREPEAT:
case MCIWNDM_REALIZE:
case MCIWNDM_GETPALETTE:
case MCIWNDM_SETPALETTE:
case MCIWNDM_NEWA:
case MCIWNDM_NEWW:
case MCIWNDM_PALETTEKICK:
case MCIWNDM_OPENINTERFACE:
FIXME("support for MCIWNDM_ message WM_USER+%d not implemented\n", wMsg - WM_USER);
return 0;
case MCI_PLAY:
{
LRESULT end = SendMessageW(hWnd, MCIWNDM_GETEND, 0, 0);
return SendMessageW(hWnd, MCIWNDM_PLAYTO, 0, end);
}
case MCI_SEEK:
{
MCI_SEEK_PARMS mci_seek;
switch (lParam)
{
case MCIWND_START:
lParam = SendMessageW(hWnd, MCIWNDM_GETSTART, 0, 0);
break;
case MCIWND_END:
lParam = SendMessageW(hWnd, MCIWNDM_GETEND, 0, 0);
break;
}
mci_seek.dwTo = lParam;
mwi->lasterror = mciSendCommandW(mwi->mci, MCI_SEEK,
MCI_TO, (DWORD_PTR)&mci_seek);
if (mwi->lasterror)
{
MCIWND_notify_error(mwi);
return mwi->lasterror;
}
/* update window to reflect the state */
InvalidateRect(hWnd, NULL, TRUE);
return 0;
}
case MCI_CLOSE:
{
RECT rc;
MCI_GENERIC_PARMS mci_generic;
if (mwi->hdrv)
{
CloseDriver(mwi->hdrv, 0, 0);
mwi->hdrv = 0;
}
if (mwi->mci)
{
mci_generic.dwCallback = 0;
mwi->lasterror = mciSendCommandW(mwi->mci, MCI_CLOSE,
0, (DWORD_PTR)&mci_generic);
mwi->mci = 0;
}
mwi->mode = MCI_MODE_NOT_READY;
mwi->position = -1;
if (mwi->lpName)
{
HeapFree(GetProcessHeap(), 0, mwi->lpName);
mwi->lpName = NULL;
}
MCIWND_UpdateState(mwi);
GetClientRect(hWnd, &rc);
rc.bottom = rc.top;
if (!(mwi->dwStyle & MCIWNDF_NOPLAYBAR))
rc.bottom += 32; /* add the height of the playbar */
AdjustWindowRect(&rc, GetWindowLongW(hWnd, GWL_STYLE), FALSE);
SetWindowPos(hWnd, 0, 0, 0, rc.right - rc.left,
rc.bottom - rc.top, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
MCIWND_notify_media(mwi);
return 0;
}
case MCI_PAUSE:
case MCI_STEP:
case MCI_STOP:
case MCI_RESUME:
mci_generic_command(mwi, wMsg);
if (wMsg == MCI_STEP && !mwi->lasterror)
{
/* update window to reflect the state */
InvalidateRect(hWnd, NULL, TRUE);
}
return mwi->lasterror;
case MCI_CONFIGURE:
if (mwi->hdrv)
SendDriverMessage(mwi->hdrv, DRV_CONFIGURE, (LPARAM)hWnd, 0);
return 0;
case MCI_BREAK:
case MCI_CAPTURE:
case MCI_COPY:
case MCI_CUE:
case MCI_CUT:
case MCI_DELETE:
case MCI_ESCAPE:
case MCI_FREEZE:
case MCI_GETDEVCAPS:
/*case MCI_INDEX:*/
case MCI_INFO:
case MCI_LIST:
case MCI_LOAD:
/*case MCI_MARK:*/
case MCI_MONITOR:
case MCI_OPEN:
case MCI_PASTE:
case MCI_PUT:
case MCI_QUALITY:
case MCI_REALIZE:
case MCI_RECORD:
case MCI_RESERVE:
case MCI_RESTORE:
case MCI_SAVE:
case MCI_SET:
case MCI_SETAUDIO:
/*case MCI_SETTIMECODE:*/
/*case MCI_SETTUNER:*/
case MCI_SETVIDEO:
case MCI_SIGNAL:
case MCI_SPIN:
case MCI_STATUS:
case MCI_SYSINFO:
case MCI_UNDO:
case MCI_UNFREEZE:
case MCI_UPDATE:
case MCI_WHERE:
case MCI_WINDOW:
FIXME("support for MCI_ command %04x not implemented\n", wMsg);
return 0;
}
if (wMsg >= WM_USER)
{
FIXME("support for MCIWNDM_ message WM_USER+%d not implemented\n", wMsg - WM_USER);
return 0;
}
if (GetWindowLongW(hWnd, GWL_EXSTYLE) & WS_EX_MDICHILD)
return DefMDIChildProcW(hWnd, wMsg, wParam, lParam);
return DefWindowProcW(hWnd, wMsg, wParam, lParam);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -