windows-nt/Source/XPSP1/NT/com/ole2ui32/test/mwclass.cxx
2020-09-26 16:20:57 +08:00

499 lines
12 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1994.
//
// File: mwclass.cxx
//
// Contents: implementation for the main window class
//
// Classes: CMainWindow
//
// Functions: Exists
//
// History: 9-30-94 stevebl Created
//
//----------------------------------------------------------------------------
#include "test.h"
#include "mwclass.h"
#include "about.h"
#include <assert.h>
#include <oledlg.h>
#include "linkcntr.h"
CMyOleUILinkContainer MyOleUILinkContainer;
//+---------------------------------------------------------------------------
//
// Member: CMainWindow::CMainWindow
//
// Synopsis: constructor
//
// History: 9-30-94 stevebl Created
//
//----------------------------------------------------------------------------
CMainWindow::CMainWindow()
{
}
//+---------------------------------------------------------------------------
//
// Member: CMainWindow::~CMainWindow
//
// Synopsis: destructor
//
// History: 9-30-94 stevebl Created
//
// Notes: Destruction of the main window indicates that the app should
// quit.
//
//----------------------------------------------------------------------------
CMainWindow::~CMainWindow()
{
PostQuitMessage(0);
}
//+---------------------------------------------------------------------------
//
// Member: CMainWindow::InitInstance
//
// Synopsis: Instantiates an instance of the Galactic War window.
//
// Arguments: [hInstance] - instance of the app
// [nCmdShow] - command to pass to ShowWindow
//
// Returns: TRUE on success
// FALSE on failure
//
// History: 9-30-94 stevebl Created
//
// Notes: This method must be called only once, immediately after
// class construction.
//
//----------------------------------------------------------------------------
BOOL CMainWindow::InitInstance(HINSTANCE hInstance, int nCmdShow)
{
// Note, the Create method sets the _hwnd member for me so I don't
// need to set it myself.
if (!Create(
TEXT(MAIN_WINDOW_CLASS_NAME),
TEXT(VER_INTERNALNAME_STR),
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
| WS_MAXIMIZEBOX | WS_THICKFRAME,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance))
{
return(FALSE);
}
ShowWindow(_hwnd, nCmdShow);
UpdateWindow(_hwnd);
return(TRUE);
}
//+---------------------------------------------------------------------------
//
// Member: CMainWindow::WindowProc
//
// Synopsis: main window procedure
//
// Arguments: [uMsg] - Windows message
// [wParam] - first message parameter
// [lParam] - second message parameter
//
// History: 9-30-94 stevebl Created
//
// Notes: See CHlprWindow for a description of how this method gets
// called by the global WinProc.
//
//----------------------------------------------------------------------------
LRESULT CMainWindow::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
return(TRUE);
case WM_COMMAND:
return DoMenu(wParam, lParam);
case WM_QUIT:
case WM_CLOSE:
default:
return(DefWindowProc(_hwnd, uMsg, wParam, lParam));
}
return(FALSE);
}
//+---------------------------------------------------------------------------
//
// Member: CMainWindow::DoMenu
//
// Synopsis: implements the main menu commands
//
// Arguments: [wParam] - first window parameter
// [lParam] - second window parameter
//
// History: 9-30-94 stevebl Created
//
//----------------------------------------------------------------------------
LRESULT CMainWindow::DoMenu(WPARAM wParam, LPARAM lParam)
{
switch (LOWORD(wParam))
{
case IDM_INSERTOBJECT:
TestInsertObject();
break;
case IDM_PASTESPECIAL:
TestPasteSpecial();
break;
case IDM_EDITLINKS:
TestEditLinks();
break;
case IDM_CHANGEICON:
TestChangeIcon();
break;
case IDM_CONVERT:
TestConvert();
break;
case IDM_CANCONVERT:
TestCanConvert();
break;
case IDM_BUSY:
TestBusy();
break;
case IDM_CHANGESOURCE:
TestChangeSource();
break;
case IDM_OBJECTPROPS:
TestObjectProps();
break;
case IDD_LINKSOURCEUNAVAILABLE:
case IDD_CANNOTUPDATELINK:
case IDD_SERVERNOTREG:
case IDD_LINKTYPECHANGED:
case IDD_SERVERNOTFOUND:
case IDD_OUTOFMEMORY:
TestPromptUser((int)LOWORD(wParam));
break;
case IDM_UPDATELINKS:
TestUpdateLinks();
break;
case IDM_EXIT:
SendMessage(_hwnd, WM_CLOSE, 0, 0);
break;
case IDM_ABOUT:
{
CAbout dlgAbout;
dlgAbout.ShowDialog(_hInstance, MAKEINTRESOURCE(IDM_ABOUT), _hwnd);
}
break;
default:
return(DefWindowProc(_hwnd, WM_COMMAND, wParam, lParam));
}
return(FALSE);
}
void CMainWindow::TestInsertObject()
{
TCHAR szFile[MAX_PATH];
OLEUIINSERTOBJECT io;
memset(&io, 0, sizeof(OLEUIINSERTOBJECT));
io.cbStruct = sizeof(io);
io.dwFlags = IOF_SELECTCREATECONTROL | IOF_SHOWINSERTCONTROL;
// io.dwFlags = IOF_SHOWINSERTCONTROL;
io.hWndOwner = _hwnd;
io.lpszFile = szFile;
io.cchFile = MAX_PATH;
io.lpszCaption = TEXT("Testing OleUIInsertObject dialog");
memset(szFile, 0, sizeof(szFile));
UINT uReturn = OleUIInsertObject(&io);
MessageBoxFromStringIdsAndArgs(
_hwnd,
_hInstance,
IDS_INSERTOBJECT,
IDS_RETURN,
MB_OK,
uReturn,
io.dwFlags,
io.lpszFile,
io.sc);
}
void CMainWindow::TestPasteSpecial()
{
LPDATAOBJECT lpClipboardDataObj = NULL;
HRESULT hr = OleGetClipboard(&lpClipboardDataObj);
if (SUCCEEDED(NOERROR))
{
OLEUIPASTEENTRY rgPe[1];
rgPe[0].fmtetc.cfFormat = CF_TEXT;
rgPe[0].fmtetc.ptd = NULL;
rgPe[0].fmtetc.dwAspect = DVASPECT_CONTENT;
rgPe[0].fmtetc.tymed = TYMED_HGLOBAL;
rgPe[0].fmtetc.lindex = -1;
rgPe[0].lpstrFormatName = TEXT("Text");
rgPe[0].lpstrResultText = TEXT("Text");
rgPe[0].dwFlags = OLEUIPASTE_PASTEONLY;
OLEUIPASTESPECIAL ps;
memset(&ps, 0, sizeof(ps));
ps.cbStruct = sizeof(ps);
ps.dwFlags = IOF_SHOWHELP | PSF_SELECTPASTE;
ps.hWndOwner = _hwnd;
ps.lpszCaption = TEXT("Paste Special");
ps.lpSrcDataObj = lpClipboardDataObj;
ps.arrPasteEntries = rgPe;
ps.cPasteEntries = 1;
ps.lpszCaption = TEXT("Testing OleUIPasteSpecial dialog");
UINT uReturn = OleUIPasteSpecial(&ps);
MessageBoxFromStringIdsAndArgs(
_hwnd,
_hInstance,
IDS_PASTESPECIAL,
IDS_RETURN,
MB_OK,
uReturn,
ps.dwFlags,
ps.nSelectedIndex,
ps.fLink,
ps.sizel);
if (lpClipboardDataObj)
{
lpClipboardDataObj->Release();
}
}
else
{
MessageBoxFromStringIdsAndArgs(
_hwnd,
_hInstance,
IDS_NOCLIPBOARD,
IDS_ERROR,
MB_OK,
hr);
// report failure getting clipboard object
}
}
void CMainWindow::TestEditLinks()
{
OLEUIEDITLINKS el;
memset(&el, 0, sizeof(el));
el.cbStruct = sizeof(el);
el.dwFlags = ELF_SHOWHELP;
el.hWndOwner = _hwnd;
el.lpOleUILinkContainer = &MyOleUILinkContainer;
el.lpszCaption = TEXT("Testing OleUIEditLinks dialog");
UINT uReturn = OleUIEditLinks(&el);
MessageBoxFromStringIdsAndArgs(
_hwnd,
_hInstance,
IDS_EDITLINKS,
IDS_RETURN,
MB_OK,
uReturn,
el.dwFlags);
}
void CMainWindow::TestChangeIcon()
{
OLEUICHANGEICON ci;
memset(&ci, 0, sizeof(ci));
ci.cbStruct = sizeof(ci);
ci.dwFlags = CIF_SHOWHELP | CIF_SELECTCURRENT;
ci.hWndOwner = _hwnd;
ci.lpszCaption = TEXT("Testing OleUIChangeIcon dialog");
UINT uReturn = OleUIChangeIcon(&ci);
MessageBoxFromStringIdsAndArgs(
_hwnd,
_hInstance,
IDS_CHANGEICON,
IDS_RETURN,
MB_OK,
uReturn,
ci.dwFlags);
}
void CMainWindow::TestConvert()
{
OLEUICONVERT cv;
memset(&cv, 0, sizeof(cv));
cv.cbStruct = sizeof(cv);
cv.dwFlags = CF_SHOWHELPBUTTON;
cv.hWndOwner = _hwnd;
cv.lpszCaption = TEXT("Testing OleUIConvert dialog");
UINT uReturn = OleUIConvert(&cv);
MessageBoxFromStringIdsAndArgs(
_hwnd,
_hInstance,
IDS_CONVERT,
IDS_RETURN,
MB_OK,
uReturn,
cv.dwFlags);
}
void CMainWindow::TestCanConvert()
{
CLSID cid = { /* 00030003-0000-0000-c000-000000000046 ("Word Document") */
0x00030003,
0x0000,
0x0000,
{0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
};
BOOL fReturn = OleUICanConvertOrActivateAs(cid, FALSE, CF_TEXT);
MessageBoxFromStringIdsAndArgs(
_hwnd,
_hInstance,
IDS_CANCONVERT,
IDS_RETURN,
MB_OK,
fReturn);
}
void CMainWindow::TestBusy()
{
OLEUIBUSY bz;
memset(&bz, 0, sizeof(bz));
bz.cbStruct = sizeof(bz);
bz.hWndOwner = _hwnd;
bz.lpszCaption = TEXT("Testing OleUIBusy dialog");
UINT uReturn = OleUIBusy(&bz);
MessageBoxFromStringIdsAndArgs(
_hwnd,
_hInstance,
IDS_BUSY,
IDS_RETURN,
MB_OK,
uReturn,
bz.dwFlags);
}
void CMainWindow::TestChangeSource()
{
OLEUICHANGESOURCE cs;
memset(&cs, 0, sizeof(cs));
cs.cbStruct = sizeof(cs);
cs.hWndOwner = _hwnd;
cs.lpszCaption = TEXT("Testing OleUIChangeSource dialog");
UINT uReturn = OleUIChangeSource(&cs);
MessageBoxFromStringIdsAndArgs(
_hwnd,
_hInstance,
IDS_CHANGESOURCE,
IDS_RETURN,
MB_OK,
uReturn,
cs.dwFlags);
}
void CMainWindow::TestObjectProps()
{
OLEUIOBJECTPROPS op;
memset(&op, 0, sizeof(op));
op.cbStruct = sizeof(op);
UINT uReturn = OleUIObjectProperties(&op);
MessageBoxFromStringIdsAndArgs(
_hwnd,
_hInstance,
IDS_OBJECTPROPS,
IDS_RETURN,
MB_OK,
uReturn,
op.dwFlags);
}
void CMainWindow::TestPromptUser(int nTemplate)
{
UINT uReturn = OleUIPromptUser(
nTemplate,
_hwnd,
// string arguments:
TEXT("Testing OleUIPromptUser"),
TEXT("BAR"),
TEXT("FOO"));
MessageBoxFromStringIdsAndArgs(
_hwnd,
_hInstance,
IDS_PROMPTUSER,
IDS_RETURN,
MB_OK,
uReturn);
}
void CMainWindow::TestUpdateLinks()
{
UINT cLinks = 0;
BOOL fReturn = OleUIUpdateLinks(
&MyOleUILinkContainer,
_hwnd,
TEXT("Testing OleUIUpdateLinks dialog"),
cLinks);
MessageBoxFromStringIdsAndArgs(
_hwnd,
_hInstance,
IDS_UPDATELINKS,
IDS_RETURN,
MB_OK,
fReturn);
}
//+---------------------------------------------------------------------------
//
// Function: Exists
//
// Synopsis: simple function to test for the existance of a file
//
// History: 6-16-93 stevebl Created
//
//----------------------------------------------------------------------------
int Exists(TCHAR *sz)
{
HANDLE h;
h = CreateFile(sz,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
0);
if (h != INVALID_HANDLE_VALUE)
{
CloseHandle(h);
return(1);
}
return (0);
}