//+--------------------------------------------------------------------------- // // 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 #include #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); }