Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

262 lines
7.2 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: irpropsheet.cpp
//
//--------------------------------------------------------------------------
// IrPropSheet.cpp : implementation file
//
#include "precomp.hxx"
#include "irpropsheet.h"
#include "debug.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
const UINT IRPROPSHEET_MAX_PAGES = 3;
BOOL CALLBACK IrPropSheet::AddPropSheetPage(
HPROPSHEETPAGE hpage,
LPARAM lParam)
{
IrPropSheet *irprop = (IrPropSheet*) lParam;
PROPSHEETHEADER *ppsh = (PROPSHEETHEADER *)&(irprop->psh);
IRINFO((_T("IrPropSheet::AddPropSheetPage")));
if (hpage && (ppsh->nPages < MAX_PAGES))
{
ppsh->phpage[ppsh->nPages++] = hpage;
return (TRUE);
}
return (FALSE);
}
void IrPropSheet::PropertySheet(LPCTSTR pszCaption, HWND hParent, UINT iSelectPage)
{
HPSXA hpsxa;
UINT added;
BOOL isIrdaSupported = IsIrDASupported();
INITCOMMONCONTROLSEX icc = { 0 };
icc.dwSize = sizeof(icc);
icc.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&icc);
LinkWindow_RegisterClass();
IRINFO((_T("IrPropSheet::PropertySheet")));
//
// Property page init
//
ZeroMemory(&psh, sizeof(psh));
psh.hwndParent = hParent;
psh.dwSize = sizeof(psh);
psh.dwFlags = PSH_USECALLBACK;
psh.hInstance = hInstance;
psh.pszCaption = pszCaption;
psh.nPages = 0;
psh.phpage = hp;
psh.nStartPage = iSelectPage;
//
// Check for any installed extensions.
//
hpsxa = SHCreatePropSheetExtArray(HKEY_LOCAL_MACHINE, sc_szRegWireless, 8);
//
// Add the file transfer page, giving the extensions a chance to replace it.
//
if ((!hpsxa ||
!SHReplaceFromPropSheetExtArray(hpsxa,
CPLPAGE_FILE_XFER,
AddPropSheetPage,
(LPARAM)this)) &&
isIrdaSupported) {
IRINFO((_T("Adding infrared page...")));
AddPropSheetPage(m_FileTransferPage, (LPARAM)this);
}
//
// Add the image transfer page, giving the extensions a chance to replace it.
//
if ((!hpsxa ||
!SHReplaceFromPropSheetExtArray(hpsxa,
CPLPAGE_IMAGE_XFER,
AddPropSheetPage,
(LPARAM)this)) &&
isIrdaSupported) {
IRINFO((_T("Adding image page...")));
AddPropSheetPage(m_ImageTransferPage, (LPARAM)this);
}
//
// Extensions are not allowed to extend the hardware page
//
#if 0
//
// Add the hardware page, giving the extensions a chance to replace it.
//
if (!hpsxa ||
!SHReplaceFromPropSheetExtArray(hpsxa,
CPLPAGE_HARDWARE,
AddPropSheetPage,
(LPARAM)this)) {
IRINFO((_T("Adding hardware page...")));
AddPropSheetPage(m_HardwarePage, (LPARAM)this);
}
#else
AddPropSheetPage(m_HardwarePage, (LPARAM)this);
#endif
//
// Add any extra pages that the extensions want in there.
//
if (hpsxa) {
IRINFO((_T("Adding prop sheet extensions...")));
added = SHAddFromPropSheetExtArray(hpsxa,
AddPropSheetPage,
(LPARAM)this );
IRINFO((_T("Added %x prop sheet pages."), added));
}
//sanity check so that we won't be in infinite loop.
if (iSelectPage >= psh.nPages) {
// start page is out of range.
psh.nStartPage = -1;
}
::PropertySheet(&psh);
if (hpsxa) {
//
// Unload any of our extensions
//
SHDestroyPropSheetExtArray(hpsxa);
}
LinkWindow_UnregisterClass(hInstance);
}
/////////////////////////////////////////////////////////////////////////////
// IrPropSheet
IrPropSheet::IrPropSheet(HINSTANCE hInst, UINT nIDCaption, HWND hParent, UINT iSelectPage) :
hInstance(hInst),
m_FileTransferPage(hInst, hParent),
m_ImageTransferPage(hInst, hParent),
m_HardwarePage(hInst, hParent)
{
TCHAR buf[MAX_PATH];
IRINFO((_T("IrPropSheet::IrPropSheet")));
::LoadString(hInstance, nIDCaption, buf, MAX_PATH);
PropertySheet(buf, hParent, iSelectPage);
}
IrPropSheet::IrPropSheet(HINSTANCE hInst, LPCTSTR pszCaption, HWND hParent, UINT iSelectPage) :
hInstance(hInst), m_FileTransferPage(hInst, hParent),
m_ImageTransferPage(hInst, hParent), m_HardwarePage(hInst, hParent)
{
IRINFO((_T("IrPropSheet::IrPropSheet")));
PropertySheet(pszCaption, hParent, iSelectPage);
}
IrPropSheet::~IrPropSheet()
{
}
////////////////////////////////////////////////////////////////////////
// Function that checks if the IrDA protocol is supported on the
// machine or not. If not, then CPlApplet returns FALSE when it gets
// the CPL_INIT message, thus preventing the control panel from
// displaying the applet.
////////////////////////////////////////////////////////////////////////
BOOL IrPropSheet::IsIrDASupported (void)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
BOOL retVal = FALSE;
SOCKET sock;
IRINFO((_T("IrPropSheet::IsIrDASupported")));
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
return FALSE; //a usable WinSock DLL could not be found
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup(); //the WinSock DLL is not acceptable.
IRINFO((_T("Winsock DLL not acceptable")));
return FALSE;
}
//The WinSock DLL is acceptable. Proceed.
sock = socket (AF_IRDA, SOCK_STREAM, 0);
if (INVALID_SOCKET != sock) //BUGBUG: need to explicitly check for WSAEAFNOSUPPORT
{
closesocket(sock);
retVal = TRUE;
}
IRINFO((_T("Irda supported = %x"), retVal));
//cleanup before leaving
WSACleanup();
return retVal;
}
/*
INT_PTR IrPropSheet::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam)
{
if (msg == g_uIPMsg) {
return OnInterProcessMsg (wParam, lParam);
} else if (msg == WM_INITDIALOG) {
return OnInitDialog(hDlg);
}
return FALSE;
}
*/
/*
int CALLBACK IrPropSheet::OnInitDialog()
{
g_hwndPropSheet = hDlg;
DWORD dwStyle = ::GetWindowLongPtr(hDlg, GWL_EXSTYLE);
DWORD dwNewStyle = dwStyle | WS_EX_CONTEXTHELP;
::SetWindowLongPtr(hDlg, GWL_EXSTYLE, dwNewStyle);
return bResult;
}
//
// Function to handle inter-process communication(the g_uIPMsg)
// Input:
// wParam -- contain IPMSG_ command
// lParam -- contain command's extra parameters.
// Output:
// depends on command. -1 if the command failed.
//
LRESULT IrPropSheet::OnInterProcessMsg (WPARAM wParam, LPARAM lParam)
{
if (IPMSG_REQUESTSIGNATURE == lParam)
{
if (IPMSG_SIGNATURECHECK == wParam)
return (LRESULT)IPMSG_REPLYSIGNATURE;
}
return (LRESULT)-1;
} */