|
|
//+-------------------------------------------------------------------------
//
// 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; } */
|