Re: Unable to use SetClipboardData.
On Feb 15, 8:23 am, Joseph M. Newcomer <newco...@flounder.com> wrote:
See below...
On Fri, 13 Feb 2009 21:50:09 -0800 (PST), shrikant.gura...@gmail.com wrot=
e:
On Feb 6, 8:46 pm, "Giovanni Dicanio"
<giovanniDOTdica...@REMOVEMEgmail.com> wrote:
<shrikant.gura...@gmail.com> ha scritto nel messaggionews:cef1969e-54b=
2-4c51-9dfe-1b421f077fa9@p36g2000prp.googlegroups.com...
i want to cpture the cilpboard data, and modify it then want to se=
t
it into Ciplboard back.How can i do?
You may want to develop a couple of methods, one for retrieving text f=
rom
the clipboard, and the other one to copy the text to clipboard.
So, your worflow can be:
1. call the method to get clipboard text data
2. modify the text
3. call the method to copy the new text to the clipboard
You might find useful a simple MFC application I developed to test the=
se
concepts here:
http://www.geocities.com/giovanni.dicanio/vc/MfcClipboard.zip
The relevant code for methods implementing copy and paste operations
follows:
<code>
//////////////////////////////////////////////////////////////////////=
////
// Copies input string to clipboard.
// Returns TRUE on success, FALSE on error.
//////////////////////////////////////////////////////////////////////=
////
BOOL CMfcClipboardDlg::CopyStringToClipboard( IN const CString & str )
{
// Open the clipboard
if ( !OpenClipboard() )
return FALSE;
// Empty the clipboard
if ( !EmptyClipboard() )
{
CloseClipboard();
return FALSE;
}
// Number of bytes to copy (consider +1 for end-of-string, and
// properly scale byte size to sizeof(TCHAR))
SIZE_T textCopySize = (str.GetLength() + 1) * sizeof(TCHAR);
// Allocate a global memory object for the text
HGLOBAL hTextCopy = GlobalAlloc( GMEM_MOVEABLE, textCopySize=
);
if ( hTextCopy == NULL )
{
CloseClipboard();
return FALSE;
}
// Lock the handle, and copy source text to the buffer
TCHAR * textCopy = reinterpret_cast< TCHAR *>( GlobalLock(
hTextCopy ) );
ASSERT( textCopy != NULL );
StringCbCopy( textCopy, textCopySize, str.GetString() );
GlobalUnlock( hTextCopy );
textCopy = NULL; // avoid dangling references
// Place the handle on the clipboard
#if defined( _UNICODE )
UINT textFormat = CF_UNICODETEXT; // Unicode text
#else
UINT textFormat = CF_TEXT; // ANSI text
#endif // defined( _UNICODE )
if (SetClipboardData( textFormat, hTextCopy ) == NULL )
{
// Failed
CloseClipboard();
return FALSE;
}
// Release the clipboard
CloseClipboard();
// All right
return TRUE;
}
//////////////////////////////////////////////////////////////////////=
////
// Retrieves clipboard text content.
// Returns TRUE on success, FALSE on error.
//////////////////////////////////////////////////////////////////////=
////
BOOL CMfcClipboardDlg::RetreiveStringFromClipboard( OUT CString & str =
)
{
// Clear output parameter
str.Empty();
// Try opening the clipboard
if (! OpenClipboard())
{
// Error
return FALSE;
}
// Select clipboard text format basing on project Unicode buil=
ding flag
#if defined( _UNICODE )
UINT textFormat = CF_UNICODETEXT; // Unicode text
#else
UINT textFormat = CF_TEXT; // ANSI text
#endif // defined( _UNICODE )
// Retrieve clipboard text data
HANDLE hClipboardData = GetClipboardData(textFormat);
if (hClipboardData == NULL)
{
// Error
CloseClipboard();
return FALSE;
}
// Get pointer to text
TCHAR * pszText = reinterpret_cast<TCHAR *>( GlobalLock(
hClipboardData ) );
if (pszText == NULL)
{
// Error
CloseClipboard();
return FALSE;
}
// Deep copy clipboard text in string instance
str = pszText;
// Release the lock on clipboard data handle
GlobalUnlock( hClipboardData );
// Release clipboard access
CloseClipboard();
// All right
return TRUE;
}
</code>
HTH,
Giovanni
Thanks..
What i did .. 1) Get Data from CilpBoard and the Save it in Text File
and then Empty Cilpboard and Set this text file data in Cilpboard.I
did this because when user copy data from HTML Page with table , this
table get printed in Edit box , so i copy it in Text file and then
read this data from txt file and the set it again in Cilpboard.
****
WHY? What possible value is there to copying the data to a file and th=
en copying the file
back to the clipboard? This seems completely unnecessary. What do y=
ou do with the file
after you are done?
This seems to be even clumsier than the code you just showed above, whose=
sole purpose
seems to be to convert text from ANSI to Unicode, a transformation that i=
s completely
without purpose because this is already handled by the clipboard mechanis=
m!
=
joe
****
Joseph M. Newcomer [MVP]
email: newco...@flounder.com
Web:http://www.flounder.com
MVP Tips:http://www.flounder.com/mvp_tips.htm- Hide quoted text -
- Show quoted text -
Why i store the clipbord data first in text file and the againg reade
this data from text file and store this data into Cilpboard?
If i copy normal text from any text file and copy it in rich edit
control it is working fine.But in case i copy the data from HTML page
which have table (User copy any thing , user will copy text with tabel
or any image (image is restricted)) the hole table get inserted in
rich edit box.I am unable to remove the table.But i observed that if
this text i copy in text file the it will not inculde or remove the
table. So that i decide to cpoy the the data in text file first then
in again store it in clipbord again.
I m sorry if i did wrong, (i have to do this as early as possible so i
did it).
For Past - Context menu -- i only open the clipboard and get the TEXT
from it.It is working fine using ON_UPDATE_COMMAND_UI.
But for Ctrl+v it is not working fine.