📄 dialogs.c
字号:
gBackColour = IDD_PrefsBlack;
}
if (IsDlgButtonChecked(hDlg, IDD_PrefsSmallIndex)) {
indexsz = CAP_SMALL_INDEX;
} else {
indexsz = CAP_LARGE_INDEX;
}
if (indexsz != gCapParms.dwIndexSize) {
gCapParms.dwIndexSize = indexsz;
}
if (IsDlgButtonChecked(hDlg, IDD_PrefsMasterAudio)) {
gCapParms.AVStreamMaster = AVSTREAMMASTER_AUDIO;
}
else {
gCapParms.AVStreamMaster = AVSTREAMMASTER_NONE;
}
EndDialog(hDlg, TRUE);
return(TRUE);
}
break;
}
return FALSE;
}
int FAR PASCAL
NoHardwareDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static HBRUSH hbr;
switch(message) {
case WM_INITDIALOG:
// lParam contains the argument to DialogBoxParam which is the
// reason text
SetDlgItemText(hDlg, IDD_FailReason, (LPSTR) lParam);
hbr = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
return TRUE;
case WM_DESTROY:
DeleteObject(hbr);
#ifdef _WIN32
case WM_CTLCOLORSTATIC:
#else
case WM_CTLCOLOR:
#endif
if (GET_WM_CTLCOLOR_HWND(wParam, lParam, message) == GetDlgItem(hDlg, IDD_FailReason)) {
HDC hdc;
hdc = GET_WM_CTLCOLOR_HDC(wParam, lParam, message);
SetTextColor(hdc, RGB(0xff, 0, 0));
SetBkColor(hdc, GetSysColor(COLOR_WINDOW));
// in order to ensure that the text colour we have chosen for
// this control is used, we need to actually return a brush.
// for win31, we also need to align the brush
#ifndef _WIN32
{
POINT pt;
pt.x = 0;
pt.y = 0;
ClientToScreen(hDlg, &pt);
UnrealizeObject(hbr);
SetBrushOrg(hdc, pt.x, pt.y);
}
#endif
return((int) hbr);
}
break;
case WM_COMMAND:
switch(GET_WM_COMMAND_ID(wParam, lParam)) {
case IDOK:
EndDialog(hDlg, TRUE);
return(TRUE);
case IDCANCEL:
EndDialog(hDlg, FALSE);
return(TRUE);
}
break;
}
return(FALSE);
}
//capture selected single frames
long
FAR PASCAL
CapFramesProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam)
{
char ach[MAX_PATH*2];
char achName[MAX_PATH];
static BOOL bFirst;
static int iFrames;
switch(Message) {
case WM_INITDIALOG:
// write out the prompt message including the capture file name
capFileGetCaptureFile(ghWndCap, achName, sizeof(achName));
wsprintf(ach, tmpString(IDS_PROMPT_CAPFRAMES), achName);
SetDlgItemText(hDlg, IDD_CapMessage, ach);
bFirst = TRUE;
//move dialog so it doesn't obscure the capture window
SmartWindowPosition(hDlg, ghWndCap);
return(TRUE);
case WM_COMMAND:
switch(GET_WM_COMMAND_ID(wParam, lParam)) {
case IDCANCEL:
if (!bFirst) {
capCaptureSingleFrameClose(ghWndCap);
EndDialog(hDlg, TRUE);
} else {
EndDialog(hDlg, FALSE);
}
return(TRUE);
case IDOK:
if (bFirst) {
bFirst = FALSE;
iFrames = 0;
capCaptureSingleFrameOpen(ghWndCap);
SetDlgItemText(hDlg, IDCANCEL, tmpString(IDS_CAP_CLOSE));
}
capCaptureSingleFrame(ghWndCap);
iFrames++;
wsprintf(ach, tmpString(IDS_STATUS_NUMFRAMES), iFrames);
SetDlgItemText(hDlg, IDD_CapNumFrames, ach);
return(TRUE);
}
break;
}
return(FALSE);
}
// enumerate all the MCI devices of a particular type and add them and
// their descriptions to a combo box list.
//
void
AddMCIDeviceNames(WORD wDeviceType, HWND hwndCB)
{
int nIndex;
MCI_OPEN_PARMS mciOp;
MCI_INFO_PARMS mciIp;
MCI_SYSINFO_PARMS mciSIP;
MCI_GENERIC_PARMS mciGp;
char buf[MAXPNAMELEN + 128]; // Contains eg. Name\t\tVideodisc1
char buf2 [64];
int maxdevs;
DWORD dwRet;
// To get the user readable names of the devices, we
// must open all appropriate devices, and then get info.
// MCI Open structure
mciOp.dwCallback = 0;
mciOp.lpstrElementName = NULL;
mciOp.lpstrAlias = NULL;
// MCI Info structure
mciIp.dwCallback = 0;
mciIp.lpstrReturn = (LPSTR) buf;
mciIp.dwRetSize = MAXPNAMELEN - 1;
// MCI SysInfo structure
mciSIP.dwCallback = 0;
mciSIP.lpstrReturn = (LPSTR) buf2;
mciSIP.dwRetSize = sizeof (buf2);
mciSIP.wDeviceType = wDeviceType;
// MCI Generic structure
mciGp.dwCallback = 0;
// Load the combobox with the product info name, followed by
// a comma, then a space, and then the mci device name. This allows a
// single alphabetized list to be kept.
// eg.
// Pioneer Laserdisc, videodisc1
maxdevs = CountMCIDevices((WORD)mciSIP.wDeviceType);
for (nIndex = 0; nIndex < maxdevs; nIndex++) {
// Get the system name eg. Videodisc1
mciSIP.dwNumber = nIndex + 1;
dwRet = mciSendCommand (0, MCI_SYSINFO,
MCI_SYSINFO_NAME,
(DWORD) (LPVOID) &mciSIP);
mciOp.lpstrDeviceType =
(LPSTR) MAKELONG (wDeviceType, nIndex);
if (!(dwRet = mciSendCommand(0, MCI_OPEN,
MCI_WAIT | MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID |
MCI_OPEN_SHAREABLE,
(DWORD) (LPVOID) &mciOp))) {
if (!(dwRet = mciSendCommand (mciOp.wDeviceID, MCI_INFO,
MCI_WAIT | MCI_INFO_PRODUCT,
(DWORD) (LPVOID) &mciIp))) {
lstrcat (buf, ", "); // append the delimiter
lstrcat (buf, buf2); // append the system name
// Whew, finally put it in the listbox
SendMessage( hwndCB, CB_ADDSTRING, 0,
(LONG)(LPSTR) buf);
} //endif got INFO
// Close it now
mciSendCommand (mciOp.wDeviceID, MCI_CLOSE,
MCI_WAIT,
(DWORD) (LPVOID) &mciGp);
} // endif OPEN
} // endif for all devices of this type
}
//
// dialog proc to select MCI device and parameters, including start,
// stop times.
BOOL FAR PASCAL
MCISetupProc(HWND hwnd, unsigned msg, UINT wParam, LONG lParam)
{
HWND hwndCB;
DWORD dw;
char buf[MAXPNAMELEN];
BOOL f;
int j;
static int nLastCBIndex = 0;
static DWORD tdwMCIStartTime;
static DWORD tdwMCIStopTime;
switch (msg) {
case WM_INITDIALOG:
CheckRadioButton(hwnd, IDD_MCI_PLAY, IDD_MCI_STEP,
gCapParms.fStepMCIDevice ?
IDD_MCI_STEP : IDD_MCI_PLAY );
// enable averaging options only in step mode
EnableWindow (GetDlgItem (hwnd, IDD_MCI_AVERAGE_2X), gCapParms.fStepMCIDevice);
EnableWindow (GetDlgItem (hwnd, IDD_MCI_AVERAGE_FR), gCapParms.fStepMCIDevice);
SetDlgItemInt(hwnd, IDD_MCI_AVERAGE_FR, gCapParms.wStepCaptureAverageFrames, FALSE);
CheckDlgButton (hwnd, IDD_MCI_AVERAGE_2X, gCapParms.fStepCaptureAt2x);
// save current dialog time settings
tdwMCIStartTime = gCapParms.dwMCIStartTime;
tdwMCIStopTime = gCapParms.dwMCIStopTime;
TimeMSToHMSString (gCapParms.dwMCIStartTime, buf);
SetDlgItemText (hwnd, IDD_MCI_STARTTIME, buf);
TimeMSToHMSString (gCapParms.dwMCIStopTime, buf);
SetDlgItemText (hwnd, IDD_MCI_STOPTIME, buf);
// fill combo box with list of MCI devices
hwndCB = GetDlgItem( hwnd, IDD_MCI_SOURCE );
AddMCIDeviceNames(MCI_DEVTYPE_VIDEODISC, hwndCB);
AddMCIDeviceNames(MCI_DEVTYPE_VCR, hwndCB);
// set the selection to whatever he chose last time through this dlg
// default is the first entry.
SendMessage( hwndCB, CB_SETCURSEL, nLastCBIndex, 0L);
break;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
case IDOK:
// i think the point of this is to ensure that
// the KILLFOCUS processing for the edit boxes has been done
// and thus the temp times are the same as the dialog text
SetFocus(GET_WM_COMMAND_HWND(wParam, lParam));
MCIGetDeviceNameAndIndex (hwnd, &nLastCBIndex, gachMCIDeviceName);
capSetMCIDeviceName(ghWndCap, gachMCIDeviceName) ;
gCapParms.fStepMCIDevice = IsDlgButtonChecked (hwnd, IDD_MCI_STEP);
// pick up the temp times - these were set on KILLFOCUS msgs
// (when we did validation and string->dword conversion
gCapParms.dwMCIStartTime = tdwMCIStartTime;
gCapParms.dwMCIStopTime = tdwMCIStopTime;
gCapParms.fStepCaptureAt2x = IsDlgButtonChecked (hwnd, IDD_MCI_AVERAGE_2X);
gCapParms.wStepCaptureAverageFrames = GetDlgItemInt (hwnd, IDD_MCI_AVERAGE_FR, NULL, FALSE);
EndDialog(hwnd, TRUE);
break;
case IDCANCEL:
EndDialog(hwnd, 0);
break;
case IDD_MCI_STEP:
case IDD_MCI_PLAY:
//averaging only enabled in play mode
f = IsDlgButtonChecked (hwnd, IDD_MCI_STEP);
EnableWindow (GetDlgItem (hwnd, IDD_MCI_AVERAGE_2X), f);
EnableWindow (GetDlgItem (hwnd, IDD_MCI_AVERAGE_FR), f);
break;
case IDD_MCI_AVERAGE_FR:
// validate the count of frames to average 1..100
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_KILLFOCUS) {
j = GetDlgItemInt(hwnd,
GET_WM_COMMAND_ID(wParam, lParam), NULL, FALSE);
// Limit frames to average between 1 and 100
if (j < 1 || j > 100) {
SetDlgItemInt (hwnd,
GET_WM_COMMAND_ID(wParam, lParam), 1, FALSE);
}
}
break;
case IDD_MCI_STARTSET:
case IDD_MCI_STOPSET:
// set the start or stop time to be the time
// on the device right now.
// MCI devices could yield and cause us to re-enter - the
// simplest answer seems to be to disable the dialog
EnableWindow(hwnd, FALSE);
MCIGetDeviceNameAndIndex (hwnd, &nLastCBIndex, buf);
if (MCIDeviceOpen (buf)) {
if (GET_WM_COMMAND_ID(wParam, lParam) == IDD_MCI_STARTSET) {
if (MCIDeviceGetPosition (&tdwMCIStartTime)) {
TimeMSToHMSString (tdwMCIStartTime, buf);
SetDlgItemText (hwnd, IDD_MCI_STARTTIME, buf);
}
else {
MessageBoxID(IDS_MCI_CONTROL_ERROR,
MB_OK|MB_ICONEXCLAMATION);
}
}
else {
if (MCIDeviceGetPosition (&tdwMCIStopTime)) {
TimeMSToHMSString (tdwMCIStopTime, buf);
SetDlgItemText (hwnd, IDD_MCI_STOPTIME, buf);
}
else {
MessageBoxID(IDS_MCI_CONTROL_ERROR,
MB_OK|MB_ICONEXCLAMATION);
}
}
MCIDeviceClose ();
} else {
// cant open device
MessageBoxID(IDS_MCI_CONTROL_ERROR,
MB_OK|MB_ICONEXCLAMATION);
}
EnableWindow(hwnd, TRUE);
break;
case IDD_MCI_STARTTIME:
case IDD_MCI_STOPTIME:
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_KILLFOCUS) {
GetDlgItemText (hwnd,
GET_WM_COMMAND_ID(wParam, lParam), buf, sizeof (buf));
if ((dw = TimeHMSStringToMS (buf)) == -1) {
// Error in string, reset
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -