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

Traduzione articoli Traduzione articoli
Identificativo articolo: 145698 - Visualizza i prodotti a cui si riferisce l?articolo.
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.
Espandi tutto | Chiudi tutto

In questa pagina

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 4
void 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);
}
				

Proprietà

Identificativo articolo: 145698 - Ultima modifica: sabato 1 marzo 2014 - Revisione: 5.1
Le informazioni in questo articolo si applicano a:
  • Microsoft Foundation Class Library 4.2 alle seguenti piattaforme
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft OLE Control Developer's Kit (CDK)
    • Microsoft Visual C++ 2005 Express Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
    • Microsoft Visual C++ .NET 2002 Standard Edition
Chiavi: 
kbnosurvey kbarchive kbmt kbinfo kbhowto kbtshoot kbacceleratorkey kbcode kbctrlcreate kbkeyaccel kbprb KB145698 KbMtit
Traduzione automatica articoli
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.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 145698
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com