Schránka: Použití schránky systému Windows
Toto téma popisuje, jak použít standardní API schránky systému Windows do aplikace knihovny MFC.
Většina aplikací pro Windows podporuje vyjmutí nebo kopírování dat do schránky a vložení dat ze schránky.Datové formáty schránky lišit mezi aplikacemi.Rozhraní podporuje pouze omezený počet formáty schránky pro omezený počet tříd.Obvykle provede příkazy související s schránky, Vyjmout, kopírovat a vložit – pro zobrazení v nabídce Úpravy.Knihovna tříd definuje ID příkazu pro tyto příkazy: ID_EDIT_CUT, ID_EDIT_COPY, a ID_EDIT_PASTE.Jejich výzvy řádek zprávy jsou rovněž definovány.
Zprávy a příkazy v rámci vysvětluje, jak zpracovat příkazy nabídek v aplikaci pomocí příkazu nabídky mapování na obslužné rutiny.Tak dlouho, dokud aplikace nedefinuje obslužné rutiny funkce pro schránky příkazy v nabídce Úpravy, zůstanou zakázané.Psát obslužné rutiny funkce pro příkazy Vyjmout a kopírovat, provádět výběr v aplikaci.Chcete-li napsat obslužnou rutinu pro příkaz Vložit, dotaz do schránky, aby zjistil, zda obsahuje data ve formátu aplikace může přijmout.Například chcete-li příkaz Kopírovat, můžete napsat obslužnou rutinu něco jako následující:
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 pouze hrají důležitou roli v určitých kontextech.Příkazy Vyjmout a Kopírovat lze povolit pouze v případě, že je něco vybráno a příkaz Vložit pouze tehdy, když něco je ve schránce.Toto chování můžete zadat definováním funkce aktualizace obslužné rutiny, které povolíte nebo zakážete-li tyto příkazy v závislosti na kontextu.Další informace naleznete v tématu jak aktualizovat objekty uživatelského rozhraní.
Knihovna tříd Microsoft Foundation podporují schránky pro úpravy textu CEdit a CEditView třídy.Třídy OLE také zjednodušit prováděcí zahrnující položky OLE operacemi ve schránce.Další informace o třídách OLE, naleznete v schránky: pomocí mechanismu OLE schránky.
Ostatní prováděcí úpravy příkazů nabídky, jako je zpět (ID_EDIT_UNDO) a znovu (ID_EDIT_REDO), zůstane na vás.Pokud aplikace nepodporuje tyto příkazy, můžete je snadno odstranit ze souboru prostředků pomocí Visual C++ resource Editor.