You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
558 lines
17 KiB
558 lines
17 KiB
// File: videocpl.cpp
|
|
|
|
#include "precomp.h"
|
|
|
|
#include "confcpl.h"
|
|
#include "help_ids.h"
|
|
#include "vidview.h"
|
|
#include "confroom.h"
|
|
|
|
|
|
static const DWORD aContextHelpIds[] = {
|
|
|
|
IDC_SENDRECEIVE_GROUP, IDH_VIDEO_SEND_RECEIVE,
|
|
IDC_VIDEO_AUTOSEND, IDH_VIDEO_AUTO_SEND,
|
|
IDC_VIDEO_AUTORECEIVE, IDH_VIDEO_AUTO_RECEIVE,
|
|
|
|
IDC_VIDEO_SQCIF, IDH_VIDEO_SQCIF,
|
|
IDC_VIDEO_QCIF, IDH_VIDEO_QCIF,
|
|
IDC_VIDEO_CIF, IDH_VIDEO_CIF,
|
|
|
|
IDC_VIDEO_QUALITY_DESC, IDH_VIDEO_QUALITY,
|
|
IDC_VIDEO_QUALITY, IDH_VIDEO_QUALITY,
|
|
IDC_VIDEO_QUALITY_LOW, IDH_VIDEO_QUALITY,
|
|
IDC_VIDEO_QUALITY_HIGH, IDH_VIDEO_QUALITY,
|
|
|
|
IDC_CAMERA_GROUP, IDH_VIDEO_CAMERA,
|
|
IDC_COMBOCAP, IDH_VIDEO_CAPTURE,
|
|
IDC_VIDEO_SOURCE, IDH_VIDEO_SOURCE,
|
|
IDC_VIDEO_FORMAT, IDH_VIDEO_FORMAT,
|
|
IDC_VIDEO_MIRROR, IDH_VIDEO_MIRROR,
|
|
|
|
0, 0 // terminator
|
|
};
|
|
|
|
INT_PTR APIENTRY VideoDlgProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
//BAD KARMA: this stuff should be in a struct and stored in "GWL_USERDATA"
|
|
static PROPSHEETPAGE * ps;
|
|
static BOOL fAllowSend = FALSE;
|
|
static BOOL fAllowReceive = FALSE;
|
|
static BOOL fOldAutoSend = FALSE;
|
|
static BOOL fOldAutoReceive = FALSE;
|
|
static BOOL fOldOpenLocalWindow = FALSE;
|
|
static BOOL fOldCloseLocalWindow = FALSE;
|
|
static DWORD dwOldQuality = FALSE;
|
|
static DWORD dwNewQuality = 0;
|
|
static DWORD dwOldFrameSize = 0;
|
|
static DWORD dwNewFrameSize = 0;
|
|
static BOOL fHasSourceDialog = FALSE;
|
|
static BOOL fHasFormatDialog = FALSE;
|
|
static BOOL dwFrameSizes = 0;
|
|
static int nNumCapDev = 0;
|
|
static DWORD dwOldCapDevID = 0;
|
|
static DWORD dwNewCapDevID = 0;
|
|
static int nMaxCapDevNameLen;
|
|
static TCHAR *pszCapDevNames = (TCHAR *)NULL;
|
|
static DWORD *pdwCapDevIDs = (DWORD *)NULL;
|
|
static LPSTR szOldCapDevName = (LPSTR)NULL;
|
|
static BOOL fOldMirror = FALSE;
|
|
|
|
static CVideoWindow *m_pLocal = NULL;
|
|
static CVideoWindow *m_pRemote = NULL;
|
|
|
|
|
|
RegEntry rePolicies( POLICIES_KEY, HKEY_CURRENT_USER );
|
|
|
|
switch (message) {
|
|
case WM_INITDIALOG:
|
|
{
|
|
RegEntry reVideo(VIDEO_KEY, HKEY_CURRENT_USER);
|
|
LPSTR szTemp = (LPSTR)NULL;
|
|
|
|
// Save the PROPSHEETPAGE information.
|
|
ps = (PROPSHEETPAGE *)lParam;
|
|
|
|
CConfRoom* pcr = ::GetConfRoom();
|
|
ASSERT(NULL != pcr);
|
|
m_pLocal = pcr->GetLocalVideo();
|
|
m_pRemote = pcr->GetRemoteVideo();
|
|
ASSERT(NULL != m_pLocal && NULL != m_pRemote);
|
|
|
|
fAllowSend = m_pLocal->IsXferAllowed();
|
|
fAllowReceive = m_pRemote->IsXferAllowed();
|
|
fOldAutoSend = m_pLocal->IsAutoXferEnabled();
|
|
fOldAutoReceive = m_pRemote->IsAutoXferEnabled();
|
|
fOldMirror = m_pLocal->GetMirror();
|
|
dwFrameSizes = m_pLocal->GetFrameSizes();
|
|
dwNewFrameSize = dwOldFrameSize = m_pLocal->GetFrameSize();
|
|
dwNewQuality = dwOldQuality = m_pRemote->GetImageQuality();
|
|
|
|
// If we have one or more capture devices installed, display its or their
|
|
// names in a combo box. The user will be asked to select the device he/she
|
|
// wants to use.
|
|
|
|
if (nNumCapDev = m_pLocal->GetNumCapDev())
|
|
{
|
|
// Get the ID of the device currently selected
|
|
nMaxCapDevNameLen = m_pLocal->GetMaxCapDevNameLen();
|
|
dwOldCapDevID = reVideo.GetNumber(REGVAL_CAPTUREDEVICEID, ((UINT)-1));
|
|
szTemp = reVideo.GetString(REGVAL_CAPTUREDEVICENAME);
|
|
if (szTemp && (szOldCapDevName = (LPSTR)LocalAlloc(LPTR, sizeof(TCHAR) * nMaxCapDevNameLen)))
|
|
lstrcpy(szOldCapDevName, szTemp);
|
|
dwNewCapDevID = m_pLocal->GetCurrCapDevID();
|
|
if ((!((dwOldCapDevID == ((UINT)-1)) || (dwNewCapDevID != dwOldCapDevID))) || (dwNewCapDevID == ((UINT)-1)))
|
|
dwNewCapDevID = dwOldCapDevID;
|
|
|
|
|
|
if (nMaxCapDevNameLen && (pdwCapDevIDs = (DWORD *)LocalAlloc(LPTR, nNumCapDev * (sizeof(TCHAR) * nMaxCapDevNameLen + sizeof(DWORD)))))
|
|
{
|
|
int i;
|
|
|
|
pszCapDevNames = (TCHAR *)(pdwCapDevIDs + nNumCapDev);
|
|
// Fill up the arrey of device IDs and names.
|
|
// Only enabled capture devices are returned
|
|
m_pLocal->EnumCapDev(pdwCapDevIDs, pszCapDevNames, nNumCapDev);
|
|
|
|
// Are we still Ok?
|
|
nNumCapDev = m_pLocal->GetNumCapDev();
|
|
|
|
// Fill up the combo box with the capture devices names
|
|
for (i=0; i<nNumCapDev; i++)
|
|
SendMessage(GetDlgItem(hDlg, IDC_COMBOCAP), CB_INSERTSTRING, i, (LPARAM)(pszCapDevNames + i * nMaxCapDevNameLen));
|
|
|
|
// Set the default capture device in the combo box
|
|
for (i=0; i<nNumCapDev; i++)
|
|
{
|
|
if (!i)
|
|
{
|
|
SendMessage(GetDlgItem(hDlg, IDC_COMBOCAP), CB_SETCURSEL, 0, (LPARAM)NULL);
|
|
// If for some reason, no device is registered yet, register one
|
|
if (dwOldCapDevID == ((UINT)-1))
|
|
{
|
|
dwNewCapDevID = pdwCapDevIDs[i];
|
|
reVideo.SetValue(REGVAL_CAPTUREDEVICEID, dwNewCapDevID);
|
|
reVideo.SetValue(REGVAL_CAPTUREDEVICENAME, (LPSTR)(pszCapDevNames + i * nMaxCapDevNameLen));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (dwNewCapDevID == pdwCapDevIDs[i])
|
|
{
|
|
// The following will allow us to keep the right device
|
|
// even if its ID has changed (if a lower ID device was
|
|
// removed or added for instance)
|
|
if (lstrcmp(szOldCapDevName, (LPSTR)(pszCapDevNames + i * nMaxCapDevNameLen)) != 0)
|
|
{
|
|
int j;
|
|
|
|
// Look for the string in the array of device names
|
|
for (j=0; j<nNumCapDev; j++)
|
|
if (lstrcmp(szOldCapDevName, (LPSTR)(pszCapDevNames + j * nMaxCapDevNameLen)) == 0)
|
|
break;
|
|
if (j<nNumCapDev)
|
|
{
|
|
SendMessage(GetDlgItem(hDlg, IDC_COMBOCAP), CB_SETCURSEL, j, (LPARAM)NULL);
|
|
if (dwNewCapDevID != (DWORD)j)
|
|
{
|
|
// The device ID has changed but the device name was found
|
|
// Set the current device ID to the new onew
|
|
reVideo.SetValue(REGVAL_CAPTUREDEVICEID, dwNewCapDevID = (DWORD)j);
|
|
m_pLocal->SetCurrCapDevID(dwNewCapDevID);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// This is either a totally new device or an updated version of the
|
|
// driver. We should store the new string for that device
|
|
reVideo.SetValue(REGVAL_CAPTUREDEVICENAME, (LPSTR)(pszCapDevNames + i * nMaxCapDevNameLen));
|
|
SendMessage(GetDlgItem(hDlg, IDC_COMBOCAP), CB_SETCURSEL, i, (LPARAM)NULL);
|
|
}
|
|
}
|
|
else
|
|
SendMessage(GetDlgItem(hDlg, IDC_COMBOCAP), CB_SETCURSEL, i, (LPARAM)NULL);
|
|
}
|
|
else
|
|
{
|
|
if ((dwNewCapDevID >= (DWORD)nNumCapDev) || (dwNewCapDevID != pdwCapDevIDs[dwNewCapDevID]))
|
|
{
|
|
// Device is missing! Use the first one as the new default
|
|
dwNewCapDevID = pdwCapDevIDs[0];
|
|
reVideo.SetValue(REGVAL_CAPTUREDEVICEID, dwNewCapDevID);
|
|
reVideo.SetValue(REGVAL_CAPTUREDEVICENAME, (LPSTR)(pszCapDevNames));
|
|
m_pLocal->SetCurrCapDevID(dwNewCapDevID);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
EnableWindow(GetDlgItem(hDlg, IDC_COMBOCAP), FALSE);
|
|
|
|
// The dialog caps need to be evaluated
|
|
fHasSourceDialog = m_pLocal->IsXferEnabled() &&
|
|
m_pLocal->HasDialog(NM_VIDEO_SOURCE_DIALOG);
|
|
fHasFormatDialog = m_pLocal->IsXferEnabled() &&
|
|
m_pLocal->HasDialog(NM_VIDEO_FORMAT_DIALOG);
|
|
|
|
///////////////////////////////////////////////////////////
|
|
//
|
|
// Sending and Receiving Video
|
|
//
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_AUTOSEND),
|
|
fAllowSend && (0 != dwFrameSizes));
|
|
CheckDlgButton(hDlg, IDC_VIDEO_AUTOSEND,
|
|
fAllowSend && fOldAutoSend);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_AUTORECEIVE), fAllowReceive);
|
|
CheckDlgButton(hDlg, IDC_VIDEO_AUTORECEIVE,
|
|
fAllowReceive && fOldAutoReceive);
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
//
|
|
// Video Image
|
|
//
|
|
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_SQCIF),
|
|
fAllowSend && (dwFrameSizes & FRAME_SQCIF));
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_QCIF),
|
|
fAllowSend && (dwFrameSizes & FRAME_QCIF));
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_CIF),
|
|
fAllowSend && (dwFrameSizes & FRAME_CIF));
|
|
|
|
switch (dwOldFrameSize & dwFrameSizes)
|
|
{
|
|
case FRAME_SQCIF:
|
|
CheckDlgButton(hDlg, IDC_VIDEO_SQCIF, TRUE);
|
|
break;
|
|
|
|
case FRAME_CIF:
|
|
CheckDlgButton(hDlg, IDC_VIDEO_CIF, TRUE);
|
|
break;
|
|
|
|
case FRAME_QCIF:
|
|
default:
|
|
CheckDlgButton(hDlg, IDC_VIDEO_QCIF, TRUE);
|
|
break;
|
|
}
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_QUALITY),
|
|
fAllowReceive);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_QUALITY_DESC),
|
|
fAllowReceive);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_QUALITY_LOW),
|
|
fAllowReceive);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_QUALITY_HIGH),
|
|
fAllowReceive);
|
|
SendDlgItemMessage (hDlg, IDC_VIDEO_QUALITY, TBM_SETRANGE, FALSE,
|
|
MAKELONG (NM_VIDEO_MIN_QUALITY, NM_VIDEO_MAX_QUALITY ));
|
|
|
|
SendDlgItemMessage (hDlg, IDC_VIDEO_QUALITY, TBM_SETTICFREQ,
|
|
( NM_VIDEO_MAX_QUALITY - NM_VIDEO_MIN_QUALITY )
|
|
/ 8, 0 );
|
|
|
|
SendDlgItemMessage (hDlg, IDC_VIDEO_QUALITY, TBM_SETPAGESIZE,
|
|
0, ( NM_VIDEO_MAX_QUALITY - NM_VIDEO_MIN_QUALITY ) / 8 );
|
|
|
|
SendDlgItemMessage (hDlg, IDC_VIDEO_QUALITY, TBM_SETLINESIZE,
|
|
0, 1 );
|
|
|
|
SendDlgItemMessage (hDlg, IDC_VIDEO_QUALITY, TBM_SETPOS, TRUE,
|
|
dwOldQuality );
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
//
|
|
// Video Card and Camera
|
|
//
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_SOURCE), fAllowSend && fHasSourceDialog);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_FORMAT), fAllowSend && fHasFormatDialog);
|
|
|
|
// mirror video button
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_MIRROR), fAllowSend);
|
|
Button_SetCheck(GetDlgItem(hDlg, IDC_VIDEO_MIRROR), fOldMirror);
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
case WM_NOTIFY:
|
|
switch (((NMHDR FAR *) lParam)->code) {
|
|
case PSN_APPLY:
|
|
{
|
|
BOOL fChecked;
|
|
|
|
///////////////////////////////////////////////////////////
|
|
//
|
|
// Sending and Receiving Video
|
|
//
|
|
|
|
if (fAllowSend)
|
|
{
|
|
fChecked = IsDlgButtonChecked(hDlg, IDC_VIDEO_AUTOSEND);
|
|
|
|
if ( fChecked != fOldAutoSend )
|
|
{
|
|
m_pLocal->EnableAutoXfer(fChecked);
|
|
g_dwChangedSettings |= CSETTING_L_VIDEO;
|
|
}
|
|
}
|
|
|
|
|
|
if (fAllowReceive)
|
|
{
|
|
fChecked = IsDlgButtonChecked(hDlg, IDC_VIDEO_AUTORECEIVE);
|
|
|
|
if ( fChecked != fOldAutoReceive ) {
|
|
m_pRemote->EnableAutoXfer(fChecked);
|
|
g_dwChangedSettings |= CSETTING_L_VIDEO;
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
//
|
|
// Video Image
|
|
//
|
|
|
|
if (dwNewFrameSize != dwOldFrameSize )
|
|
{
|
|
g_dwChangedSettings |= CSETTING_L_VIDEOSIZE;
|
|
}
|
|
|
|
if ( dwNewQuality != dwOldQuality )
|
|
{
|
|
g_dwChangedSettings |= CSETTING_L_VIDEO;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
//
|
|
// Capture Device
|
|
//
|
|
|
|
if (dwNewCapDevID != dwOldCapDevID)
|
|
{
|
|
g_dwChangedSettings |= CSETTING_L_CAPTUREDEVICE;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case PSN_RESET:
|
|
{
|
|
// restore settings
|
|
if ( dwNewQuality != dwOldQuality )
|
|
{
|
|
m_pRemote->SetImageQuality(dwOldQuality);
|
|
}
|
|
|
|
if ( dwNewFrameSize != dwOldFrameSize )
|
|
{
|
|
m_pLocal->SetFrameSize(dwOldFrameSize);
|
|
}
|
|
|
|
if (dwNewCapDevID != dwOldCapDevID)
|
|
{
|
|
// Set the capture device ID back to its old value
|
|
RegEntry reVideo(VIDEO_KEY, HKEY_CURRENT_USER);
|
|
reVideo.SetValue(REGVAL_CAPTUREDEVICEID, dwOldCapDevID);
|
|
reVideo.SetValue(REGVAL_CAPTUREDEVICENAME, szOldCapDevName);
|
|
|
|
m_pLocal->SetCurrCapDevID(dwOldCapDevID);
|
|
}
|
|
|
|
m_pLocal->SetMirror(fOldMirror);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam)) {
|
|
case IDC_VIDEO_SOURCE:
|
|
if ( HIWORD(wParam) == BN_CLICKED ) {
|
|
m_pLocal->ShowDialog(NM_VIDEO_SOURCE_DIALOG);
|
|
}
|
|
break;
|
|
|
|
case IDC_VIDEO_FORMAT:
|
|
if ( HIWORD(wParam) == BN_CLICKED ) {
|
|
m_pLocal->ShowDialog(NM_VIDEO_FORMAT_DIALOG);
|
|
}
|
|
break;
|
|
case IDC_VIDEO_SQCIF:
|
|
if (( HIWORD(wParam) == BN_CLICKED )
|
|
&& (dwNewFrameSize != FRAME_SQCIF))
|
|
{
|
|
dwNewFrameSize = FRAME_SQCIF;
|
|
m_pLocal->SetFrameSize(dwNewFrameSize);
|
|
}
|
|
break;
|
|
case IDC_VIDEO_CIF:
|
|
if (( HIWORD(wParam) == BN_CLICKED )
|
|
&& (dwNewFrameSize != FRAME_CIF))
|
|
{
|
|
dwNewFrameSize = FRAME_CIF;
|
|
m_pLocal->SetFrameSize(dwNewFrameSize);
|
|
}
|
|
break;
|
|
case IDC_VIDEO_QCIF:
|
|
if (( HIWORD(wParam) == BN_CLICKED )
|
|
&& (dwNewFrameSize != FRAME_QCIF))
|
|
{
|
|
dwNewFrameSize = FRAME_QCIF;
|
|
m_pLocal->SetFrameSize(dwNewFrameSize);
|
|
}
|
|
break;
|
|
|
|
case IDC_VIDEO_MIRROR:
|
|
if ((HIWORD(wParam) == BN_CLICKED))
|
|
{
|
|
BOOL bRet;
|
|
bRet = Button_GetCheck((HWND)lParam);
|
|
if (m_pLocal)
|
|
{
|
|
m_pLocal->SetMirror(bRet);
|
|
}
|
|
}
|
|
|
|
case IDC_COMBOCAP:
|
|
if (LBN_SELCHANGE == HIWORD(wParam))
|
|
{
|
|
int index;
|
|
RegEntry reVideo(VIDEO_KEY, HKEY_CURRENT_USER);
|
|
|
|
index = (int)SendMessage(GetDlgItem(hDlg, IDC_COMBOCAP), CB_GETCURSEL, 0, 0);
|
|
dwNewCapDevID = pdwCapDevIDs[index];
|
|
reVideo.SetValue(REGVAL_CAPTUREDEVICEID, dwNewCapDevID);
|
|
reVideo.SetValue(REGVAL_CAPTUREDEVICENAME, (LPSTR)(pszCapDevNames + index * nMaxCapDevNameLen));
|
|
|
|
if (dwNewCapDevID != (DWORD)m_pLocal->GetCurrCapDevID())
|
|
{
|
|
m_pLocal->SetCurrCapDevID(dwNewCapDevID);
|
|
|
|
// The dialog caps need to be reevaluated
|
|
fHasSourceDialog = m_pLocal->IsXferEnabled() &&
|
|
m_pLocal->HasDialog(NM_VIDEO_SOURCE_DIALOG);
|
|
fHasFormatDialog = m_pLocal->IsXferEnabled() &&
|
|
m_pLocal->HasDialog(NM_VIDEO_FORMAT_DIALOG);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_SOURCE), fAllowSend && fHasSourceDialog);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_FORMAT), fAllowSend && fHasFormatDialog);
|
|
|
|
// Update the size buttons
|
|
dwFrameSizes = m_pLocal->GetFrameSizes();
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_SQCIF), fAllowSend && (dwFrameSizes & FRAME_SQCIF));
|
|
if (dwNewFrameSize & FRAME_SQCIF)
|
|
{
|
|
if (dwFrameSizes & FRAME_SQCIF)
|
|
CheckDlgButton(hDlg, IDC_VIDEO_SQCIF, TRUE);
|
|
else
|
|
{
|
|
if (dwFrameSizes & FRAME_QCIF)
|
|
dwNewFrameSize = FRAME_QCIF;
|
|
else if (dwFrameSizes & FRAME_CIF)
|
|
dwNewFrameSize = FRAME_CIF;
|
|
CheckDlgButton(hDlg, IDC_VIDEO_SQCIF, FALSE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(hDlg, IDC_VIDEO_SQCIF, FALSE);
|
|
}
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_QCIF), fAllowSend && (dwFrameSizes & FRAME_QCIF));
|
|
if (dwNewFrameSize & FRAME_QCIF)
|
|
{
|
|
if (dwFrameSizes & FRAME_QCIF)
|
|
CheckDlgButton(hDlg, IDC_VIDEO_QCIF, TRUE);
|
|
else
|
|
{
|
|
if (dwFrameSizes & FRAME_SQCIF)
|
|
{
|
|
dwNewFrameSize = FRAME_SQCIF;
|
|
CheckDlgButton(hDlg, IDC_VIDEO_SQCIF, TRUE);
|
|
}
|
|
else if (dwFrameSizes & FRAME_CIF)
|
|
dwNewFrameSize = FRAME_CIF;
|
|
CheckDlgButton(hDlg, IDC_VIDEO_QCIF, FALSE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(hDlg, IDC_VIDEO_QCIF, FALSE);
|
|
}
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_VIDEO_CIF), fAllowSend && (dwFrameSizes & FRAME_CIF));
|
|
if (dwNewFrameSize & FRAME_CIF)
|
|
{
|
|
if (dwFrameSizes & FRAME_CIF)
|
|
CheckDlgButton(hDlg, IDC_VIDEO_CIF, TRUE);
|
|
else
|
|
{
|
|
if (dwFrameSizes & FRAME_QCIF)
|
|
{
|
|
dwNewFrameSize = FRAME_QCIF;
|
|
CheckDlgButton(hDlg, IDC_VIDEO_QCIF, TRUE);
|
|
}
|
|
else if (dwFrameSizes & FRAME_SQCIF)
|
|
{
|
|
dwNewFrameSize = FRAME_SQCIF;
|
|
CheckDlgButton(hDlg, IDC_VIDEO_SQCIF, TRUE);
|
|
}
|
|
CheckDlgButton(hDlg, IDC_VIDEO_CIF, FALSE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(hDlg, IDC_VIDEO_CIF, FALSE);
|
|
}
|
|
|
|
m_pLocal->SetFrameSize(dwNewFrameSize);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_HSCROLL:
|
|
if (TB_ENDTRACK == LOWORD(wParam))
|
|
{
|
|
DWORD dwValue = (DWORD)SendDlgItemMessage( hDlg, IDC_VIDEO_QUALITY,
|
|
TBM_GETPOS, 0, 0 );
|
|
|
|
if ( dwValue != dwNewQuality ) {
|
|
dwNewQuality = dwValue;
|
|
m_pRemote->SetImageQuality(dwNewQuality);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
if (pdwCapDevIDs)
|
|
{
|
|
LocalFree(pdwCapDevIDs);
|
|
pdwCapDevIDs = (DWORD *)NULL;
|
|
}
|
|
if (szOldCapDevName)
|
|
{
|
|
LocalFree(szOldCapDevName);
|
|
szOldCapDevName = (LPSTR)NULL;
|
|
}
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
DoHelpWhatsThis(wParam, aContextHelpIds);
|
|
break;
|
|
|
|
case WM_HELP:
|
|
DoHelp(lParam, aContextHelpIds);
|
|
break;
|
|
}
|
|
return (FALSE);
|
|
}
|
|
|
|
|