Anımsatıcı arasındaki farklar MFC 4.0 ve Visual Basic 4.0 açıklaması

Makale çevirileri Makale çevirileri
Makale numarası: 145698 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Not Microsoft Visual C++ .NET 2002 ve Visual C++ .NET 2003, Microsoft .NET Framework tarafından sağlanan bir yönetilen kod model hem de yerel Microsoft Windows kod modeli yönetilmeyen destekler. Bu makaledeki bilgiler yalnızca yönetilmeyen Visual C++ kod uygulanır.Microsoft Visual C++ 2005, Microsoft .NET Framework tarafından sağlanan bir yönetilen kod model hem de yerel Microsoft Windows kod modeli yönetilmeyen destekler.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Bir OLE denetim kısayol tuşları'nı açıklar ve COleControl::OnGetControlInfo aracılığıyla sağlanan bir kısayol tuşu tablosu, MFC 4.0 hem Visual Basic 4.0 OLE denetimi kapsayıcılar çalışmaz.

Neden

Visual Basic 4.0 ve MFC 4.0; Bu nedenle, farklı Hızlandırıcı tablosu girdilerini gereksinim duydukları uygulamaları, işleme farklı başına anımsatıcı sağlar.

Çözüm

Hızlandırıcı denetimin anımsatıcıları bir Visual Basic 4.0 hem MFC 4.0 OLE denetimi kapsayıcısında işlenmesine olanak sağlayan Tablo girdileri oluşturun.

Durum

Bu davranış tasarım yüzündendir.

Daha fazla bilgi

Bir OLE denetimi kapsayıcısının denetim kısayol tuşları için bir açıklama almak izin vermek için sanal COleControl::OnGetControlInfo yöntemini geçersiz kılar. OnGetControlInfo yöntemi, bir <a1>türü</a1> içeren, diğer işlevlerinin yanı sıra, bir kısayol tuşu tablosu için bir tanıtıcı CONTROLINFO doldurulmuş dışarı yapısı döndürür. Kısayol tuşlarının denetimlerini yapmak için bu Hızlandırıcı tablo kapsayıcısı tarafından kullanılır. Kapsayıcı denetimi anımsatıcılarla olduğunu belirlediğinde, anahtar basılıştan, bu denetimin IOleControl::OnMnemonic çağırır yöntemi. Bu denetimin özel bir işlem yapmak için geçersiz kılabilirsiniz sanal COleControl::OnMnemonic yöntemini çağırmak MFC framework neden olur.

Visual Basic 4.0 ve MFC 4.0 OLE denetimi anımsatıcı işleme uygulamaları, OnGetControlInfo yoluyla iade Hızlandırıcı tablosundaki girişler için farklı gereksinimleri vardır.

Bir kısayol tuşu tablosunda kullanılan bir kısayol tuşu HıZLANDıRıCı yapısına göre tanımlanır. HıZLANDıRıCı aşağıdaki tanım yapısı vardır:
   typedef struct tagACCEL
   {
       BYTE   fVirt;
       WORD   key;
       WORD   cmd;
   } ACCEL;
				
fVirt üyeyi Hızlandırıcı bayrakları belirtir. Bu üye aşağıdaki değerlerden biri bir birleşimi olabilir:
   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.
				
anahtar üyeyi kısayol tuşu belirtir. Bu üye, bir sanal anahtarının kodu ya da bir <a0>ASCII</a0> karakter kodu olabilir.

Cmd üye Hızlandırıcı tanımlayıcısını belirtir. Bu değer, ve kısayol tuşu atamak basıldığında WM_COMMAND veya WM_SYSCOMMAND iletinin <a1>wParam</a1> parametresinin alt sıra sözcüğü yer alır.

Visual Basic 4.0 anımsatıcı işleme için kullanılan Hızlandırıcı tablosu girdisi için aşağıdaki gereksinimler vardır:

  • FVirt üye birleşimi olmalıdır (FVIRTKEY | FALT) veya (FVIRTKEY | FALT | FSHIFT).
  • Anahtar üye büyük olması gerekir.
  • Cmd üyesi sıfıra eşit olmalıdır.
MFC 4.0 anımsatıcı işleme için kullanılan Hızlandırıcı tablosu girdisi için aşağıdaki gereksinimler vardır:

  • FVirt üye FALT veya 0 olmalıdır.
  • Anahtar üye küçük olmalıdır.
  • Cmd üye yoksayılır.
MFC 4.0 OLE denetimi kapsayıcılar da Denetim UI etkin olduğunda, anımsatıcı işleme tanıtıcı şekilde Visual Basic 4.0 farklı. Klavye giriş MFC kapsayıcılar işlerken, ilk olarak bir OLE denetimi olmadığını etkin olduğunu denetleyin. Artıyorsa, çerçeve, IOleInPlaceActiveObject::TranslateAccelerator yöntemini ça??r?r. COleControl, bu yöntemi denetimin PreTranslateMessage işlev olarak adlandırılır. Sırada bir OLE denetimi anımsatıcıları işlevi denetimi kullanıcı ARABIRIMI etkin olduğunda doğru olması için OLE denetimi PreTranslateMessage ve onay için kendi özel tuş bileşimlerini geçersiz kılmak gerekir.

Not: PreTranslateMessage geçersiz kılma denetimi kullanıcı ARABIRIMI, SendMnemonic COccManager::IsDialogMessage içinde yoluyla etkin olduğunda OnMnemonic denir, çünkü denetimi Visual C++ 5.0 veya üstü oluşturulursa, bu gerekli değildir.

Aşağıdaki örnek kod, bir geçersiz kılınmış OnGetControlInfo PreTranslateMessage ve denetimin anımsatıcıları, hem bir MFC 4.0 OLE denetimi kapsayıcısında aynı zamanda bir Visual Basic 4.0 kapsayıcısı düzgün çalışmasına izin OnMnemonic gösterir.

Örnek kod

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

Özellikler

Makale numarası: 145698 - Last Review: 1 Mart 2014 Cumartesi - Gözden geçirme: 5.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Foundation Class Library 4.2, Ne zaman ne ile kullanilir:
    • 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
Anahtar Kelimeler: 
kbnosurvey kbarchive kbmt kbinfo kbhowto kbtshoot kbacceleratorkey kbcode kbctrlcreate kbkeyaccel kbprb KB145698 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:145698

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