/**************************************************************************
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
Copyright 1997 Microsoft Corporation. All Rights Reserved.
**************************************************************************/
/**************************************************************************
File: HTMLDlg.cpp
**************************************************************************/
/**************************************************************************
Include Files
**************************************************************************/
#include <windows.h>
#include <urlmon.h>
#include <mshtmhst.h>
#define ARRAYSIZE(a) (sizeof(a)/sizeof((a)[0]))
int BSTRToLocal(LPTSTR pLocal, BSTR pWide, DWORD dwChars);
int LocalToBSTR(BSTR pWide, LPTSTR pLocal, DWORD dwChars);
/**************************************************************************
WinMain()
**************************************************************************/
int PASCAL WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HINSTANCE hinstMSHTML = LoadLibrary(TEXT("MSHTML.DLL"));
if(hinstMSHTML)
{
SHOWHTMLDIALOGFN *pfnShowHTMLDialog;
pfnShowHTMLDialog = (SHOWHTMLDIALOGFN*)GetProcAddress(hinstMSHTML, TEXT("ShowHTMLDialog"));
if(pfnShowHTMLDialog)
{
IMoniker *pmk;
TCHAR szTemp[MAX_PATH*2];
OLECHAR bstr[MAX_PATH*2];
lstrcpy(szTemp, TEXT("res://"));
GetModuleFileName(hInstance, szTemp + lstrlen(szTemp), ARRAYSIZE(szTemp) - lstrlen(szTemp));
lstrcat(szTemp, TEXT("/HTML_RESOURCE"));
LocalToBSTR(bstr, szTemp, ARRAYSIZE(bstr));
CreateURLMoniker(NULL, bstr, &pmk);
if(pmk)
{
HRESULT hr;
VARIANT varArgs, varReturn;
VariantInit(&varReturn);
varArgs.vt = VT_BSTR;
varArgs.bstrVal = SysAllocString(L"Argument 1;Argument 2;Argument 3;Argument 4");
hr = (*pfnShowHTMLDialog)(NULL, pmk, &varArgs, NULL, &varReturn);
VariantClear(&varArgs);
pmk->Release();
if(SUCCEEDED(hr))
{
switch(varReturn.vt)
{
case VT_BSTR:
{
TCHAR szData[MAX_PATH];
BSTRToLocal(szData, varReturn.bstrVal, ARRAYSIZE(szData));
wsprintf(szTemp, TEXT("The selected item was \"%s\"."), szData);
VariantClear(&varReturn);
}
break;
default:
lstrcpy(szTemp, TEXT("Cancel was selected."));
break;
}
MessageBox(NULL, szTemp, TEXT("HTML Dialog Sample"), MB_OK | MB_ICONINFORMATION);
}
else
MessageBox(NULL, TEXT("ShowHTMLDialog Failed."), TEXT("HTML Dialog Sample"), MB_OK | MB_ICONERROR);
}
}
FreeLibrary(hinstMSHTML);
}
return 0;
}
/**************************************************************************
BSTRToLocal()
**************************************************************************/
int BSTRToLocal(LPTSTR pLocal, BSTR pWide, DWORD dwChars)
{
*pLocal = 0;
#ifdef UNICODE
lstrcpyn(pLocal, pWide, dwChars);
#else
WideCharToMultiByte( CP_ACP,
0,
pWide,
-1,
pLocal,
dwChars,
NULL,
NULL);
#endif
return lstrlen(pLocal);
}
/**************************************************************************
LocalToBSTR()
**************************************************************************/
int LocalToBSTR(BSTR pWide, LPTSTR pLocal, DWORD dwChars)
{
*pWide = 0;
#ifdef UNICODE
lstrcpyn(pWide, pLocal, dwChars);
#else
MultiByteToWideChar( CP_ACP,
0,
pLocal,
-1,
pWide,
dwChars);
#endif
return lstrlenW(pWide);
}