Beschreibung der mnemonische Unterschiede zwischen MFC 4.0- und Visual Basic 4.0

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 145698 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Hinweis: Microsoft Visual C++ .NET 2002 und Microsoft Visual C++ .NET 2003 unterstützen sowohl das verwaltete Codemodell, das von Microsoft .NET Framework zur Verfügung gestellt wird als auch nicht verwaltete systemeigene Microsoft Windows-Codemodell. Die Informationen in diesem Artikel beziehen sich nur auf nicht verwalteten Visual C++-Code.Microsoft Visual C++ 2005 unterstützt das verwaltete Codemodell, das von Microsoft .NET Framework bereitgestellt wird und nicht verwaltete systemeigene Microsoft Windows-Codemodell.
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Eine Zugriffstastentabelle mithilfe von COleControl::OnGetControlInfo, die ein OLE-Steuerelement mnemonischen Tasten beschreibt bereitgestellten funktioniert nicht in MFC 4.0- und Visual Basic 4.0-OLE-Steuerelementcontainer.

Ursache

Visual Basic 4.0 und MFC 4.0 bieten verschiedene mnemonische Behandlung Implementierungen so erfordern unterschiedliche Accelerator-Tabelleneinträge.

Lösung

Erstellen Sie Zugriffstasten Tabelleneinträge, mit der Meldungsvorverarbeitung in einer Visual Basic 4.0 und MFC 4.0-OLE-Steuerelementcontainer behandelt werden können.

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Weitere Informationen

Ein OLE-Steuerelement überschreibt die virtuelle COleControl::OnGetControlInfo-Methode zu seinem Container um eine Beschreibung des Steuerelements mnemonischen Tasten zu erhalten. Die OnGetControlInfo-Methode gibt eine ausgefüllte Struktur des Typs CONTROLINFO, die unter anderem ein Handle für eine Zugriffstastentabelle enthält. Diese Zugriffstastentabelle wird vom Container zum überprüft mnemonischen Tasten führen. Wenn der Container bestimmt, dass ein Steuerelement mnemonische ist gedrückt wurde, wird die IOleControl::OnMnemonic des Steuerelements aufgerufen Methode. Dadurch wird das MFC-Framework aufrufen die virtuelle COleControl::OnMnemonic-Methode, die des Steuerelements überschreiben kann, um spezielle Verarbeitungsschritte durchzuführen.

Die Visual Basic 4.0 und MFC 4.0-OLE-Steuerelement mnemonische Behandlung Implementierungen haben unterschiedliche Anforderungen für die Einträge in der Zugriffstastentabelle mithilfe von OnGetControlInfo zurückgegeben.

In einer Zugriffstastentabelle verwendete Zugriffstaste wird durch die ZUGRIFFSTASTE Struktur definiert. Die ZUGRIFFSTASTE Struktur weist folgende Definition:
   typedef struct tagACCEL
   {
       BYTE   fVirt;
       WORD   key;
       WORD   cmd;
   } ACCEL;
				
das fVirt-Member gibt die Accelerator-Flags. Dieser Member kann eine Kombination der folgenden Werte sein:
   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.
				
das Schlüssel-Member gibt die Zugriffstaste an. Dieser Member kann eine virtuelle Taste Code oder einen ASCII-Zeichen-Code sein.

Der Cmd-Member gibt den Zugriffstasten-Bezeichner. Dieser Wert wird im niedrigwertigen Wort des wParam-Parameters der WM_COMMAND oder WM_SYSCOMMAND Nachricht platziert, wenn die Zugriffstaste gedrückt wird.

Visual Basic 4.0 gelten folgende Anforderungen für die Accelerator-Tabelleneinträge für mnemonische Behandlung verwendet:

  • Das fVirt-Element muss eine Kombination sein (FVIRTKEY | FALT) oder (FVIRTKEY | FALT | FSHIFT).
  • Der Schlüssel Member muss Großbuchstaben sein.
  • Das Cmd-Element darf nicht gleich 0 sein.
MFC 4.0 gelten die folgenden Anforderungen für Zugriffstasten-Tabelleneinträge für mnemonische Behandlung verwendet:

  • Das fVirt-Element muss FALT oder 0 sein.
  • Das Schlüssel-Element muss Kleinbuchstaben sein.
  • Das Cmd-Mitglied wird ignoriert.
MFC 4.0-OLE-Steuerelementcontainer unterscheiden sich auch von Visual Basic 4.0 in der Weise, die Sie mnemonische verarbeiten behandeln, wenn ein Steuerelement UI aktiv ist. Bei der Behandlung Tastatur Eingaben MFC-Container zunächst überprüfen Sie, ob eine OLE-Steuerelement den Fokus hat. Wenn dies der Fall ist, ruft das Framework die IOleInPlaceActiveObject::TranslateAccelerator-Methode. In der COleControl Implementierung dieser Methode des Steuerelements PreTranslateMessage-Funktion aufgerufen. Damit ein OLE-Steuerelement seine Funktion mnemonische Zeichen richtig haben, wenn das Steuerelement UI aktiv ist muss das OLE Control PreTranslateMessage und überprüfen seine speziellen Tastenkombinationen überschreiben.

Hinweis : Überschreiben von PreTranslateMessage ist nicht erforderlich, wenn das Steuerelement mit Visual C++ 5.0 oder höher generiert, wird da OnMnemonic aufgerufen wird, wenn das Steuerelement Benutzeroberfläche mithilfe von SendMnemonic in COccManager::IsDialogMessage aktiv ist.

Der folgende Beispielcode zeigt eine überschriebene OnGetControlInfo, PreTranslateMessage und OnMnemonic, die eine Meldungsvorverarbeitung in sowohl als Container für MFC 4.0-OLE-Steuerelements sowie ein Visual Basic 4.0-Container ordnungsgemäß zu ermöglichen.

Beispielcode

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

Eigenschaften

Artikel-ID: 145698 - Geändert am: Samstag, 1. März 2014 - Version: 5.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Foundation Class Library 4.2, wenn verwendet mit:
    • 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
Keywords: 
kbnosurvey kbarchive kbmt kbinfo kbhowto kbtshoot kbacceleratorkey kbcode kbctrlcreate kbkeyaccel kbprb KB145698 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 145698
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

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