summaryrefslogtreecommitdiffstats
path: root/private/oleutest/simpdnd/simpdnd.cpp
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/oleutest/simpdnd/simpdnd.cpp
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'private/oleutest/simpdnd/simpdnd.cpp')
-rw-r--r--private/oleutest/simpdnd/simpdnd.cpp502
1 files changed, 502 insertions, 0 deletions
diff --git a/private/oleutest/simpdnd/simpdnd.cpp b/private/oleutest/simpdnd/simpdnd.cpp
new file mode 100644
index 000000000..b70a99e30
--- /dev/null
+++ b/private/oleutest/simpdnd/simpdnd.cpp
@@ -0,0 +1,502 @@
+//**********************************************************************
+// File name: Simple.cpp
+//
+// Main source file for the Simple OLE 2.0 object container
+//
+// Functions:
+//
+// WinMain - Program entry point
+// MainWndProc - Processes messages for the frame window
+// About - Processes messages for the about dialog
+// DocWndProc - Processes messages for the doc window
+//
+// Copyright (c) 1992 - 1993 Microsoft Corporation. All rights reserved.
+//**********************************************************************
+
+#include "pre.h"
+#include "iocs.h"
+#include "ias.h"
+#include "app.h"
+#include "site.h"
+#include "doc.h"
+#include <stdlib.h>
+#include <testmess.h>
+#include "tests.h"
+
+
+// This line is needed for the debug utilities in OLE2UI
+extern "C" {
+ OLEDBGDATA_MAIN(TEXT("SIMPDND"))
+}
+
+CSimpleApp FAR * lpCSimpleApp;
+BOOL fBeVerbose = FALSE;
+extern "C"
+void TestDebugOut(LPSTR psz)
+{
+ if (fBeVerbose)
+ {
+ OutputDebugStringA(psz);
+ }
+}
+
+BOOL gfUseEmptyEnumerator;
+
+
+//**********************************************************************
+//
+// WinMain
+//
+// Purpose:
+//
+// Program entry point
+//
+// Parameters:
+//
+// HANDLE hInstance - Instance handle for this instance
+//
+// HANDLE hPrevInstance - Instance handle for the last instance
+//
+// LPSTR lpCmdLine - Pointer to the command line
+//
+// int nCmdShow - Window State
+//
+// Return Value:
+//
+// msg.wParam or FALSE if failure to initialize
+//
+// Function Calls:
+// Function Location
+//
+// CSimpleApp::CSimpleApp APP.CPP
+// CSimpleApp::fInitApplication APP.CPP
+// CSimpleApp::fInitInstance APP.CPP
+// CSimpleApp::~CSimpleApp APP.CPP
+// CSimpleApp::AddRef APP.CPP
+// CSimpleApp::Release APP.CPP
+// OleUIInitialize OLE2UI
+// OleUIUninitialize OLE2UI
+// GetMessage Windows API
+// SetMessageQueue Windows API
+// MessageBox Windows API
+// TranslateMessage Windows API
+// DispatchMessage Windows API
+//
+//
+//********************************************************************
+
+int PASCAL WinMain
+#ifdef WIN32
+ (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
+ int nCmdShow)
+#else
+ (HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
+#endif
+{
+ MSG msg;
+ LPSTR pszTemp;
+ fBeVerbose = GetProfileInt("OLEUTEST","BeVerbose",0);
+
+ if(fBeVerbose == 0)
+ {
+ fBeVerbose = GetProfileInt("OLEUTEST","simpdnd",0);
+ }
+
+ // needed for LRPC to work properly...
+ SetMessageQueue(96);
+
+ lpCSimpleApp = new CSimpleApp;
+
+
+ if (!lpCSimpleApp)
+ {
+ /* memory allocation problem. We cannot carry on.
+ */
+ MessageBox(NULL, TEXT("Out of Memory"), TEXT("SimpDnD"),
+ MB_SYSTEMMODAL | MB_ICONHAND);
+ return(FALSE);
+ }
+
+ // we will add one ref count on our App. later when we want to destroy
+ // the App object we will release this ref count. when the App's ref
+ // count goes to 0, it will be deleted.
+ lpCSimpleApp->AddRef();
+
+ // process the command line
+
+ if( (pszTemp = strstr(lpCmdLine, "-driver")) )
+ {
+ //we were launched by the test driver
+ lpCSimpleApp->m_hDriverWnd = (HWND)strtoul(pszTemp+8, NULL, 10);
+ }
+
+ // check for the -empty flag (use empty enumerator)
+ if( strstr(lpCmdLine, "-empty") )
+ {
+ gfUseEmptyEnumerator = TRUE;
+ }
+
+ // app initialization
+ if (!hPrevInstance)
+ if (!lpCSimpleApp->fInitApplication(hInstance))
+ {
+ lpCSimpleApp->Release();
+ return (FALSE);
+ }
+
+ // instance initialization
+ if (!lpCSimpleApp->fInitInstance(hInstance, nCmdShow))
+ {
+ lpCSimpleApp->Release();
+ return (FALSE);
+ }
+
+#if 0
+ /* Initialization required for OLE 2 UI library. This call is
+ ** needed ONLY if we are using the static link version of the UI
+ ** library. If we are using the DLL version, we should NOT call
+ ** this function in our application.
+ */
+
+ if (!OleUIInitialize(hInstance, hPrevInstance, TEXT(SZCLASSICONBOX),
+ TEXT(SZCLASSRESULTIMAGE)))
+ {
+ OleDbgOut(TEXT("Could not initialize OLEUI library\n"));
+ lpCSimpleApp->Release();
+ return FALSE;
+ }
+#endif
+ // message loop
+ while (GetMessage(&msg, NULL, NULL, NULL))
+ if (!lpCSimpleApp->HandleAccelerators(&msg))
+ {
+ TranslateMessage(&msg); /* Translates virtual key codes */
+ DispatchMessage(&msg); /* Dispatches message to window */
+ }
+
+#if 0
+ // De-initialization for UI libraries. Just like OleUIInitialize, this
+ // funciton is needed ONLY if we are using the static link version of the
+ // OLE UI library.
+ OleUIUninitialize();
+#endif
+
+ // Release the ref count added on the App above. this will make
+ // the App's ref count go to 0, and the App object will be deleted.
+ lpCSimpleApp->Release();
+
+ return (msg.wParam); /* Returns the value from PostQuitMessage */
+}
+
+
+//**********************************************************************
+//
+// MainWndProc
+//
+// Purpose:
+//
+// Processes messages for the frame window
+//
+// Parameters:
+//
+// HWND hWnd - Window handle for frame window
+//
+// UINT message - Message value
+//
+// WPARAM wParam - Message info
+//
+// LPARAM lParam - Message info
+//
+// Return Value:
+//
+// long
+//
+// Function Calls:
+// Function Location
+//
+// CSimpleApp::lCommandHandler APP.CPP
+// CSimpleApp::DestroyDocs APP.CPP
+// CSimpleApp::lCreateDoc APP.CPP
+// CSimpleApp::lSizeHandler APP.CPP
+// CSimpleDoc::lAddVerbs DOC.CPP
+// PostQuitMessage Windows API
+// DefWindowProc Windows API
+// DestroyWindow Windows API
+//
+//
+//********************************************************************
+
+long FAR PASCAL EXPORT MainWndProc(HWND hWnd, UINT message,
+ WPARAM wParam, LPARAM lParam)
+{
+
+ switch (message)
+ {
+ case WM_TEST2:
+ StartTest2(lpCSimpleApp);
+ break;
+ case WM_TEST1:
+ StartTest1(lpCSimpleApp);
+ break;
+ case WM_CLOSE:
+ DestroyWindow(lpCSimpleApp->m_hAppWnd);
+ break;
+
+ case WM_COMMAND: // message: command from application menu
+ return lpCSimpleApp->lCommandHandler(hWnd, message, wParam,
+ lParam);
+ break;
+
+ case WM_CREATE:
+#ifdef NOTREADY
+ RemoveMenu(GetSubMenu(GetMenu(hWnd), 1), 0, MF_BYPOSITION);
+#endif // NOTREADY
+ return lpCSimpleApp->lCreateDoc(hWnd, message, wParam, lParam);
+ break;
+
+ case WM_DESTROY: // message: window being destroyed
+ lpCSimpleApp->DestroyDocs(); // need to destroy the doc...
+ PostQuitMessage(0);
+ break;
+
+ case WM_INITMENUPOPUP:
+ // is this the edit menu?
+ if ( LOWORD(lParam) == 1)
+ return lpCSimpleApp->m_lpDoc->lAddVerbs();
+ break;
+
+ case WM_SIZE:
+ return lpCSimpleApp->lSizeHandler(hWnd, message, wParam, lParam);
+
+ default: // Passes it on if unproccessed
+ return (DefWindowProc(hWnd, message, wParam, lParam));
+ }
+ return (NULL);
+}
+
+
+//**********************************************************************
+//
+// About
+//
+// Purpose:
+//
+// Processes dialog box messages
+//
+// Parameters:
+//
+// HWND hWnd - Window handle for dialog box
+//
+// UINT message - Message value
+//
+// WPARAM wParam - Message info
+//
+// LPARAM lParam - Message info
+//
+// Return Value:
+//
+// Function Calls:
+// Function Location
+//
+// EndDialog Windows API
+//
+//
+//********************************************************************
+BOOL
+#ifdef WIN32
+ CALLBACK
+#else
+ FAR PASCAL EXPORT
+#endif
+ About(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
+
+{
+ switch (message)
+ {
+ case WM_INITDIALOG: /* message: initialize dialog box */
+ return (TRUE);
+
+ case WM_COMMAND: /* message: received a command */
+ if (wParam == IDOK /* "OK" box selected? */
+ || wParam == IDCANCEL) /* System menu close command? */
+ {
+ EndDialog(hDlg, TRUE); /* Exits the dialog box */
+ return (TRUE);
+ }
+ break;
+ }
+
+ return (FALSE); /* Didn't process a message */
+}
+
+//**********************************************************************
+//
+// DocWndProc
+//
+// Purpose:
+//
+// Processes dialog box messages
+//
+// Parameters:
+//
+// HWND hWnd - Window handle for doc window
+//
+// UINT message - Message value
+//
+// WPARAM wParam - Message info
+//
+// LPARAM lParam - Message info
+//
+// Return Value:
+//
+// long
+//
+// Function Calls:
+// Function Location
+//
+// CSimpleApp::PaintApp APP.CPP
+// BeginPaint Windows API
+// EndPaint Windows API
+// DefWindowProc Windows API
+// IOleObject::DoVerb Object
+// CSimpleSite::GetObjRect SITE.CPP
+// CSimpleDoc::QueryDrag DOC.CPP
+// CSimpleDoc::DoDragDrop DOC.CPP
+// SetTimer Windows API
+// KillTimer Windows API
+// SetCapture Windows API
+// ReleaseCapture Windows API
+//
+//
+//********************************************************************
+
+long FAR PASCAL EXPORT DocWndProc(HWND hWnd, UINT message, WPARAM wParam,
+ LPARAM lParam)
+{
+ HDC hDC;
+ PAINTSTRUCT ps;
+
+ switch (message)
+ {
+ case WM_PAINT:
+
+ hDC = BeginPaint(hWnd, &ps);
+
+ if (lpCSimpleApp)
+ lpCSimpleApp->PaintApp (hDC);
+
+ EndPaint(hWnd, &ps);
+ break;
+
+ case WM_LBUTTONDBLCLK:
+ {
+ POINT pt;
+
+ pt.x = (int)(short)LOWORD (lParam );
+ pt.y = (int)(short)HIWORD (lParam );
+
+ if (lpCSimpleApp->m_lpDoc->m_lpSite &&
+ lpCSimpleApp->m_lpDoc->m_lpSite->m_lpOleObject)
+ {
+ RECT rect;
+
+ lpCSimpleApp->m_lpDoc->m_lpSite->GetObjRect(&rect);
+
+ if ( PtInRect(&rect, pt) )
+ {
+ // Execute object's default verb
+ lpCSimpleApp->m_lpDoc->m_lpSite->m_lpOleObject->DoVerb(
+ OLEIVERB_PRIMARY, (LPMSG)&message,
+ &lpCSimpleApp->m_lpDoc->m_lpSite->m_OleClientSite,
+ -1, hWnd, &rect);
+ }
+ }
+ break;
+ }
+
+ case WM_LBUTTONDOWN:
+ {
+ POINT pt;
+
+ pt.x = (int)(short)LOWORD (lParam );
+ pt.y = (int)(short)HIWORD (lParam );
+
+ /* OLE2NOTE: check if this is a button down on the region
+ ** that is a handle to start a drag operation. for us,
+ ** this this is any where in the window. we
+ ** do NOT want to start a drag immediately; we want to
+ ** wait until the mouse moves a certain threshold. or a
+ ** certain amount of time has elapsed. if
+ ** LButtonUp comes before the drag is started, then
+ ** the fPendingDrag state is cleared. we must capture
+ ** the mouse to ensure the modal state is handled
+ ** properly.
+ */
+ if (lpCSimpleApp->m_lpDoc->QueryDrag(pt) )
+ {
+ lpCSimpleApp->m_lpDoc->m_fPendingDrag = TRUE;
+ lpCSimpleApp->m_lpDoc->m_ptButDown = pt;
+ SetTimer(hWnd, 1, lpCSimpleApp->m_nDragDelay, NULL);
+ SetCapture(hWnd);
+ }
+ break;
+ }
+
+ case WM_LBUTTONUP:
+
+ if (lpCSimpleApp->m_lpDoc->m_fPendingDrag)
+ {
+ /* ButtonUP came BEFORE distance/time threshholds were
+ ** exceeded. clear fPendingDrag state.
+ */
+ ReleaseCapture();
+ KillTimer(hWnd, 1);
+ lpCSimpleApp->m_lpDoc->m_fPendingDrag = FALSE;
+ }
+ break;
+
+ case WM_MOUSEMOVE:
+ {
+ if (lpCSimpleApp->m_lpDoc->m_fPendingDrag)
+ {
+ int x = (int)(short)LOWORD (lParam );
+ int y = (int)(short)HIWORD (lParam );
+ POINT pt = lpCSimpleApp->m_lpDoc->m_ptButDown;
+ int nDragMinDist = lpCSimpleApp->m_nDragMinDist;
+
+ if (! ( ((pt.x - nDragMinDist) <= x)
+ && (x <= (pt.x + nDragMinDist))
+ && ((pt.y - nDragMinDist) <= y)
+ && (y <= (pt.y + nDragMinDist)) ) )
+ {
+ // mouse moved beyond threshhold to start drag
+ ReleaseCapture();
+ KillTimer(hWnd, 1);
+ lpCSimpleApp->m_lpDoc->m_fPendingDrag = FALSE;
+
+ // perform the modal drag/drop operation.
+ lpCSimpleApp->m_lpDoc->DoDragDrop( );
+ }
+ }
+ break;
+ }
+
+ case WM_TIMER:
+ {
+ // drag time delay threshhold exceeded -- start drag
+ ReleaseCapture();
+ KillTimer(hWnd, 1);
+ lpCSimpleApp->m_lpDoc->m_fPendingDrag = FALSE;
+
+ // perform the modal drag/drop operation.
+ lpCSimpleApp->m_lpDoc->DoDragDrop( );
+ break;
+ }
+
+ default: /* Passes it on if unproccessed */
+ return (DefWindowProc(hWnd, message, wParam, lParam));
+ }
+ return (NULL);
+}
+
+