|
|
/******************************************************************************
Copyright (C) Microsoft Corporation 1985-1995. All rights reserved.
Title: config.c - Multimedia Systems Media Control Interface driver for AVI - configuration dialog.
*****************************************************************************/ #include "graphic.h"
#ifndef ARRAYSIZE
#define ARRAYSIZE(x) (sizeof((x))/sizeof((x)[0]))
#endif
/*
#ifndef _WIN32
#define SZCODE char _based(_segname("_CODE"))
#else
#define SZCODE const TCHAR
#endif
*/
SZCODE szDEFAULTVIDEO[] = TEXT ("DefaultVideo"); SZCODE szSEEKEXACT[] = TEXT ("AccurateSeek"); SZCODE szZOOMBY2[] = TEXT ("ZoomBy2"); //SZCODE szSTUPIDMODE[] = TEXT ("DontBufferOffscreen");
SZCODE szSKIPFRAMES[] = TEXT ("SkipFrames"); SZCODE szUSEAVIFILE[] = TEXT ("UseAVIFile"); SZCODE szNOSOUND[] = TEXT("NoSound");
const TCHAR szIni[] = TEXT ("MCIAVI");
SZCODE gszMCIAVIOpt[] = TEXT ("Software\\Microsoft\\Multimedia\\Video For Windows\\MCIAVI"); SZCODE gszDefVideoOpt[] = TEXT ("DefaultOptions");
#ifdef _WIN32
/* Registry values are stored as REG_DWORD */ int sz1 = 1; int sz0 = 0; #else
SZCODE sz1[] = TEXT("1"); SZCODE sz0[] = TEXT("0"); #endif
SZCODE szIntl[] = TEXT ("Intl"); SZCODE szDecimal[] = TEXT ("sDecimal"); SZCODE szThousand[] = TEXT ("sThousand");
SZCODE szDrawDib[] = TEXT("DrawDib"); SZCODE szDVA[] = TEXT("DVA");
typedef BOOL (WINAPI *SHOWMMCPLPROPSHEETW)( HWND hwndParent, LPCWSTR szPropSheetID, LPWSTR szTabName, LPWSTR szCaption);
/* Make sure we only have one configure box up at a time.... */ HWND ghwndConfig = NULL;
// Converts a Wide byte character string to a single byte character string
BOOL FAR PASCAL UnicodeToAnsi ( char * pszDest, TCHAR * pszSrc, UINT cchMaxLen) {
if ((pszDest == NULL) || (pszSrc == NULL) || (cchMaxLen == 0)) return FALSE;
WideCharToMultiByte (CP_ACP, 0, pszSrc, -1, pszDest, cchMaxLen, NULL, NULL); return TRUE; }
DWORD ReadOptionsFromReg(void) { HKEY hkVideoOpt; DWORD dwType; DWORD dwOpt; DWORD cbSize;
if (RegCreateKey(HKEY_CURRENT_USER, (LPTSTR)gszMCIAVIOpt, &hkVideoOpt)) return 0;
cbSize = sizeof(DWORD); if (RegQueryValueEx(hkVideoOpt,(LPTSTR)gszDefVideoOpt, NULL, &dwType, (LPBYTE)&dwOpt, &cbSize)) { dwOpt = 0; RegSetValueEx(hkVideoOpt, (LPTSTR)gszDefVideoOpt, 0, REG_DWORD,(LPBYTE)&dwOpt, sizeof(DWORD)); }
RegCloseKey(hkVideoOpt);
return dwOpt; }
DWORD FAR PASCAL ReadConfigInfo(void) { DWORD dwOptions = 0L;
dwOptions = ReadOptionsFromReg();
//
// ask the display device if it can do 256 color.
//
#ifndef _WIN32
int i;
/*
** Bugbug - not apparently used, so why do it ?!? ** HDC hdc; hdc = GetDC(NULL); i = GetDeviceCaps(hdc, BITSPIXEL) * GetDeviceCaps(hdc, PLANES); ReleaseDC(NULL, hdc); ** ** */
i = mmGetProfileInt(szIni, szDEFAULTVIDEO, (i < 8 && (GetWinFlags() & WF_CPU286)) ? 240 : 0);
if (i >= 200) dwOptions |= MCIAVIO_USEVGABYDEFAULT; #endif
////if (mmGetProfileInt(szIni, szSEEKEXACT, 1))
// Note: We always want this option.
dwOptions |= MCIAVIO_SEEKEXACT;
// if (mmGetProfileInt(szIni, szZOOMBY2, 0))
// dwOptions |= MCIAVIO_ZOOMBY2;
////if (mmGetProfileInt(szIni, szFAILIFNOWAVE, 0))
//// dwOptions |= MCIAVIO_FAILIFNOWAVE;
// if (mmGetProfileInt(szIni, szSTUPIDMODE, 0))
// dwOptions |= MCIAVIO_STUPIDMODE;
// Note: These settings are still in WIN.INI, not the registry
// I know.
if (mmGetProfileInt(szIni, szSKIPFRAMES, 1)) dwOptions |= MCIAVIO_SKIPFRAMES;
if (mmGetProfileInt(szIni, szUSEAVIFILE, 0)) dwOptions |= MCIAVIO_USEAVIFILE;
if (mmGetProfileInt(szIni, szNOSOUND, 0)) dwOptions |= MCIAVIO_NOSOUND;
if (mmGetProfileInt(szDrawDib, szDVA, TRUE)) dwOptions |= MCIAVIO_USEDCI;
return dwOptions; }
void FAR PASCAL WriteConfigInfo(DWORD dwOptions) { #ifndef _WIN32
// !!! This shouldn't get written out if it is the default!
mmWriteProfileString(szIni, szDEFAULTVIDEO, (dwOptions & MCIAVIO_USEVGABYDEFAULT) ? szVIDEO240 : szVIDEOWINDOW); #endif
////mmWriteProfileInt(szIni, szSEEKEXACT,
//// (dwOptions & MCIAVIO_SEEKEXACT) ? sz1 : sz0);
// mmWriteProfileInt(szIni, szZOOMBY2,
// (dwOptions & MCIAVIO_ZOOMBY2) ? sz1 : sz0);
mmWriteProfileInt(szDrawDib, szDVA, (dwOptions & MCIAVIO_USEDCI) ? sz1 : sz0);
////mmWriteProfileInt(szIni, szFAILIFNOWAVE,
//// (dwOptions & MCIAVIO_FAILIFNOWAVE) ? sz1 : sz0);
// mmWriteProfileInt(szIni, szSTUPIDMODE,
// (dwOptions & MCIAVIO_STUPIDMODE) ? sz1 : sz0);
mmWriteProfileInt(szIni, szSKIPFRAMES, (dwOptions & MCIAVIO_SKIPFRAMES) ? sz1 : sz0);
mmWriteProfileInt(szIni, szUSEAVIFILE, (dwOptions & MCIAVIO_USEAVIFILE) ? sz1 : sz0);
mmWriteProfileInt(szIni, szNOSOUND, (dwOptions & MCIAVIO_NOSOUND) ? sz1 : sz0); }
BOOL FAR PASCAL ConfigDialog(HWND hWnd, NPMCIGRAPHIC npMCI) { #define MAX_WINDOWS 10
HWND hWndActive[MAX_WINDOWS]; BOOL fResult = FALSE; INT ii; HWND hWndTop; HINSTANCE hInst; SHOWMMCPLPROPSHEETW fnShow; DWORD dwOptionFlags; WCHAR szCaptionW[128]; WCHAR szTabW[40]; UINT cchLen;
LoadStringW(ghModule, IDS_VIDEOCAPTION, szCaptionW, ARRAYSIZE(szCaptionW));
//Maybe the user is trying to get this dialog back because it is lost somewhere on
//his/her desktop. Bring back to the top. (SetFocus does not work across threads).
if (ghwndConfig) { BringWindowToTop(FindWindowW(NULL, szCaptionW)); return FALSE; }
if (hWnd == NULL) hWnd = GetActiveWindow();
//
// Enumerate all the Top level windows of this task and disable them!
//
for (hWndTop = GetWindow(GetDesktopWindow(), GW_CHILD), ii=0; hWndTop && ii < MAX_WINDOWS; hWndTop = GetWindow(hWndTop, GW_HWNDNEXT)) {
if (IsWindowEnabled(hWndTop) && IsWindowVisible(hWndTop) && (HTASK)GetWindowTask(hWndTop) == GetCurrentTask() && hWndTop != hWnd) { // don't disable our parent
hWndActive[ii++] = hWndTop; EnableWindow(hWndTop, FALSE); } }
//
// Don't let anyone try to bring up another config sheet
//
if (hWnd) ghwndConfig = hWnd; else ghwndConfig = (HWND)0x800; // just in case - make sure it's non-zero
//
// Bring up the MCIAVI configure sheet from inside mmsys.cpl
//
hInst = LoadLibrary (TEXT ("mmsys.cpl")); if (hInst) { fnShow = (SHOWMMCPLPROPSHEETW)GetProcAddress(hInst, "ShowMMCPLPropertySheetW");
if (fnShow) { // Note: This string is not localizable
static const WCHAR szVideoW[] = L"VIDEO";
LoadStringW(ghModule, IDS_VIDEO, szTabW, ARRAYSIZE(szTabW)); fResult = fnShow(hWnd, szVideoW, szTabW, szCaptionW);
//
// Make sure the dialog changes get picked up right away
// Only change those possibly affected by the dialog.
// !!! This is a little hacky; knowing which ones get changed
//
if (npMCI && fResult) { dwOptionFlags = ReadConfigInfo(); npMCI->dwOptionFlags &= ~MCIAVIO_WINDOWSIZEMASK; npMCI->dwOptionFlags &= ~MCIAVIO_ZOOMBY2; npMCI->dwOptionFlags &= ~MCIAVIO_USEVGABYDEFAULT; npMCI->dwOptionFlags |= dwOptionFlags & (MCIAVIO_WINDOWSIZEMASK | MCIAVIO_ZOOMBY2 | MCIAVIO_USEVGABYDEFAULT); } }
FreeLibrary(hInst); }
//
// Restore all windows
//
while (ii-- > 0) EnableWindow(hWndActive[ii], TRUE);
if (hWnd) SetActiveWindow(hWnd);
ghwndConfig = NULL;
return fResult; }
// This function should be called only to verify that we should be using
//
//
//
#ifdef _WIN32
TCHAR szWow32[] = TEXT("wow32.dll"); CHAR szWOWUseMciavi16Proc[] = "WOWUseMciavi16";
typedef BOOL (*PFNWOWUSEMCIAVI16PROC)(VOID);
BOOL FAR PASCAL WowUseMciavi16(VOID) { HMODULE hWow32; BOOL fUseMciavi16 = FALSE; PFNWOWUSEMCIAVI16PROC pfnWOWUseMciavi16Proc;
if (NULL != (hWow32 = GetModuleHandle(szWow32))) { pfnWOWUseMciavi16Proc = (PFNWOWUSEMCIAVI16PROC)GetProcAddress(hWow32, szWOWUseMciavi16Proc); if (NULL != pfnWOWUseMciavi16Proc) { fUseMciavi16 = (*pfnWOWUseMciavi16Proc)(); } }
return(fUseMciavi16); }
#endif
|