Popis symbolický rozdíly mezi MFC 4.0 a 4.0 jazyka

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

145698
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Poznámka: Microsoft Visual C++ .NET 2002 a Microsoft Visual C++ .NET 2003 podporují model spravovaný kód, který je součástí Microsoft .NET Framework a Nespravovaná nativní kód modelu Microsoft Windows. Informace v tomto článku platí pouze pro nespravované kód jazyka C++.Microsoft Visual C++ 2005 podporuje model spravovaný kód, který je součástí Microsoft .NET Framework a Nespravovaná nativní kód modelu Microsoft Windows.
Příznaky
Tabulky aplikace akcelerátory poskytnut podle metodou s COleControl::OnGetControlInfo popisuje symbolický klíče řízení OLE nefunguje v MFC 4.0 a Visual Basic 4.0 OLE řízení kontejnery.
Příčina
4.0 Jazyka a MFC 4.0 poskytují různé odpovídající symbolické zpracování implementací, takže vyžadují různé akcelerátory položek tabulky.
Řešení
Vytvořit akcelerátory položek tabulky umožňující symbolických instrukcí ovládacího prvku ke zpracování v prvku kontejneru 4.0 jazyka i MFC 4.0 OLE.
Prohlášení
Toto chování je záměrné.
Další informace
Ovládací prvek OLE přepíše virtuální metoda COleControl::OnGetControlInfo umožníte jeho kontejneru získat popis ovládacího prvku symbolický klíče. Metoda OnGetControlInfo vrátí vyplněno out struktury typu obsahuje, mimo jiné popisovač tabulky akcelerátory CONTROLINFO. Tato tabulka akcelerátory slouží kontejner provést kontroly symbolický klíče. Při kontejner určuje prvek tohoto symbolický stisknutí klávesy, volá ovládacího prvku IOleControl::OnMnemonic metodu. To způsobí framework MFC volat metodu virtuální COleControl::OnMnemonic, které lze provést zvláštní zpracování přepsat ovládacího prvku.

Implementace jazyka 4.0 a MFC 4.0 OLE symbolický zpracování ovládací prvek mít odlišné požadavky pro položky v tabulce akcelerátory vraceny podle metodou OnGetControlInfo.

Použité v tabulce akcelerátory přístupová klávesa je definována struktura ACCEL. ACCEL struktury má následující definice:
   typedef struct tagACCEL   {       BYTE   fVirt;       WORD   key;       WORD   cmd;   } ACCEL;				
člen fVirt určuje příznaky akcelerátory. Tento člen může být kombinací následujících hodnot:
   Value       Meaning   ---------------------------------------------------------------------   FALT        The ALT key must be held down when the accelerator key is               pressed.   FCONTROL    The CTRL key must be held down when the accelerator key               is pressed.   FNOINVERT   Specifies that no top-level menu item is highlighted when               the accelerator is used. If this flag is not specified, a               top-level menu item will be highlighted, if possible,               when the accelerator is used.   FSHIFT      The SHIFT key must be held down when the accelerator key               is pressed.   FVIRTKEY    The key member specifies a virtual-key code. If this flag               is not specified, key is assumed to specify an ASCII               character code.				
Určuje přístupová klávesa klíče členů. Tento člen může být kód virtuální klávesy nebo kód znaku ASCII.

Člen cmd Určuje identifikátor akcelerátory. Tato hodnota je umístěn do nejnižší slovo parametr wParam WM_COMMAND nebo WM_SYSCOMMAND zprávu při stisknutí akcelerátory.

Visual Basic 4.0 má následující požadavky položky akcelerátory tabulky použité pro symbolický zpracování:

  • FVirt člen musí být kombinace (FVIRTKEY | FALT) nebo (FVIRTKEY | FALT | FSHIFT).
  • Klíče člen musí být velká písmena.
  • Cmd člen musí být rovna 0.
MFC 4.0 má následující požadavky položky akcelerátory tabulky použité pro symbolický zpracování:

  • FVirt člen musí být 0 nebo FALT.
  • Klíče člen musí být malá písmena.
  • Člen cmd ignorována.
