|
|
#include "precomp.h"
#include <shellapi.h>
#include "clCnfLnk.hpp"
#include "resource.h"
#if 0
typedef struct _clps { PROPSHEETPAGE psp; PCConfLink pconflink; char rgchIconFile[MAX_PATH_LEN]; } CLPS; DECLARE_STANDARD_TYPES(CLPS);
UINT CALLBACK CLPSCallback(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp) { UINT uResult = TRUE; PCLPS pclps = (PCLPS)ppsp;
// uMsg may be any value.
ASSERT(! hwnd || IS_VALID_HANDLE(hwnd, WND)); ASSERT(IS_VALID_STRUCT_PTR((PCCLPS)ppsp, CCLPS));
switch (uMsg) { case PSPCB_CREATE: TRACE_OUT(("CLPSCallback(): Received PSPCB_CREATE.")); break;
case PSPCB_RELEASE: TRACE_OUT(("CLPSCallback(): Received PSPCB_RELEASE.")); pclps->pconflink->Release(); break;
default: TRACE_OUT(("CLPSCallback(): Unhandled message %u.", uMsg)); break; }
return(uResult); }
void SetCLPSFileNameAndIcon(HWND hdlg) { HRESULT hr; PCConfLink pconflink; char rgchFile[MAX_PATH_LEN];
ASSERT(IS_VALID_HANDLE(hdlg, WND));
pconflink = ((PCLPS)GetWindowLong(hdlg, DWL_USER))->pconflink; ASSERT(IS_VALID_STRUCT_PTR(pconflink, CCConfLink));
hr = pconflink->GetCurFile(rgchFile, sizeof(rgchFile));
if (hr == S_OK) { SHFILEINFO shfi; DWORD dwResult;
dwResult = SHGetFileInfo( rgchFile, 0, &shfi, sizeof(shfi), (SHGFI_DISPLAYNAME | SHGFI_ICON));
if (dwResult) { PSTR pszFileName;
pszFileName = (PSTR)ExtractFileName(shfi.szDisplayName);
EVAL(SetDlgItemText(hdlg, IDC_NAME, pszFileName));
TRACE_OUT(("SetCLPSFileNameAndIcon(): Set property sheet file name to \"%s\".", pszFileName));
ASSERT(IS_VALID_HANDLE(shfi.hIcon, ICON));
HICON hIconOld = (HICON) SendDlgItemMessage(hdlg, IDC_FILEICON, STM_SETICON, (WPARAM) shfi.hIcon, 0); if (NULL != hIconOld) { DestroyIcon(hIconOld); } } else { hr = E_FAIL;
TRACE_OUT( ("SetCLPSFileNameAndIcon(): SHGetFileInfo() failed, returning %lu.", dwResult)); } } else { TRACE_OUT(("SetCLPSFileNameAndIcon(): GetCurFile() failed, returning %s.", GetHRESULTString(hr))); }
if (hr != S_OK) { EVAL(SetDlgItemText(hdlg, IDC_NAME, EMPTY_STRING)); }
return; }
void SetCLPSName(HWND hdlg) { PCConfLink pconflink; HRESULT hr; PSTR pszName;
ASSERT(IS_VALID_HANDLE(hdlg, WND));
pconflink = ((PCLPS)GetWindowLong(hdlg, DWL_USER))->pconflink; ASSERT(IS_VALID_STRUCT_PTR(pconflink, CCConfLink));
hr = pconflink->GetName(&pszName);
if (hr == S_OK) { EVAL(SetDlgItemText(hdlg, IDC_CONFNAME, pszName));
TRACE_OUT(("SetCLPSURL(): Set property sheet Name to \"%s\".", pszName));
PIMalloc pMalloc = NULL; if (SUCCEEDED(SHGetMalloc(&pMalloc))) { pMalloc->Free(pszName); pMalloc->Release(); pMalloc = NULL; pszName = NULL; } } else { EVAL(SetDlgItemText(hdlg, IDC_CONFNAME, EMPTY_STRING)); }
return; }
void SetCLPSAddress(HWND hdlg) { PCConfLink pconflink; HRESULT hr; PSTR pszAddress;
ASSERT(IS_VALID_HANDLE(hdlg, WND));
pconflink = ((PCLPS)GetWindowLong(hdlg, DWL_USER))->pconflink; ASSERT(IS_VALID_STRUCT_PTR(pconflink, CCConfLink));
hr = pconflink->GetAddress(&pszAddress);
if (hr == S_OK) { EVAL(SetDlgItemText(hdlg, IDC_CONFADDR, pszAddress));
TRACE_OUT(("SetCLPSURL(): Set property sheet Address to \"%s\".", pszAddress));
PIMalloc pMalloc = NULL; if (SUCCEEDED(SHGetMalloc(&pMalloc))) { pMalloc->Free(pszAddress); pMalloc->Release(); pMalloc = NULL; pszAddress = NULL; } } else { EVAL(SetDlgItemText(hdlg, IDC_CONFADDR, EMPTY_STRING)); }
return; }
BOOL CLPS_InitDialog(HWND hdlg, WPARAM wparam, LPARAM lparam) { PCConfLink pconflink;
// wparam may be any value.
ASSERT(IS_VALID_HANDLE(hdlg, WND)); ASSERT(IS_VALID_STRUCT_PTR((PCCLPS)lparam, CCLPS));
SetWindowLong(hdlg, DWL_USER, lparam);
pconflink = ((PCLPS)lparam)->pconflink; ASSERT(IS_VALID_STRUCT_PTR(pconflink, CCConfLink));
// Initialize control contents.
SetCLPSFileNameAndIcon(hdlg); SetCLPSName(hdlg); SetCLPSAddress(hdlg);
return(TRUE); }
BOOL CLPS_Destroy(HWND hdlg, WPARAM wparam, LPARAM lparam) { PCConfLink pconflink;
// wparam may be any value.
// lparam may be any value.
ASSERT(IS_VALID_HANDLE(hdlg, WND));
pconflink = ((PCLPS)GetWindowLong(hdlg, DWL_USER))->pconflink; ASSERT(IS_VALID_STRUCT_PTR(pconflink, CConfLink));
SetWindowLong(hdlg, DWL_USER, NULL);
return(TRUE); }
BOOL CALLBACK CLPS_DlgProc(HWND hdlg, UINT uMsg, WPARAM wparam, LPARAM lparam) { BOOL bMsgHandled = FALSE;
// uMsg may be any value.
// wparam may be any value.
// lparam may be any value.
ASSERT(IS_VALID_HANDLE(hdlg, WND));
switch (uMsg) { case WM_INITDIALOG: bMsgHandled = CLPS_InitDialog(hdlg, wparam, lparam); break;
case WM_DESTROY: bMsgHandled = CLPS_Destroy(hdlg, wparam, lparam); break;
#if 0
case WM_COMMAND: bMsgHandled = CLPS_Command(hdlg, wparam, lparam); break;
case WM_NOTIFY: bMsgHandled = CLPS_Notify(hdlg, wparam, lparam); break; #endif // 0
#ifdef CLPSHELP
case WM_HELP: WinHelp((HWND)(((LPHELPINFO)lparam)->hItemHandle), ISPS_GetHelpFileFromControl((HWND)(((LPHELPINFO)lparam)->hItemHandle)), HELP_WM_HELP, (DWORD)(PVOID)s_rgdwHelpIDs); bMsgHandled = TRUE; break;
case WM_CONTEXTMENU: { POINT pt;
LPARAM_TO_POINT(lparam, pt); EVAL(ScreenToClient(hdlg, &pt));
WinHelp((HWND)wparam, ISPS_GetHelpFileFromControl(ChildWindowFromPoint(hdlg, pt)), HELP_CONTEXTMENU, (DWORD)(PVOID)s_rgdwHelpIDs); bMsgHandled = TRUE; break; } #endif // CLSPSHELP
default: break; }
return(bMsgHandled); }
HRESULT AddCLPS( PCConfLink pconflink, LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lparam) { HRESULT hr; CLPS clps; HPROPSHEETPAGE hpsp;
// lparam may be any value.
ASSERT(IS_VALID_STRUCT_PTR(pconflink, CConfLink)); ASSERT(IS_VALID_CODE_PTR(pfnAddPage, LPFNADDPROPSHEETPAGE));
ZeroMemory(&clps, sizeof(clps));
clps.psp.dwSize = sizeof(clps); clps.psp.dwFlags = (PSP_DEFAULT | PSP_USECALLBACK); clps.psp.hInstance = g_hInst; clps.psp.pszTemplate = MAKEINTRESOURCE(IDD_CONFLINKPROP); clps.psp.pfnDlgProc = (DLGPROC) &CLPS_DlgProc; clps.psp.pfnCallback = &CLPSCallback;
clps.pconflink = pconflink;
ASSERT(IS_VALID_STRUCT_PTR(&clps, CCLPS));
hpsp = CreatePropertySheetPage(&(clps.psp));
if (hpsp) { if ((*pfnAddPage)(hpsp, lparam)) { pconflink->AddRef(); hr = S_OK; TRACE_OUT(("AddCLPS(): Added Conference Link property sheet.")); } else { DestroyPropertySheetPage(hpsp);
hr = E_FAIL; WARNING_OUT(("AddCLPS(): Callback to add property sheet failed.")); } } else { hr = E_OUTOFMEMORY; }
return(hr); } #endif // 0
HRESULT STDMETHODCALLTYPE CConfLink::Initialize(LPCITEMIDLIST pcidlFolder, LPDATAOBJECT pido, HKEY hkeyProgID) { HRESULT hr; FORMATETC fmtetc = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; STGMEDIUM stgmed;
DebugEntry(CConfLink::Initialize);
ASSERT(IS_VALID_STRUCT_PTR(this, CConfLink)); ASSERT( !pcidlFolder || IS_VALID_STRUCT_PTR(pcidlFolder, const ITEMIDLIST)); ASSERT(IS_VALID_INTERFACE_PTR(pido, IDataObject)); ASSERT(IS_VALID_HANDLE(hkeyProgID, KEY));
hr = pido->GetData(&fmtetc, &stgmed);
if (hr == S_OK) { UINT ucbPathLen; PSTR pszFile;
// (+ 1) for null terminator.
ucbPathLen = DragQueryFile((HDROP)(stgmed.hGlobal), 0, NULL, 0) + 1; ASSERT(ucbPathLen > 0);
pszFile = new(char[ucbPathLen]);
if (pszFile) { EVAL(DragQueryFile((HDROP)(stgmed.hGlobal), 0, pszFile, ucbPathLen) == ucbPathLen - 1); ASSERT(IS_VALID_STRING_PTR(pszFile, STR)); ASSERT((UINT)lstrlen(pszFile) == ucbPathLen - 1);
hr = LoadFromFile(pszFile, TRUE);
delete pszFile; pszFile = NULL; } else { hr = E_OUTOFMEMORY; }
EVAL(MyReleaseStgMedium(&stgmed) == S_OK); }
ASSERT(IS_VALID_STRUCT_PTR(this, CConfLink));
DebugExitHRESULT(CConfLink::Initialize, hr);
return(hr); }
#if 0
HRESULT STDMETHODCALLTYPE CConfLink::AddPages( LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lparam) { HRESULT hr;
DebugEntry(CConfLink::AddPages);
// lparam may be any value.
ASSERT(IS_VALID_STRUCT_PTR(this, CConfLink)); ASSERT(IS_VALID_CODE_PTR(pfnAddPage, LPFNADDPROPSHEETPAGE));
hr = AddCLPS(this, pfnAddPage, lparam);
ASSERT(IS_VALID_STRUCT_PTR(this, CConfLink));
DebugExitHRESULT(CConfLink::AddPages, hr);
return(hr); }
HRESULT STDMETHODCALLTYPE CConfLink::ReplacePage( UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplaceWith, LPARAM lparam) { HRESULT hr;
DebugEntry(CConfLink::ReplacePage);
// lparam may be any value.
// uPageID may be any value.
ASSERT(IS_VALID_STRUCT_PTR(this, CConfLink)); ASSERT(IS_VALID_CODE_PTR(pfnReplaceWith, LPFNADDPROPSHEETPAGE));
hr = E_NOTIMPL;
ASSERT(IS_VALID_STRUCT_PTR(this, CConfLink));
DebugExitHRESULT(CConfLink::ReplacePage, hr);
return(hr); }
#endif // 0
|