499 lines
12 KiB
C++
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);
|
||
|
}
|
||
|
|