Kontejnery ovládacího prvku MFC 4.0 OLE se liší od Visual Basic 4.0 způsob jejich zpracování symbolický zpracování při ovládací prvek je ROZHRANÍ aktivní. Při zpracování klávesnice vstupní MFC kontejnery nejprve zkontrolujte, zda řídit OLE má fokus. Pokud ano, rámec volá metodu jeho IOleInPlaceActiveObject::TranslateAccelerator. V COleControl implementace Tato metoda volána funkce PreTranslateMessage ovládacího prvku. V pořadí pro ovládací prvek OLE správně po jeho funkce symbolických instrukcí je ovládací prvek UI aktivní ovládací prvek OLE musí přepsat PreTranslateMessage a zkontrolujte jeho speciální kombinace kláves.

Poznámka: není nezbytné, pokud ovládací prvek je generován Visual C++ 5.0 nebo vyšší, protože OnMnemonic bude volána, když je ovládací prvek UI aktivní podle metodou SendMnemonic COccManager::IsDialogMessage přepisování PreTranslateMessage.

Následující vzorový kód zobrazí Potlačené OnGetControlInfo, PreTranslateMessage a OnMnemonic povolit symbolických instrukcí ovládacího prvku v MFC 4.0 OLE ovládací prvek kontejner i kontejneru jazyka 4.0 pracovat správně.

Ukázkový kód

/* Compile options needed: None*/ #define NUM_ENTRIES 4void CMnemonicCtrl::OnGetControlInfo(LPCONTROLINFO lpi){  HACCEL hAccel = NULL;  TCHAR ch = 'm';   // Hard code the mnemonic key to 'm' for this                    // example.  ACCEL accKey[NUM_ENTRIES];  // Accel table entries 0 and 1 are to work with Visual Basic 4.0 as a  // container. Visual Basic 4.0 has the following requirements for  // accel table entries for a control's mnemonics:  //   //  (fVirt == FVIRTKEY | FALT) || (fVirt == FVIRTKEY | FALT | FSHIFT)  //  key must be uppercase  //  (cmd != 0)  accKey[0].fVirt = FVIRTKEY | FALT;  accKey[1].fVirt = FVIRTKEY | FALT | FSHIFT;  accKey[0].key = accKey[1].key = LOBYTE(VkKeyScan(ch));  accKey[0].cmd = accKey[1].cmd = 1;  // Accel table entries 2 and 3 are to work with MFC 4.0 containers.  // MFC containers have the following requirements for accel table  // entries for a control's mnemonics:  //   //  (fVirt == FALT) || (fVirt == 0)  //  key should be lowercase  //  cmd is ignored  accKey[2].fVirt = FALT;  accKey[3].fVirt = 0;  accKey[2].key = accKey[3].key = ch;  accKey[2].cmd = accKey[3].cmd = 1;  // Create the accel table.  hAccel = CreateAcceleratorTable(accKey, NUM_ENTRIES);  if (hAccel != NULL)  {    // Fill in the CONTROLINFO structure passed in.    lpi -> hAccel = hAccel;    lpi -> cAccel = NUM_ENTRIES;    lpi -> dwFlags = 0;  }  else    COleControl::OnGetControlInfo(lpi);}// NO need to override PreTranslateMessage if the control is generated in// Visual C++ 5.0 or above.BOOL CMnemonicCtrl::PreTranslateMessage( MSG * pMsg ){  // Check for ALT-M key combination.  if(pMsg->message == WM_SYSKEYDOWN) {    if((pMsg->wParam == 'm')||(pMsg->wParam == 'M'))    {      // Do mnemonic key processing here.      return TRUE;    }  }  return COleControl::PreTranslateMessage(pMsg);}void CMnemonicCtrl::OnMnemonic(LPMSG pMsg){  if ((pMsg->message == WM_SYSKEYDOWN)||      (pMsg->message == WM_SYSCHAR))  {    if ((pMsg->wParam == 'm')||(pMsg->wParam == 'M'))    {      // Do mnemonic key processing here.      return;    }  }  COleControl::OnMnemonic(pMsg);}				

Upozornění: Tento článek byl přeložen automaticky

Vlastnosti

ID článku: 145698 - Poslední kontrola: 02/28/2014 22:03:08 - Revize: 5.1

  • Microsoft Foundation Class Library 4.2
  • kbnosurvey kbarchive kbmt kbinfo kbhowto kbtshoot kbacceleratorkey kbcode kbctrlcreate kbkeyaccel kbprb KB145698 KbMtcs
Váš názor