Schránka: Použití schránky systému Windows
Toto téma popisuje, jak používat standardní rozhraní API schránky systému Windows v rámci vaší aplikace MFC.
Většina aplikací pro Windows podporuje vyjmutí nebo kopírování dat do schránky systému Windows a vkládání dat ze schránky. Datové formáty schránky se mezi aplikacemi liší. Architektura podporuje pouze omezený počet formátů schránky pro omezený počet tříd. Obvykle implementujete příkazy související se schránkou – Vyjmout, Kopírovat a Vložit – v nabídce Upravit pro vaše zobrazení. Knihovna tříd definuje ID příkazů pro tyto příkazy: ID_EDIT_CUT, ID_EDIT_COPY a ID_EDIT_PASTE. Jsou také definovány výzvy na řádku zpráv.
Zprávy a příkazy v rozhraní vysvětlují, jak zpracovat příkazy nabídky v aplikaci mapováním příkazu nabídky na funkci obslužné rutiny. Pokud vaše aplikace nedefinuje funkce obslužné rutiny pro příkazy schránky v nabídce Upravit, zůstanou zakázané. Pokud chcete psát funkce obslužné rutiny pro příkazy Vyjmout a Kopírovat, implementujte výběr v aplikaci. Pokud chcete napsat funkci obslužné rutiny pro příkaz Vložit, zadejte dotaz do schránky a zjistěte, jestli obsahuje data ve formátu, který může aplikace přijmout. Pokud chcete například povolit příkaz Kopírovat, můžete napsat obslužnou rutinu, která vypadá nějak takto:
void CMyListView::OnEditCopy()
{
if ( !OpenClipboard() )
{
AfxMessageBox( _T("Cannot open the Clipboard") );
return;
}
// Remove the current Clipboard contents
if( !EmptyClipboard() )
{
AfxMessageBox( _T("Cannot empty the Clipboard") );
return;
}
// Get the currently selected data
HGLOBAL hGlob = GlobalAlloc(GMEM_FIXED, 64);
strcpy_s((char*)hGlob, 64, "Current selection\r\n");
// For the appropriate data formats...
if ( ::SetClipboardData( CF_TEXT, hGlob ) == NULL )
{
CString msg;
msg.Format(_T("Unable to set Clipboard data, error: %d"), GetLastError());
AfxMessageBox( msg );
CloseClipboard();
GlobalFree(hGlob);
return;
}
CloseClipboard();
}
Příkazy Vyjmout, Kopírovat a Vložit jsou smysluplné pouze v určitých kontextech. Příkazy Vyjmout a Kopírovat by měly být povoleny jenom v případě, že je něco vybraného, a příkaz Vložit pouze v případě, že je něco ve schránce. Toto chování můžete poskytnout definováním funkcí obslužné rutiny aktualizací, které tyto příkazy povolují nebo zakazují v závislosti na kontextu. Další informace naleznete v tématu Aktualizace objektů uživatelského rozhraní.
Knihovna tříd Microsoft Foundation poskytuje podporu pro úpravy textu pomocí tříd CEdit
a CEditView
objektů. Třídy OLE také zjednodušují implementaci operací schránky, které zahrnují položky OLE. Další informace o třídách OLE naleznete v tématu Schránka: Použití mechanismu schránky OLE.
Implementace dalších příkazů nabídky Pro úpravy, například Zpět (ID_EDIT_UNDO) a Znovu (ID_EDIT_REDO), je vám také ponechána. Pokud vaše aplikace tyto příkazy nepodporuje, můžete je snadno odstranit ze souboru prostředků pomocí editorů prostředků Visual C++.