Article ID: 148687
Article Last Modified on 12/2/2003
148455 CSharedFile::Detach() Does Not Call GlobalUnlock()
/* Compile options needed: Default AppWizard options */
void CMyView::OnEditCopy()
{
// CG: This block was added by the Clipboard Assistant component
{
CSharedFile memFile;
CArchive ar(&memFile, CArchive::store|CArchive::bNoFlushOnDelete);
// serialize data to archive object
DoCutCopyPaste(ar, FALSE);
ar.Flush();
HGLOBAL hData = memFile.Detach();
//Resolution for CSharedFile::Detach() problem
//Check <WWLINK TYPE="ARTICLE" VALUE="Q148455">Q148455</WWLINK> for current status.
// _MFC_VER might need to be updated.
#if _MFC_VER <= 0x0420
::GlobalUnlock(hData);
#endif
if (OpenClipboard())
{
::SetClipboardData(m_nClipboardFormat, hData);
CloseClipboard();
}
else
AfxMessageBox(CG_IDS_CANNOT_OPEN_CLIPBOARD);
}
}
void CMyView::OnEditCut()
{
// CG: This block was added by the Clipboard Assistant component
{
CSharedFile memFile;
CArchive ar(&memFile, CArchive::store|CArchive::bNoFlushOnDelete);
// Serialize data to archive object
DoCutCopyPaste(ar, TRUE);
ar.Flush();
HGLOBAL hData = memFile.Detach();
//Resolution for CSharedFile::Detach() problem
//Check <WWLINK TYPE="ARTICLE" VALUE="Q148455">Q148455</WWLINK> for current status.
// _MFC_VER might need to be updated.
#if _MFC_VER <= 0x0420
::GlobalUnlock(hData);
#endif
if (OpenClipboard())
{
::SetClipboardData(m_nClipboardFormat, hData);
CloseClipboard();
}
else
AfxMessageBox(CG_IDS_CANNOT_OPEN_CLIPBOARD);
}
}
void CMyView::OnEditPaste()
{
// CG: This block was added by the Clipboard Assistant component
{
if (OpenClipboard())
{
HANDLE hData = ::GetClipboardData(m_nClipboardFormat);
if (hData != NULL)
{
CSharedFile memFile;
memFile.SetHandle(hData,FALSE);
CArchive ar(&memFile, CArchive::load);
// Serialize data to document
DoCutCopyPaste(ar, FALSE);
ar.Close();
//Resolution for CSharedFile::Detach() problem
//Check <WWLINK TYPE="ARTICLE" VALUE="Q148455">Q148455</WWLINK> for current status.
// _MFC_VER might need to be updated.
#if _MFC_VER <= 0x0420
::GlobalUnlock(memFile.Detach());
#else
memFile.Detach();
#endif
}
else
AfxMessageBox(CG_IDS_CANNOT_GET_CLIPBOARD_DATA);
CloseClipboard();
}
else
AfxMessageBox(CG_IDS_CANNOT_OPEN_CLIPBOARD);
}
}
Keywords: kbbug kbfix kbide kbprogramming kbcode KB148687