//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1998 - 1999 // // File: filetransferpage.cpp // //-------------------------------------------------------------------------- // FileTransferPage.cpp : implementation file // #include "precomp.hxx" #include "filetransferpage.h" #include "debug.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif const DWORD g_FileTransferHelp[] = { IDC_DISPLAYTRAY, IDH_DISPLAYTRAY, IDC_SENDFILESGROUP, IDH_DISABLEHELP, IDC_ALLOWSEND, IDH_ALLOWSEND, IDC_DISPLAYRECV, IDH_DISPLAYRECV, IDC_LOCATIONTITLE, IDH_LOCATIONTITLE, IDC_RECEIVEDFILESLOCATION, IDH_RECEIVEDFILESLOCATION, IDC_CHOOSEFILELOCATION, IDH_CHOOSEFILELOCATION, IDC_SOUND, IDH_PLAYSOUND, 0, 0 }; ///////////////////////////////////////////////////////////////////////////// // FileTransferPage property page void FileTransferPage::OnCommand(UINT ctrlId, HWND hwndCtrl, UINT cNotify) { IRINFO((_T("FileTransferPage::OnCommand"))); switch (ctrlId) { case IDC_ALLOWSEND: OnAllowsend(); break; case IDC_DISPLAYRECV: OnDisplayrecv(); break; case IDC_DISPLAYTRAY: OnDisplaytray(); break; case IDC_CHOOSEFILELOCATION: OnChoosefilelocation(); break; case IDC_SOUND: OnPlaySound(); break; } } INT_PTR FileTransferPage::OnNotify(NMHDR * nmhdr) { switch (nmhdr->code) { case NM_CLICK: switch (nmhdr->idFrom) { case IDC_NETWORKCONNECTIONS_LINK: return OnNetworkConnectionsLink(); } break; } return PropertyPage::OnNotify(nmhdr); } ///////////////////////////////////////////////////////////////////////////// // Opens the Network Connections Folder BOOL FileTransferPage::OnNetworkConnectionsLink() { // This is: ::{CLSID_MyComputer}\::{CLSID_ControlPanel}\::{CLSID_NetworkConnections} if (ShellExecute(NULL, NULL, L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}", L"", NULL, SW_SHOWNORMAL) > reinterpret_cast(32)) { return TRUE; } else { return FALSE; } } ///////////////////////////////////////////////////////////////////////////// // FileTransferPage message handlers void FileTransferPage::OnAllowsend() { int AllowSend = m_cbAllowSend.GetCheck(); if (AllowSend != m_fAllowSend) m_ChangeMask |= CHANGE_ALLOW_FILE_XFER; else m_ChangeMask &= ~(CHANGE_ALLOW_FILE_XFER); SetModified(m_ChangeMask); } void FileTransferPage::OnDisplayrecv() { int DisplayRecv = m_cbDisplayRecv.GetCheck(); if (DisplayRecv != m_fDisplayRecv) m_ChangeMask |= CHANGE_NOTIFY_ON_FILE_XFER; else m_ChangeMask &= ~(CHANGE_NOTIFY_ON_FILE_XFER); SetModified(m_ChangeMask); } void FileTransferPage::OnDisplaytray() { int DisplayIcon = m_cbDisplayTray.GetCheck(); if (DisplayIcon != m_fDisplayTray) m_ChangeMask |= CHANGE_DISPLAY_ICON; else m_ChangeMask &= ~(CHANGE_DISPLAY_ICON); SetModified(m_ChangeMask); } void FileTransferPage::OnPlaySound() { int NewState = m_cbPlaySound.GetCheck(); if (NewState != m_fPlaySound) m_ChangeMask |= CHANGE_PLAY_SOUND; else m_ChangeMask &= ~(CHANGE_PLAY_SOUND); SetModified(m_ChangeMask); } INT_PTR FileTransferPage::OnInitDialog(HWND hwndDlg) { PropertyPage::OnInitDialog(hwndDlg); m_recvdFilesLocation.SetParent(hwndDlg); m_cbDisplayTray.SetParent(hwndDlg); m_cbDisplayRecv.SetParent(hwndDlg); m_cbAllowSend.SetParent(hwndDlg); m_cbPlaySound.SetParent(hwndDlg); IRINFO((_T("FileTransferPage::OnInitDialog"))); LoadRegistrySettings(); m_cbAllowSend.SetCheck(m_fAllowSend); m_cbDisplayRecv.SetCheck(m_fDisplayRecv); m_cbDisplayTray.SetCheck(m_fDisplayTray); m_recvdFilesLocation.SetWindowText(m_FinalDestLocation); m_cbPlaySound.SetCheck(m_fPlaySound); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void FileTransferPage::LoadRegistrySettings(void) { HKEY hIrKey = NULL; HKEY hftKey = NULL; DWORD iSize = sizeof(DWORD); DWORD data = 0; TCHAR szReceivedFilesLocation[MAX_PATH]; IRINFO((_T("FileTransferPage::LoadRegistrySettings"))); RegOpenKeyEx (HKEY_CURRENT_USER, TEXT("Control Panel\\Infrared\\File Transfer"), 0, KEY_READ, &hftKey); RegOpenKeyEx (HKEY_CURRENT_USER, TEXT("Control Panel\\Infrared\\Global"), 0, KEY_READ, &hIrKey); if (!hIrKey && !hftKey) return; if (hIrKey) { if (ERROR_SUCCESS == RegQueryValueEx (hIrKey, TEXT("ShowTrayIcon"), NULL, NULL, (LPBYTE)&data, &iSize)) m_fDisplayTray = data?TRUE:FALSE; iSize=sizeof(data); if (ERROR_SUCCESS == RegQueryValueEx (hIrKey, TEXT("PlaySound"), NULL, NULL, (LPBYTE)&data, &iSize)) m_fPlaySound = data?TRUE:FALSE; } iSize=sizeof(data); if (hftKey && ERROR_SUCCESS == RegQueryValueEx (hftKey, TEXT("AllowSend"), NULL, NULL, (LPBYTE)&data, &iSize)) m_fAllowSend = data?TRUE:FALSE; iSize=sizeof(data); if (hftKey && ERROR_SUCCESS == RegQueryValueEx (hftKey, TEXT("ShowRecvStatus"), NULL, NULL, (LPBYTE)&data, &iSize)) m_fDisplayRecv = data?TRUE:FALSE; // If the destionation location is not specified, // use the default(Desktop subfolder). // Create it if necessary. SHGetSpecialFolderPath (hDlg, m_FinalDestLocation, CSIDL_DESKTOPDIRECTORY, 0); iSize = MAX_PATH * sizeof (TCHAR); if (hftKey != NULL) { DWORD Result; Result=RegQueryValueEx (hftKey, TEXT("RecvdFilesLocation"), NULL, NULL, (LPBYTE)&szReceivedFilesLocation[0], &iSize); if (Result == ERROR_SUCCESS) { DWORD Attributes; Attributes=GetFileAttributes(szReceivedFilesLocation); if ((Attributes != INVALID_FILE_ATTRIBUTES) && (Attributes & FILE_ATTRIBUTE_DIRECTORY)) { StringCbCopy(m_FinalDestLocation,sizeof(m_FinalDestLocation),szReceivedFilesLocation); } } } // // m_TempDestLocation will be used as the intial // folder of choice for SHBrowseForFolder call. // StringCbCopy(m_TempDestLocation,sizeof(m_TempDestLocation), m_FinalDestLocation); if (hIrKey) RegCloseKey(hIrKey); if (hftKey) RegCloseKey(hftKey); } void FileTransferPage::SaveSettingsToRegistry(void) { HKEY hIrKey = NULL; HKEY hftKey = NULL; DWORD dwDisposition; IRINFO((_T("FileTransferPage::SaveSettingsToRegistry"))); RegCreateKeyEx (HKEY_CURRENT_USER, TEXT("Control Panel\\Infrared\\File Transfer"), 0, TEXT(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hftKey, &dwDisposition); RegCreateKeyEx (HKEY_CURRENT_USER, TEXT("Control Panel\\Infrared\\Global"), 0, TEXT(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hIrKey, &dwDisposition); if (hIrKey) { RegSetValueEx(hIrKey, TEXT("ShowTrayIcon"), 0, REG_BINARY, (CONST BYTE*)&m_fDisplayTray, 1); RegSetValueEx(hIrKey, TEXT("PlaySound"), 0, REG_BINARY, (CONST BYTE*)&m_fPlaySound, 1); RegCloseKey(hIrKey); } if (hftKey) { RegSetValueEx(hftKey, TEXT("AllowSend"), 0, REG_BINARY, (CONST BYTE*)&m_fAllowSend, 1); RegSetValueEx(hftKey, TEXT("ShowRecvStatus"), 0, REG_BINARY, (CONST BYTE*)&m_fDisplayRecv, 1); RegSetValueEx(hftKey, TEXT("RecvdFilesLocation"), 0, REG_SZ, (CONST BYTE*)&m_FinalDestLocation, sizeof(TCHAR)*lstrlen(m_FinalDestLocation)); RegCloseKey(hftKey); } } int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) { WPARAM sendWParam; LPARAM sendLParam; LPCTSTR lpszFilesLocation; TCHAR szErrorMsg[MAX_PATH]; TCHAR szErrorTitle[MAX_PATH]; HINSTANCE hInstanceRes; IRINFO((_T("FileTransferPage::BrowseCallbackProc"))); switch (uMsg) { case BFFM_INITIALIZED: lpszFilesLocation = (LPCTSTR)lpData; sendWParam = TRUE; sendLParam = (LPARAM)lpszFilesLocation; SendMessage(hwnd, BFFM_SETSELECTION, sendWParam, sendLParam); break; case BFFM_VALIDATEFAILED: hInstanceRes = gHInst; ::LoadString (hInstanceRes, IDS_INVALID_MSG, szErrorMsg, MAX_PATH); ::LoadString (hInstanceRes, IDS_INVALID_TITLE, szErrorTitle, MAX_PATH); ::MessageBox (hwnd, szErrorMsg, szErrorTitle, MB_OK | MB_ICONSTOP); return 1; default: break; } return 0; } void FileTransferPage::OnChoosefilelocation() { BROWSEINFO browseInfo; TCHAR pszSelectedFolder[MAX_PATH]; LPITEMIDLIST lpItemIDList; LPMALLOC pMalloc; TCHAR szBrowseTitle [MAX_PATH]; IRINFO((_T("FileTransferPage::OnChoosefileLocation"))); //load the title ::LoadString (hInstance, IDS_FILEFOLDER_PROMPT, szBrowseTitle, MAX_PATH); browseInfo.hwndOwner = hDlg; browseInfo.pidlRoot = NULL; //this will get the desktop folder browseInfo.pszDisplayName = pszSelectedFolder; browseInfo.lpszTitle = szBrowseTitle; browseInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_RETURNFSANCESTORS | BIF_VALIDATE | BIF_EDITBOX; browseInfo.lpfn = BrowseCallback; browseInfo.lParam = (LPARAM)m_TempDestLocation; if (NULL != (lpItemIDList = SHBrowseForFolder (&browseInfo))) { // // the user chose the OK button in the browse dialog box // HRESULT hr; SHGetPathFromIDList(lpItemIDList, pszSelectedFolder); StringCbCopy(m_TempDestLocation, sizeof(m_TempDestLocation),pszSelectedFolder); m_recvdFilesLocation.SetWindowText(m_TempDestLocation); if (lstrcmpi(m_TempDestLocation, m_FinalDestLocation)) m_ChangeMask |= CHANGE_FILE_LOCATION; else m_ChangeMask &= ~(CHANGE_FILE_LOCATION); SetModified(m_ChangeMask); hr=SHGetMalloc(&pMalloc); if (SUCCEEDED(hr)) { pMalloc->Free (lpItemIDList); //free the item id list as we do not need it any more pMalloc->Release(); } } } void FileTransferPage::OnApply(LPPSHNOTIFY lppsn) { IRINFO((_T("FileTransferPage::OnApply"))); if (m_ChangeMask) { if (m_ChangeMask & CHANGE_FILE_LOCATION) StringCbCopy(m_FinalDestLocation,sizeof(m_FinalDestLocation), m_TempDestLocation); if (m_ChangeMask & CHANGE_ALLOW_FILE_XFER) m_fAllowSend = m_cbAllowSend.GetCheck(); if (m_ChangeMask & CHANGE_NOTIFY_ON_FILE_XFER) m_fDisplayRecv = m_cbDisplayRecv.GetCheck(); if (m_ChangeMask & CHANGE_DISPLAY_ICON) m_fDisplayTray = m_cbDisplayTray.GetCheck(); if (m_ChangeMask & CHANGE_PLAY_SOUND) m_fPlaySound = m_cbPlaySound.GetCheck(); SaveSettingsToRegistry(); m_ChangeMask = 0; } PropertyPage::OnApply(lppsn); } BOOL FileTransferPage::OnHelp (LPHELPINFO pHelpInfo) { TCHAR szHelpFile[MAX_PATH]; IRINFO((_T("FileTransferPage::OnHelp"))); ::LoadString(hInstance, IDS_HELP_FILE, szHelpFile, MAX_PATH); ::WinHelp((HWND)(pHelpInfo->hItemHandle), (LPCTSTR) szHelpFile, HELP_WM_HELP, (ULONG_PTR)(LPTSTR)g_FileTransferHelp); return FALSE; } BOOL FileTransferPage::OnContextMenu (WPARAM wParam, LPARAM lParam) { TCHAR szHelpFile[MAX_PATH]; IRINFO((_T("FileTransferPage::OnContextMenu"))); ::LoadString(hInstance, IDS_HELP_FILE, szHelpFile, MAX_PATH); ::WinHelp((HWND) wParam, (LPCTSTR) szHelpFile, HELP_CONTEXTMENU, (ULONG_PTR)(LPVOID)g_FileTransferHelp); return FALSE; }