Descrizione dei tasti di scelta rapida differenze tra MFC 4.0 e 4.0 di Visual Basic

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

145698
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Nota Microsoft Visual c ++ .NET 2002 e Microsoft Visual c ++ .NET 2003 supportano sia il modello di codice gestito fornito da Microsoft .NET Framework che il modello di codice non gestito nativo di Microsoft Windows. Le informazioni contenute in questo articolo si applicano solo al codice Visual C++ non gestito.Microsoft Visual c ++ 2005 supporta sia il modello di codice gestito fornito da Microsoft .NET Framework che il modello di codice non gestito nativo di Microsoft Windows.
Sintomi
Una tabella dei tasti di scelta rapida fornita per mezzo di COleControl::OnGetControlInfo che descrive i tasti di scelta di un controllo OLE non funziona sia in MFC 4.0 che in contenitori di controlli OLE di Visual Basic 4.0.
Cause
Visual Basic 4.0 e 4.0 di MFC consentono di tasto di scelta diverso la gestione di implementazioni, in modo che richiedono di scelta rapida di diverse voci della tabella.
Risoluzione
Creare tasti di scelta rapida di voci di tabella che consentiranno di tasti di scelta di un controllo da gestire in Visual Basic 4.0 sia OLE di MFC 4.0 contenitore del controllo.
Status
Questo comportamento legato alla progettazione.
Informazioni
Un controllo OLE di esegue l'override del metodo di COleControl::OnGetControlInfo virtuale per consentire di contenitore ottenere una descrizione dei tasti di tasti di scelta rapida del controllo. Il metodo di OnGetControlInfo restituisce struttura compilata in uscita di tipo CONTROLINFO che contiene, tra le altre cose, un handle a una tabella dei tasti di scelta rapida. Questa tabella dei tasti di scelta rapida viene utilizzata dal contenitore per eseguire controlli per le chiavi tasti di scelta rapida. Quando il contenitore determina che un controllo di tasti di scelta rapida è stato premuto, IOleControl::OnMnemonic del controllo chiama metodo. In questo modo il framework MFC chiamare il metodo virtuale COleControl::OnMnemonic, che il controllo può eseguire l'override per eseguire un'elaborazione speciale.

Le implementazioni di Visual Basic 4.0 e OLE di MFC 4.0 gestione di tasti di scelta rapida controllo hanno requisiti diversi per le voci nella tabella dei tasti di scelta rapida restituita per mezzo di OnGetControlInfo.

Un tasto di scelta rapida utilizzato in una tabella dei tasti di scelta rapida è definito dalla struttura di ACCELERAZIONE. L'ACCELERATORE struttura presenta la seguente definizione:
   typedef struct tagACCEL   {       BYTE   fVirt;       WORD   key;       WORD   cmd;   } ACCEL;				
al membro fVirt specifica i flag di tasti di scelta rapida. Questo membro può essere una combinazione dei seguenti valori:
   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.				
al membro chiave specifica il tasto di scelta rapida. Questo membro può essere un codice di tasto virtuale oppure un codice di carattere ASCII.

Il membro di cmd Specifica l'identificatore di tasto di scelta rapida. Questo valore viene inserito nella parola di ordine inferiore del parametro wParam del messaggio WM_COMMAND o WM_SYSCOMMAND quando viene premuto il tasto di scelta.

Visual Basic 4.0 sono presenti i seguenti requisiti per le voci tabella di tasti di scelta rapida utilizzate per la gestione di tasti di scelta rapida:

  • È necessario che il membro fVirt sia una combinazione di (FVIRTKEY | FALT) o (FVIRTKEY | FALT | FSHIFT).
  • Il membro chiave deve essere maiuscolo.
  • Il membro cmd non deve essere uguale a 0.
MFC 4.0 sono presenti i seguenti requisiti per le voci tabella di tasti di scelta rapida utilizzate per la gestione di tasti di scelta rapida:

  • Il membro fVirt deve essere FALT o 0.
  • Il membro chiave deve essere minuscolo.
  • Il membro cmd viene ignorato.
Contenitori di controlli OLE di MFC 4.0 è inoltre diverse da Visual Basic 4.0 in modo che siano di gestire l'elaborazione tasti di scelta rapida, quando un controllo è attivo dell'interfaccia utente. Quando si gestiscono i contenitori MFC inpui da tastiera, verificare innanzitutto se il controllo OLE ha lo stato attivo. In caso affermativo, il framework chiama il metodo IOleInPlaceActiveObject::TranslateAccelerator. In COleControl l'implementazione di questo metodo che viene chiamata funzione PreTranslateMessage del controllo. Affinché un controllo OLE abbiano correttamente la funzione i tasti di scelta rapida quando il controllo è attivo dell'interfaccia utente, il controllo OLE deve eseguire l'override PreTranslateMessage e cercare le combinazioni di tasti speciali.

Nota : non è necessario se il controllo viene generato con Visual c ++ 5.0 o successiva poiché OnMnemonic verrà essere chiamato quando il controllo è attivo per mezzo di SendMnemonic in COccManager::IsDialogMessage UI override di PreTranslateMessage.

Il codice di esempio riportato di seguito viene illustrato un OnGetControlInfo sottoposto a override, PreTranslateMessage e OnMnemonic che consentono di tasti di scelta di un controllo funzioni correttamente in sia un contenitore di controlli OLE di MFC 4.0, nonché un contenitore di Visual Basic 4.0.

Codice di esempio

/* 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);}				

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 145698 - Ultima revisione: 03/01/2014 12:52:34 - Revisione: 5.1

  • Microsoft Foundation Class Library 4.2
  • kbnosurvey kbarchive kbmt kbinfo kbhowto kbtshoot kbacceleratorkey kbcode kbctrlcreate kbkeyaccel kbprb KB145698 KbMtit
Feedback