Sdílet prostřednictvím


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++.

O čem chcete vědět víc

Viz také

Schránka