Beispiel #1
0
BOOL COleDropTarget::Register(CWnd* pWnd)
{
	ASSERT_VALID(this);
	ASSERT(m_hWnd == NULL);     // registering drop target twice?
	ASSERT_VALID(pWnd);

	LPUNKNOWN lpUnknown = (LPUNKNOWN)GetInterface(&IID_IUnknown);
	ASSERT(lpUnknown != NULL);

	// the object must be locked externally to keep LRPC connections alive
	if (CoLockObjectExternal(lpUnknown, TRUE, FALSE) != S_OK)
		return FALSE;

	// connect the HWND to the IDropTarget implementation
	if (RegisterDragDrop(pWnd->m_hWnd,
		(LPDROPTARGET)GetInterface(&IID_IDropTarget)) != S_OK)
	{
		CoLockObjectExternal(lpUnknown, FALSE, FALSE);
		return FALSE;
	}

	// connect internal data
	m_hWnd = pWnd->m_hWnd;
	ASSERT(pWnd->m_pDropTarget == NULL);
	pWnd->m_pDropTarget = this;

	return TRUE;
}
bool LLDragDropWin32::init( HWND hWnd )
{
	if ( NOERROR != OleInitialize( NULL ) )
		return FALSE; 

	mDropTarget = new LLDragDropWin32Target( hWnd );
	if ( mDropTarget )
	{
		HRESULT result = CoLockObjectExternal( mDropTarget, TRUE, FALSE );
		if ( S_OK == result )
		{
			result = RegisterDragDrop( hWnd, mDropTarget );
			if ( S_OK != result )
			{
				// RegisterDragDrop failed
				return false;
			};

			// all ok
			mDropWindowHandle = hWnd;
		}
		else
		{
			// Unable to lock OLE object
			return false;
		};
	};

	// success
	return true;
}
Beispiel #3
0
void MCStack::stop_externals()
{
	Boolean oldlock = MClockmessages;
	MClockmessages = True;
	MCPlayer *tptr = MCplayers;
	while (tptr != NULL)
	{
		if (tptr->getstack() == this)
		{
			if (tptr->playstop())
				tptr = MCplayers; // was removed, start search over
		}
		else
			tptr = tptr->getnextplayer();
	}

	if (!MCnoui && window != DNULL)
	{
		RevokeDragDrop((HWND)window->handle.window);
		CoLockObjectExternal(droptarget, FALSE, TRUE);
		droptarget->setstack(NULL);
		delete droptarget;
		droptarget = nil;
	}

	destroywindowshape();
	MClockmessages = oldlock;

	unloadexternals();
}
Beispiel #4
0
void QWindowsWindow::registerDropSite()
{
    if (m_data.hwnd && !m_dropTarget) {
        m_dropTarget = new QWindowsOleDropTarget(window());
        RegisterDragDrop(m_data.hwnd, m_dropTarget);
        CoLockObjectExternal(m_dropTarget, true, true);
    }
}
Beispiel #5
0
void QWindowsWindow::unregisterDropSite()
{
    if (m_data.hwnd && m_dropTarget) {
        m_dropTarget->Release();
        CoLockObjectExternal(m_dropTarget, false, true);
        RevokeDragDrop(m_data.hwnd);
        m_dropTarget = 0;
    }
}
void CEdit::DoDragDrop()
{
	int nStartCol, nStartRow, nEndCol, nEndRow;
	ASSERT( !m_Selection.IsEmpty() );
	// Drag and drop does not currently support column selection.  Convert
	// the column selection to a paragraph selection as a fallback.
	if ( m_Selection.IsColumnSel() )
		{
		m_Selection.EnableColumnSel( FALSE );
		DamageSelection( TRUE );
		}
	m_Selection.GetNormalizedBufferSelection( nStartCol, nStartRow, nEndCol, nEndRow );
	HGLOBAL hGlobal;
	if ( m_Buffer.GetText( nStartRow, nStartCol, nEndRow, nEndCol, hGlobal, FALSE ) )
	{
		CDataObject DataObj( hGlobal );

		CDropSource DropSource;
		VERIFY( SUCCEEDED( CoLockObjectExternal( ( LPUNKNOWN ) ( LPVOID ) &DataObj, TRUE, FALSE ) ) );
		VERIFY( SUCCEEDED( CoLockObjectExternal( ( LPUNKNOWN ) &DropSource, TRUE, FALSE ) ) );
		DWORD dwEffect;
		m_bDroppedHere = FALSE;
		if ( ::DoDragDrop( &DataObj, &DropSource, DROPEFFECT_COPY | ( m_Buffer.IsReadOnly() ? 0 : DROPEFFECT_MOVE ), &dwEffect ) == DRAGDROP_S_DROP )
		{
			// text was dropped successfully -- The OnDrop() method of the drop target freed the memory
			// because CDataObject::GetData() set pUnkForRelease = NULL.
			
			// if moved text to another window, delete the selection here
			if ( !m_bDroppedHere && HAS_FLAG( dwEffect, DROPEFFECT_MOVE ) )
			{
				DeleteSelection( FALSE, FALSE );
			}
		}
		else
		{
			// cleanup clip data since target window didn't drop the text
			GlobalFree( hGlobal );
		}
		VERIFY( SUCCEEDED( CoLockObjectExternal( ( LPUNKNOWN ) &DropSource, FALSE, TRUE ) ) );
		VERIFY( SUCCEEDED( CoLockObjectExternal( ( LPUNKNOWN ) ( LPVOID ) &DataObj, FALSE, TRUE ) ) );
		DataObj.Release();
	}
	SetMode( eIdle );
}
void LLDragDropWin32::reset()
{
	if ( mDropTarget )
	{
		RevokeDragDrop( mDropWindowHandle );
		CoLockObjectExternal( mDropTarget, FALSE, TRUE );
		mDropTarget->Release();  
	};
	
	OleUninitialize();
}
Beispiel #8
0
void MCStack::start_externals()
{
	loadexternals();

	if (!MCnoui && window != DNULL)
	{
		droptarget = new CDropTarget;
		droptarget->setstack(this);
		CoLockObjectExternal(droptarget, TRUE, TRUE);
		RegisterDragDrop((HWND)window->handle.window, droptarget);
	}
}
Beispiel #9
0
/***********************************************
  Enables / disables drag and drop for widget w
************************************************/
void qt_olednd_unregister( QWidget* widget, QOleDropTarget *dst )
{
#ifdef DEBUG_QDND_WIN
    qDebug("qt_olednd_unregister( %p ) winID: %08x", widget, widget ? widget->winId() : 0 );
#endif
    dst->releaseQt();
    dst->Release();
#ifndef Q_OS_TEMP

    CoLockObjectExternal( dst, false, true );
    RevokeDragDrop( widget->winId() );
#endif
}
Beispiel #10
0
QOleDropTarget* qt_olednd_register( QWidget* widget )
{
#ifdef DEBUG_QDND_WIN
    qDebug("qt_olednd_register( %p ) winID: %08x", widget, widget ? widget->winId() : 0 );
#endif
    QOleDropTarget * dst = new QOleDropTarget( widget );
#ifndef Q_OS_TEMP

    HRESULT ret = RegisterDragDrop( widget->winId(), dst );
#ifdef DEBUG_QDND_WIN
    qDebug("ret RegisterDragDrop = %x", ret );
#endif
    CoLockObjectExternal( dst, true, true );
#endif

    return dst;
}
Beispiel #11
0
void COleDropTarget::Revoke()
{
	ASSERT_VALID(this);
	ASSERT(m_lpDataObject == NULL);

	if (m_hWnd == NULL)
	{
		ASSERT(m_nTimerID == 0xffff);
		return;
	}

	// disconnect from OLE
	RevokeDragDrop(m_hWnd);
	CoLockObjectExternal((LPUNKNOWN)GetInterface(&IID_IUnknown), FALSE, TRUE);

	// disconnect internal data
	CWnd::FromHandle(m_hWnd)->m_pDropTarget = NULL;
	m_hWnd = NULL;
}
Beispiel #12
0
static BOOL CALLBACK 
sSplitKeyDlgProc (HWND hDlg, 
				 UINT uMsg, 
				 WPARAM wParam, 
				 LPARAM lParam) 
{
	PSPLITKEYSTRUCT		psks;
	CHAR				sz[8];
	NMHDR*				pnmh;
	UINT				u;

	switch (uMsg) {

	case WM_INITDIALOG :
	{
		CHAR	szTitle[kPGPMaxUserIDSize + 32];

		// save address of struct
		SetWindowLong (hDlg, GWL_USERDATA, lParam);
		psks = (PSPLITKEYSTRUCT)lParam;
		psks->hwndDlg = hDlg;

		// if we have a function to call to add hwnd to list, then call it
		if (psks->pKM->lpfnHwndListFunc) 
			(psks->pKM->lpfnHwndListFunc)(hDlg, TRUE, NULL, NULL);

		// initialize shareholder list
		psks->hwndList = GetDlgItem (hDlg, IDC_SHAREHOLDERS);
		sInitKeyList (psks);

		// initialize name of key to split
		SetDlgItemText (hDlg, IDC_KEYTOSPLIT, psks->szUserIDToSplit);
		LoadString (g_hInst, IDS_SPLITKEYTITLE, szTitle, sizeof(szTitle));
		lstrcat (szTitle, psks->szUserIDToSplit);
		SetWindowText (hDlg, szTitle);

		// limit number of shares
		SendDlgItemMessage (hDlg, IDC_SHARES, EM_SETLIMITTEXT, 
				(WPARAM)MAX_SHARES_LEN, 0);
		SendDlgItemMessage (hDlg, IDC_THRESHOLD, EM_SETLIMITTEXT, 
				(WPARAM)MAX_SHARES_LEN, 0);

		// initialize spin controls 
		SendDlgItemMessage (hDlg, IDC_SHARESSPIN, UDM_SETRANGE,
				0, (LPARAM)MAKELONG (MAX_SHARES, 1));
		SetDlgItemText (hDlg, IDC_SHARES, "");
		EnableWindow (GetDlgItem (hDlg, IDC_SHARES), FALSE);

		SendDlgItemMessage (hDlg, IDC_THRESHOLDSPIN, UDM_SETRANGE,
				0, (LPARAM)MAKELONG (MAX_SHARES, 1));
		SendDlgItemMessage (hDlg, IDC_THRESHOLDSPIN, UDM_SETPOS,
				0, (LPARAM)MAKELONG (psks->uThreshold, 0));

		// initialize total number of shares
		SetDlgItemInt (hDlg, IDC_TOTALSHARES, psks->uTotalShares, FALSE);

		// "split key" and "remove" buttons initially disabled
		EnableWindow (GetDlgItem (hDlg, IDC_REMOVESHAREHOLDER), FALSE);
		EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);

		// initialize drag/drop
		psks->pDropTarget = KMCreateDropTarget (psks->hwndList, NULL, psks); 
		CoLockObjectExternal ((IUnknown*)psks->pDropTarget, TRUE, TRUE);
		RegisterDragDrop (psks->hwndList, psks->pDropTarget);
		KMEnableDropTarget (psks->pDropTarget, TRUE);

		return TRUE;
	}

	case WM_HELP: 
	{
	    WinHelp (((LPHELPINFO) lParam)->hItemHandle, g_szHelpFile, 
	        HELP_WM_HELP, (DWORD) (LPSTR) aSplitIds); 
	    break; 
	}

	case WM_CONTEXTMENU: 
	{
		WinHelp ((HWND) wParam, g_szHelpFile, HELP_CONTEXTMENU, 
		    (DWORD) (LPVOID) aSplitIds); 
		break; 
	}

	case WM_NOTIFY :
		pnmh = (NMHDR*)lParam;
		switch (pnmh->code) {

		case NM_CLICK :
		case LVN_KEYDOWN :
			if (pnmh->idFrom == IDC_SHAREHOLDERS) {
				INT		iIndex;

				psks = (PSPLITKEYSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
				iIndex = 
					ListView_GetNextItem (psks->hwndList, -1, LVNI_SELECTED);
				if (iIndex > -1) {
					LV_ITEM				lvI;
					PSHAREHOLDERSTRUCT	pshs;

					lvI.mask = LVIF_PARAM;
					lvI.iItem = iIndex;
					lvI.iSubItem = 0;
					ListView_GetItem(psks->hwndList, &lvI);

					pshs = (PSHAREHOLDERSTRUCT)lvI.lParam;
					psks->pshsCurrent = pshs;
					psks->iIndexCurrent = iIndex;

					SetDlgItemText (hDlg, IDC_CURRENTSHAREHOLDER, 
														pshs->szUserID);
					SendDlgItemMessage (hDlg, IDC_SHARESSPIN, UDM_SETPOS,
								0, (LPARAM)MAKELONG (pshs->uShares, 0));

					EnableWindow (GetDlgItem (hDlg, IDC_SHARES), TRUE);
					EnableWindow (GetDlgItem (hDlg, IDC_SHARESSPIN), TRUE);
					EnableWindow (
						GetDlgItem (hDlg, IDC_REMOVESHAREHOLDER), TRUE);
				}
				else {
					psks->iIndexCurrent = -1;
					psks->pshsCurrent = NULL;
					SetDlgItemText (hDlg, IDC_SHARES, "");
					SetDlgItemText (hDlg, IDC_CURRENTSHAREHOLDER, "");
					EnableWindow (GetDlgItem (hDlg, IDC_SHARES), FALSE);
					EnableWindow (
						GetDlgItem (hDlg, IDC_REMOVESHAREHOLDER), FALSE);
				}
			}
			break;
		}
		break;

	case WM_DESTROY :
		psks = (PSPLITKEYSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);

		// terminate drag/drop
		RevokeDragDrop (psks->hwndList);
		KMReleaseDropTarget (psks->pDropTarget);  
		CoLockObjectExternal ((IUnknown*)psks->pDropTarget, FALSE, TRUE);

		// call function to remove hwnd from list
		if (psks->pKM->lpfnHwndListFunc) 
			(psks->pKM->lpfnHwndListFunc)(hDlg, FALSE, NULL, NULL);

		// destroy data objects
		ImageList_Destroy (psks->hIml);
		sDestroyShareHolders (psks);
		sDestroySplitKeyStruct (psks);
		break;

	case WM_COMMAND:

		switch (LOWORD(wParam)) {
		case IDCANCEL :
			DestroyWindow (hDlg);
			break;

		case IDOK :
			psks = (PSPLITKEYSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			EnableWindow (psks->pKM->hWndParent, FALSE);
			if (sSplitKey (psks)) 
			{
				EnableWindow (psks->pKM->hWndParent, TRUE);
				DestroyWindow (hDlg);
			}
			else
				EnableWindow (psks->pKM->hWndParent, TRUE);
			break;

		case IDHELP :
			psks = (PSPLITKEYSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			WinHelp (hDlg, psks->pKM->szHelpFile, HELP_CONTEXT, 
						IDH_PGPCLSPLIT_SPLITDIALOG); 
			break;

		case IDC_ADDSHAREHOLDER :
			psks = (PSPLITKEYSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			EnableWindow (psks->pKM->hWndParent, FALSE);
			sAddShareHolderToList (hDlg, psks);
			EnableWindow (psks->pKM->hWndParent, TRUE);
			SetFocus (GetDlgItem (hDlg, IDC_ADDSHAREHOLDER));
			break;

		case IDC_REMOVESHAREHOLDER :
			psks = (PSPLITKEYSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			sRemoveShareHolderFromList (hDlg, psks);
			psks->iIndexCurrent = -1;
			psks->pshsCurrent = NULL;
			SetDlgItemText (hDlg, IDC_SHARES, "");
			SetDlgItemText (hDlg, IDC_CURRENTSHAREHOLDER, "");
			EnableWindow (GetDlgItem (hDlg, IDC_SHARES), FALSE);
			EnableWindow (GetDlgItem (hDlg, IDC_REMOVESHAREHOLDER), FALSE);
			break;

		case IDC_THRESHOLD :
			switch (HIWORD(wParam)) {
			case EN_CHANGE :
				psks = (PSPLITKEYSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
				if (psks) {
					GetDlgItemText (hDlg, IDC_THRESHOLD, sz, sizeof(sz));
					if (lstrcmp (sz, "0")) {
						UINT u = 
							GetDlgItemInt (hDlg, IDC_THRESHOLD, NULL, FALSE);
						if (u != 0) {
							psks->uThreshold = u;
							if (psks->uTotalShares >= psks->uThreshold)
								EnableWindow (GetDlgItem (hDlg, IDOK), TRUE);
							else
								EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);
						}
					}
				}
				break;

			case EN_KILLFOCUS :
				u = GetDlgItemInt (hDlg, IDC_THRESHOLD, NULL, FALSE);
				if (u == 0) u = 1;
				SetDlgItemInt (hDlg, IDC_THRESHOLD, u, FALSE);
				break;
			}
			break;

		case IDC_SHARES :
			psks = (PSPLITKEYSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			switch (HIWORD(wParam)) {
			case EN_CHANGE :
				if (psks) {
					PSHAREHOLDERSTRUCT	pshs;
					GetDlgItemText (hDlg, IDC_SHARES, sz, sizeof(sz));
					pshs = psks->pshsCurrent;
					if (pshs && (lstrcmp (sz, "0"))) {
						UINT u = 
							GetDlgItemInt (hDlg, IDC_SHARES, NULL, FALSE);
						if (u != 0) {
							psks->uTotalShares -= pshs->uShares;
							pshs->uShares = u;
							psks->uTotalShares += pshs->uShares;
							SetDlgItemInt (hDlg, IDC_TOTALSHARES, 
											psks->uTotalShares, FALSE);

							wsprintf (sz, "%i", pshs->uShares);
							ListView_SetItemText (psks->hwndList, 
										psks->iIndexCurrent, 1, sz);

							if ((psks->uTotalShares >= psks->uThreshold) &&
								(psks->uTotalShares <= MAX_TOTAL_SHARES))
								EnableWindow (GetDlgItem (hDlg, IDOK), TRUE);
							else
								EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);
						}
					}
				}
				break;

			case EN_KILLFOCUS :
				u = GetDlgItemInt (hDlg, IDC_SHARES, NULL, FALSE);
				if (u == 0) {
					u = 1;
					MessageBeep (MB_ICONASTERISK);
				}
				else if (psks->uTotalShares-psks->pshsCurrent->uShares+u > 
														MAX_TOTAL_SHARES) {
					u = MAX_TOTAL_SHARES - (psks->uTotalShares - 
												psks->pshsCurrent->uShares);
					MessageBeep (MB_ICONASTERISK);
				}

				SetDlgItemInt (hDlg, IDC_SHARES, u, FALSE);
				break;
			}
			break;
		}
		return TRUE;
	}
	return FALSE;
}
	void Win32DropTarget::unregisterWithOS()
	{
		RevokeDragDrop(mHWnd);
		CoLockObjectExternal(this, FALSE, FALSE);
	}
		IFACEMETHODIMP LockServer(BOOL fLock) final
		{
			CoLockObjectExternal(this, fLock, TRUE);
			return S_OK;
		}
Beispiel #15
0
// MW-2006-03-20: Bug 3316 - There seems absolutely no way of preventing flicker
//   when transitioning from no alpha to alpha. Therefore, we need to create a new
//   window opened *behind* the current window; show it; redraw it; then delete
//   the existing window.
void MCStack::setopacity(uint1 p_level)
{
	// If the stack is not ours to open, then we do nothing ('runtime' mode/remoteable
	// window).
	if (!MCModeMakeLocalWindows())
		return;

	// Do nothing if not NT
	if (MCmajorosversion < 0x0500)
		return;

	if (m_window_shape != NULL && !m_window_shape -> is_sharp)
		composite();
	else if (window != NULL)
	{
		HWND t_old_window;
		t_old_window = NULL;

		DWORD t_old_long, t_new_long;
		t_old_long = GetWindowLong((HWND)window -> handle . window, GWL_EXSTYLE);

		if (p_level == 255)
			t_new_long = t_old_long & ~WS_EX_LAYERED;
		else
			t_new_long = t_old_long | WS_EX_LAYERED;

		if (t_new_long != t_old_long)
		{
			if (IsWindowVisible((HWND)window -> handle . window) && (t_new_long & WS_EX_LAYERED) != 0)
				t_old_window = (HWND)window -> handle . window;
			else
				SetWindowLong((HWND)window -> handle . window, GWL_EXSTYLE, t_new_long);
		}

		if (t_old_window != NULL)
		{
			uint32_t t_style, t_ex_style;
			getstyle(t_style, t_ex_style);

			// MW-2006-07-27: [[ Bug 3690 ]] - Make sure layered attribute is set if we need it
			t_ex_style = (t_ex_style & ~WS_EX_LAYERED) | (t_new_long & WS_EX_LAYERED);

			RECT t_rect;
			t_rect = getwrect(rect, t_style, t_ex_style);

			Bool t_is_xp_menu;
			t_is_xp_menu = (mode == WM_PULLDOWN || mode == WM_POPUP || mode == WM_CASCADE) && (MCcurtheme && MCcurtheme->getthemeid() == LF_NATIVEWIN);

			if (!t_is_xp_menu && mode < WM_PULLDOWN)
				window -> handle . window = (MCSysWindowHandle)CreateWindowExW(t_ex_style, MC_WIN_CLASS_NAME_W, WideCString(getname_cstring()), t_style | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, t_rect . left, t_rect . top, t_rect . right - t_rect . left, t_rect . bottom - t_rect . top, NULL, NULL, MChInst, NULL);
			else
				window -> handle . window = (MCSysWindowHandle)CreateWindowExA(t_ex_style, t_is_xp_menu ? MC_MENU_WIN_CLASS_NAME : mode >= WM_PULLDOWN ? MC_POPUP_WIN_CLASS_NAME : MC_WIN_CLASS_NAME, getname_cstring(), t_style | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, t_rect . left, t_rect . top, t_rect . right - t_rect . left, t_rect . bottom - t_rect . top, NULL, NULL, MChInst, NULL);
			
			// MW-2010-10-22: [[ Bug 8151 ]] Make sure we update the title string.
			if (titlestring != nil)
				MCscreen -> setname(window, titlestring);

			SetWindowLongA((HWND)window->handle.window, GWL_USERDATA, mode);
			
			if (flags & F_DECORATIONS && !(decorations & WD_SHAPE) && !(decorations & WD_CLOSE))
				EnableMenuItem(GetSystemMenu((HWND)window->handle.window, False), SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
		
			if (m_window_shape != nil && m_window_shape -> is_sharp)
			{
				MCRegionRef t_region;
				t_region = (MCRegionRef)m_window_shape -> handle;
				MCRegionOffset(t_region, rect . x - t_rect . left, rect . y - t_rect . top);
				MCRegionSetAsWindowShape(t_region, window->handle.window);

				// The window now owns the region.
				m_window_shape -> handle = nil;
			}

			RevokeDragDrop(t_old_window);
			CoLockObjectExternal(droptarget, FALSE, TRUE);
			droptarget -> setstack(NULL);

			droptarget -> setstack(this);
			CoLockObjectExternal(droptarget, TRUE, TRUE);
			RegisterDragDrop((HWND)window -> handle . window, droptarget);

			SetWindowPos((HWND)window -> handle . window, t_old_window, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOREDRAW | SWP_NOSENDCHANGING | SWP_NOSIZE | SWP_SHOWWINDOW);

			MCPlayer *t_player;
			for(t_player = MCplayers; t_player != NULL; t_player = t_player -> getnextplayer())
				if (t_player -> getstack() == this)
					t_player -> changewindow((MCSysWindowHandle)t_old_window);
		}

		if (p_level < 255)
			SetLayeredWindowAttributes((HWND)window -> handle . window, 0, p_level, LWA_ALPHA);

		if (t_old_window != NULL)
		{
			RedrawWindow((HWND)window -> handle . window, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_UPDATENOW);
			DestroyWindow(t_old_window);
		}
	}
}
	void Win32DropTarget::registerWithOS()
	{
		CoLockObjectExternal(this, TRUE, FALSE);
		RegisterDragDrop(mHWnd, this);
	}
CDataObject::~CDataObject()
{
	VERIFY( SUCCEEDED( CoLockObjectExternal( ( LPUNKNOWN ) &m_XEnumFORMATETC, FALSE, TRUE ) ) );
}
STDMETHODIMP
tLuaCOMClassFactory::LockServer(BOOL fLock)
{    
  CoLockObjectExternal(object, fLock, TRUE); 
  return NOERROR;       
}
CDataObject::CDataObject( HGLOBAL hGlobal )
{
	m_hGlobal = hGlobal;
	m_XEnumFORMATETC.SetOuterUnknown( this );
	VERIFY( SUCCEEDED( CoLockObjectExternal( ( LPUNKNOWN ) ( LPVOID ) &m_XEnumFORMATETC, TRUE, FALSE ) ) );
}