summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTino Rachui <tra@openoffice.org>2000-11-13 07:35:30 +0000
committerTino Rachui <tra@openoffice.org>2000-11-13 07:35:30 +0000
commit022b0adacc31135789e9eff62982758dbf5783a8 (patch)
treefed7498906f9595f5b3fa5a3b5ffac928200a188
parent9b2abae9e1dba2cfe8fa6a204f9b03b0f0ea5b9e (diff)
*** empty log message ***
-rw-r--r--sal/workben/clipboardwben/testcopy/XTDataObject.cxx42
-rw-r--r--sal/workben/clipboardwben/testcopy/XTDataObject.hxx8
-rw-r--r--sal/workben/clipboardwben/testcopy/cbcpytest.cxx242
-rw-r--r--sal/workben/clipboardwben/testcopy/cbcpytest.rc2
-rw-r--r--sal/workben/clipboardwben/testcopy/resource.h4
5 files changed, 172 insertions, 126 deletions
diff --git a/sal/workben/clipboardwben/testcopy/XTDataObject.cxx b/sal/workben/clipboardwben/testcopy/XTDataObject.cxx
index b2348ec6bb81..947ffe0f417a 100644
--- a/sal/workben/clipboardwben/testcopy/XTDataObject.cxx
+++ b/sal/workben/clipboardwben/testcopy/XTDataObject.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: XTDataObject.cxx,v $
*
- * $Revision: 1.1 $
+ * $Revision: 1.2 $
*
- * last change: $Author: tra $ $Date: 2000-10-19 08:53:23 $
+ * last change: $Author: tra $ $Date: 2000-11-13 08:34:09 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -88,8 +88,8 @@
// ctor
//------------------------------------------------------------------------
-CXTDataObject::CXTDataObject( ) :
- m_nRefCnt( 0 )
+CXTDataObject::CXTDataObject( LONG nRefCntInitVal ) :
+ m_nRefCnt( nRefCntInitVal )
{
}
@@ -169,7 +169,7 @@ STDMETHODIMP CXTDataObject::GetData(LPFORMATETC pFormatetc, LPSTGMEDIUM pmedium
if ( ( NULL == pFormatetc ) || ( NULL == pmedium ) )
return E_INVALIDARG;
- HRESULT hr = S_OK;
+ HRESULT hr = E_FAIL;
if ( CF_TEXT == pFormatetc->cfFormat )
{
@@ -191,6 +191,34 @@ STDMETHODIMP CXTDataObject::GetData(LPFORMATETC pFormatetc, LPSTGMEDIUM pmedium
pmedium->pUnkForRelease = NULL;
}
lpStream->Release( );
+ hr = S_OK;
+ }
+ else
+ {
+ pmedium->tymed = TYMED_NULL;
+ }
+ }
+ else if ( CF_UNICODETEXT == pFormatetc->cfFormat )
+ {
+ WCHAR buff[] = L"Hello World, How are you!";
+ LPSTREAM lpStream;
+
+ hr = CreateStreamOnHGlobal( NULL, FALSE, &lpStream );
+ if ( SUCCEEDED( hr ) )
+ {
+ hr = lpStream->Write( buff, sizeof( buff ) * sizeof( WCHAR ), NULL );
+ if ( SUCCEEDED( hr ) )
+ {
+ HGLOBAL hGlob;
+
+ GetHGlobalFromStream( lpStream, &hGlob );
+
+ pmedium->tymed = TYMED_HGLOBAL;
+ pmedium->hGlobal = hGlob;
+ pmedium->pUnkForRelease = NULL;
+ }
+ lpStream->Release( );
+ hr = S_OK;
}
else
{
@@ -311,8 +339,8 @@ CEnumFormatEtc::CEnumFormatEtc( LPUNKNOWN pUnkDataObj ) :
m_pUnkDataObj( pUnkDataObj ),
m_nCurrentPos( 0 )
{
- m_cfFormats[0] = CF_TEXT;
- m_cfFormats[1] = CF_UNICODETEXT;
+ m_cfFormats[0] = CF_UNICODETEXT;
+ m_cfFormats[1] = CF_TEXT;
}
//----------------------------------------------------------------------------
diff --git a/sal/workben/clipboardwben/testcopy/XTDataObject.hxx b/sal/workben/clipboardwben/testcopy/XTDataObject.hxx
index 9852a885d349..e3776210cd6a 100644
--- a/sal/workben/clipboardwben/testcopy/XTDataObject.hxx
+++ b/sal/workben/clipboardwben/testcopy/XTDataObject.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: XTDataObject.hxx,v $
*
- * $Revision: 1.1 $
+ * $Revision: 1.2 $
*
- * last change: $Author: tra $ $Date: 2000-10-19 08:53:30 $
+ * last change: $Author: tra $ $Date: 2000-11-13 08:34:09 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -96,9 +96,7 @@ class EnumFormatEtc;
class CXTDataObject : public IDataObject
{
public:
- CXTDataObject( /*CWinClipboard& theWinClipboard,
- const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboardOwner >& theXClipboardOwner,
- const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >& theXTDataSource*/ );
+ CXTDataObject( LONG nRefCntInitVal = 0);
~CXTDataObject( );
//-----------------------------------------------------------------
diff --git a/sal/workben/clipboardwben/testcopy/cbcpytest.cxx b/sal/workben/clipboardwben/testcopy/cbcpytest.cxx
index 6968874379a1..f5401e803e41 100644
--- a/sal/workben/clipboardwben/testcopy/cbcpytest.cxx
+++ b/sal/workben/clipboardwben/testcopy/cbcpytest.cxx
@@ -2,6 +2,7 @@
//
#define _WIN32_DCOM
+#undef _UNICODE
#include "stdafx.h"
@@ -22,20 +23,29 @@
#define MAX_LOADSTRING 100
#undef USE_MTACB
+#define MSG_FLUSHCLIPBOARD WM_USER + 1
+
// Globale Variablen:
HINSTANCE hInst; // aktuelle Instanz
-WCHAR szTitle[MAX_LOADSTRING]; // Text der Titelzeile
-WCHAR szWindowClass[MAX_LOADSTRING]; // Text der Titelzeile
+TCHAR szTitle[MAX_LOADSTRING]; // Text der Titelzeile
+TCHAR szWindowClass[MAX_LOADSTRING]; // Text der Titelzeile
ATOM MyRegisterClass( HINSTANCE hInstance );
BOOL InitInstance( HINSTANCE, int );
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
LRESULT CALLBACK About( HWND, UINT, WPARAM, LPARAM );
void CopyClipboardData(HWND hwndParent);
+void FlushClipboard( );
+void PasteData( HWND hWnd );
+void SetLocale();
+
LPSTREAM g_pStm = NULL;
char* pTextBuff = NULL;
DWORD lData = 0;
CXTDataObject* g_xtDo = NULL;
+HWND g_hWnd;
+HANDLE g_hEvent;
+BOOL g_bEnd;
//----------------------------------------------------
// a thread function
@@ -43,61 +53,12 @@ CXTDataObject* g_xtDo = NULL;
unsigned int _stdcall ThreadProc(LPVOID pParam)
{
- IDataObject* pIDataObj = NULL;
- FORMATETC formatETC;
- STGMEDIUM stgMedium;
- LPVOID pGlobMem;
- HWND hwnd;
- DWORD sizeGlobBuff;
- HRESULT hr;
-
- hwnd = (HWND)pParam;
-
- OleInitialize( NULL );
-
- hr = OleGetClipboard( &pIDataObj );
-
- hr = CoGetInterfaceAndReleaseStream(
- g_pStm,
- __uuidof(IDataObject),
- reinterpret_cast<LPVOID*>(&pIDataObj));
-
- formatETC.cfFormat = CF_TEXT;
- formatETC.ptd = NULL;
- formatETC.dwAspect = DVASPECT_CONTENT;
- formatETC.lindex = -1;
- formatETC.tymed = TYMED_HGLOBAL;
-
- hr = pIDataObj->GetData( &formatETC, &stgMedium );
- pGlobMem = GlobalLock( stgMedium.hGlobal );
- if ( NULL != pGlobMem )
+ while( !g_bEnd )
{
- if ( NULL != pTextBuff )
- {
- free( pTextBuff );
- }
-
- sizeGlobBuff = GlobalSize( stgMedium.hGlobal );
- pTextBuff = (char*)malloc( sizeGlobBuff + 1 );
- ZeroMemory( pTextBuff, sizeGlobBuff + 1 );
-
- memcpy( pTextBuff, pGlobMem, sizeGlobBuff );
- lData = sizeGlobBuff;
-
- InvalidateRect( hwnd, NULL, TRUE );
- UpdateWindow( hwnd );
+ WaitForSingleObject( g_hEvent, INFINITE );
+ SendMessage( g_hWnd, MSG_FLUSHCLIPBOARD, WPARAM(0), LPARAM(0) );
}
- GlobalUnlock( stgMedium.hGlobal );
-
- ReleaseStgMedium( &stgMedium );
-
- pIDataObj->Release();
-
- //CoUninitialize( );
-
- OleUninitialize( );
-
return 0;
}
@@ -115,6 +76,23 @@ int APIENTRY WinMain(HINSTANCE hInstance,
HACCEL hAccelTable;
HRESULT hr = E_FAIL;
+ /*
+ g_hEvent = CreateEvent( 0,
+ FALSE,
+ FALSE,
+ NULL
+ );
+
+ g_bEnd = FALSE;
+
+ _beginthreadex( ThreadProc,
+ 0,
+ NULL,
+ 0,
+ 0,
+ NULL );
+ */
+
// it's important to initialize ole
// in order to use the clipboard
#ifdef USE_MTACB
@@ -125,8 +103,8 @@ int APIENTRY WinMain(HINSTANCE hInstance,
// Globale Zeichenfolgen initialisieren
- LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
- LoadStringW(hInstance, IDC_TESTWIN32, szWindowClass, MAX_LOADSTRING);
+ LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
+ LoadString(hInstance, IDC_TESTWIN32, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// Initialisierung der Anwendung durchfhren:
@@ -154,12 +132,14 @@ int APIENTRY WinMain(HINSTANCE hInstance,
OleUninitialize( );
#endif
+ CloseHandle( g_hEvent );
+
return msg.wParam;
}
-//
+//----------------------------------------------------------------
// FUNKTION: MyRegisterClass()
//
// AUFGABE: Registriert die Fensterklasse.
@@ -171,10 +151,11 @@ int APIENTRY WinMain(HINSTANCE hInstance,
// die zu Windows 95 hinzugefgt wurde. Es ist wichtig diese Funktion aufzurufen,
// damit der Anwendung kleine Symbole mit den richtigen Proportionen zugewiesen
// werden.
-//
+//----------------------------------------------------------------
+
ATOM MyRegisterClass( HINSTANCE hInstance )
{
- WNDCLASSEXW wcex;
+ WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
@@ -186,14 +167,14 @@ ATOM MyRegisterClass( HINSTANCE hInstance )
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_TESTWIN32);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
- wcex.lpszMenuName = (LPCWSTR)IDC_TESTWIN32;
- wcex.lpszClassName = szWindowClass;
+ wcex.lpszMenuName = (LPCTSTR)IDC_TESTWIN32;
+ wcex.lpszClassName = _T(szWindowClass);
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
- return RegisterClassExW(&wcex);
+ return RegisterClassEx(&wcex);
}
-//
+//----------------------------------------------------------------
// FUNKTION: InitInstance(HANDLE, int)
//
// AUFGABE: Speichert die Instanzzugriffsnummer und erstellt das Hauptfenster
@@ -202,28 +183,27 @@ ATOM MyRegisterClass( HINSTANCE hInstance )
//
// In dieser Funktion wird die Instanzzugriffsnummer in einer globalen Variable
// gespeichert und das Hauptprogrammfenster erstellt und angezeigt.
-//
+//----------------------------------------------------------------
+
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow )
{
- HWND hWnd;
-
hInst = hInstance; // Instanzzugriffsnummer in unserer globalen Variable speichern
- hWnd = CreateWindowExW(0, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
+ g_hWnd = CreateWindowEx(0, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
- if( !hWnd )
+ if( !g_hWnd )
{
return FALSE;
}
- ShowWindow( hWnd, nCmdShow );
- UpdateWindow( hWnd );
+ ShowWindow( g_hWnd, nCmdShow );
+ UpdateWindow( g_hWnd );
return TRUE;
}
-//
+//----------------------------------------------------------------
// FUNKTION: WndProc(HWND, unsigned, WORD, LONG)
//
// AUFGABE: Verarbeitet Nachrichten fr das Hauptfenster.
@@ -231,8 +211,8 @@ BOOL InitInstance( HINSTANCE hInstance, int nCmdShow )
// WM_COMMAND - Anwendungsmen verarbeiten
// WM_PAINT - Hauptfenster darstellen
// WM_DESTROY - Beendigungsnachricht ausgeben und zurckkehren
-//
-//
+//----------------------------------------------------------------
+
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId;
@@ -253,10 +233,14 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
switch( wmId )
{
case IDD_COPY:
- //PasteClipboardData(hWnd);
CopyClipboardData(hWnd);
break;
-
+ case IDD_PASTE2:
+ PasteData(hWnd);
+ break;
+ case IDD_LOCALE:
+ SetLocale();
+ break;
case IDM_EXIT:
DestroyWindow( hWnd );
break;
@@ -285,6 +269,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
break;
case WM_DESTROY:
+ g_bEnd = TRUE;
+ SetEvent( g_hEvent );
+ FlushClipboard( );
PostQuitMessage( 0 );
break;
@@ -294,63 +281,92 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
return 0;
}
+//----------------------------------------------
+// copy data into the clipboard
+//----------------------------------------------
+
void CopyClipboardData( HWND hWnd )
{
- g_xtDo = new CXTDataObject;
+ g_xtDo = new CXTDataObject( 1 );
#ifdef USE_MTACB
MTASetClipboard( static_cast< IDataObject* >( g_xtDo ) );
- MTAFlushClipboard( );
#else
OleSetClipboard( static_cast< IDataObject* >( g_xtDo ) );
- OleFlushClipboard( );
#endif
}
-void PasteClipboardData2(HWND hwndParent)
+//----------------------------------------------
+// flush the content into the clipboard
+//----------------------------------------------
+
+void FlushClipboard( )
{
- IDataObject* pIDataObject;
- HRESULT hr;
- FORMATETC formatETC;
- STGMEDIUM stgMedium;
- LPVOID pGlobMem;
- HWND hwnd;
- DWORD sizeGlobBuff;
-
- //hr = MTAGetClipboard( &pIDataObject );
+ if ( NULL != g_xtDo )
+ {
+#ifdef USE_MTACB
+ HRESULT hr = MTAIsCurrentClipboard( static_cast< IDataObject* >( g_xtDo ) );
+ if ( S_OK == hr )
+ MTAFlushClipboard( );
+#else
+ HRESULT hr = OleIsCurrentClipboard( static_cast< IDataObject* >( g_xtDo ) );
+ if ( S_OK == hr )
+ OleFlushClipboard( );
+#endif
+
+ static_cast< IDataObject* >( g_xtDo )->Release( );
+ }
+}
+
+
+void PasteData(HWND hWnd)
+{
+ IDataObject* pDataObj;
+
+ //FlushClipboard( );
+
+ HRESULT hr = OleGetClipboard( &pDataObj );
if ( SUCCEEDED( hr ) )
{
- formatETC.cfFormat = CF_TEXT;
- formatETC.ptd = NULL;
- formatETC.dwAspect = DVASPECT_CONTENT;
- formatETC.lindex = -1;
- formatETC.tymed = TYMED_HGLOBAL;
-
- hr = pIDataObject->GetData( &formatETC, &stgMedium );
- pGlobMem = GlobalLock( stgMedium.hGlobal );
- if ( NULL != pGlobMem )
- {
- if ( NULL != pTextBuff )
- {
- free( pTextBuff );
- }
+ FORMATETC fetc;
+ STGMEDIUM stgmedium;
- sizeGlobBuff = GlobalSize( stgMedium.hGlobal );
- pTextBuff = (char*)malloc( sizeGlobBuff + 1 );
- ZeroMemory( pTextBuff, sizeGlobBuff + 1 );
+ fetc.cfFormat = CF_LOCALE;
+ fetc.ptd = NULL;
+ fetc.dwAspect = DVASPECT_CONTENT;
+ fetc.lindex = -1;
+ fetc.tymed = TYMED_HGLOBAL;
- memcpy( pTextBuff, pGlobMem, sizeGlobBuff );
- lData = sizeGlobBuff;
+ hr = pDataObj->GetData( &fetc, &stgmedium );
+ if ( SUCCEEDED( hr ) )
+ {
+ LPVOID lpData = GlobalLock( stgmedium.hGlobal );
- InvalidateRect( hwndParent, NULL, TRUE );
- UpdateWindow( hwndParent );
- }
+ if ( NULL != lpData )
+ {
+ LCID lcid = *( (WORD*)lpData );
- GlobalUnlock( stgMedium.hGlobal );
+ WORD langID = LANGIDFROMLCID( lcid );
+ WORD sublangID = SUBLANGID( langID );
- ReleaseStgMedium( &stgMedium );
+ TCHAR buff[6];
+ int cbWritten = GetLocaleInfo( lcid, LOCALE_IDEFAULTANSICODEPAGE, buff, sizeof( buff ) );
+ cbWritten = GetLocaleInfo( lcid, LOCALE_IDEFAULTCODEPAGE, buff, sizeof( buff ) );
- pIDataObject->Release();
+ GlobalUnlock( stgmedium.hGlobal );
+ }
+ else
+ {
+ DWORD dwLastError = GetLastError( );
+ }
+
+ ReleaseStgMedium( &stgmedium );
+ }
}
}
+void SetLocale()
+{
+ LCID threadLcid = GetThreadLocale();
+}
+
diff --git a/sal/workben/clipboardwben/testcopy/cbcpytest.rc b/sal/workben/clipboardwben/testcopy/cbcpytest.rc
index 511439da5438..a9db008536ac 100644
--- a/sal/workben/clipboardwben/testcopy/cbcpytest.rc
+++ b/sal/workben/clipboardwben/testcopy/cbcpytest.rc
@@ -44,6 +44,8 @@ BEGIN
POPUP "&Datei"
BEGIN
MENUITEM "&Copy", IDD_COPY
+ MENUITEM "Paste", IDD_PASTE2
+ MENUITEM "Set Locale", IDD_LOCALE
MENUITEM SEPARATOR
MENUITEM "&Beenden", IDM_EXIT
END
diff --git a/sal/workben/clipboardwben/testcopy/resource.h b/sal/workben/clipboardwben/testcopy/resource.h
index de3c8450ff7f..5f70db1bb13f 100644
--- a/sal/workben/clipboardwben/testcopy/resource.h
+++ b/sal/workben/clipboardwben/testcopy/resource.h
@@ -15,6 +15,8 @@
#define IDR_MAINFRAME 128
#define IDD_PASTE 32771
#define IDD_COPY 32771
+#define IDD_PASTE2 32772
+#define IDD_LOCALE 32773
#define IDC_STATIC -1
// Next default values for new objects
@@ -22,7 +24,7 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129
-#define _APS_NEXT_COMMAND_VALUE 32772
+#define _APS_NEXT_COMMAND_VALUE 32774
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 110
#endif