TN028: Bağlama duyarlı yardım desteği

Bu Not, Yardım içeriklerini kimlikleri (başka bir deyişle, konu numaraları) ve diğer Yardım konuları, mfc 2.0 atama kurallarını açıklar. İçerik duyarlı yardım desteği, Visual c++ Professional sürümünde kullanılabilen Yardım derleyicisini gerektirir.

Desteklenen Yardım türleri

İki tür Windows uygulamalarında uygulamaya bağlama duyarlı yardım vardır. Birincisi, bilinen "F1 Yardım" etkin nesneye dayalı uygun içerikli WinHelp başlatılması içerir. İkincisi ise, üst karakter + F1 modu. Bu modda, fare imlecini (birlikte ok + soru işareti) Yardım imlecine dönüşür ve kullanıcı nesnesi üzerinde yardım istiyorum tıklayın devam eder. Bu noktada WinHelp kullanıcının tıkladığı nesne için yardım veren açıldı.

Microsoft Foundation classes her ikisi de yardım bu formları uygular. Ayrıca, iki basit yardım komutu, Yardım ve yardımcı çerçeve destekler.

Yardım dosyaları

Microsoft Foundation classes tek bir Yardım dosyası varsayalım. Yardım dosyası aynı adı ve yolu olarak uy&gulama olmalıdır (.exe - gt;.HLP).

Bu, kullanıcı-ebilmek değişmek isterseniz m_pszHelpFilePath adlı ortak CWinApp üye değişkeni olduğunu.

Yardım içeriği aralıkları

0x00000000 - 0x0000FFFF: kullanıcı tanımlı

0x00010000 - 0x0001FFFF: komutları (menüler/komut düğmeleri)

nbsp;  0X00010000 + &NO_

nbsp;  (Not: 0x18000 - > 0x1FFFF ise pratik aralığı komut kimliklerini bu yana > = 0x8000)

0x00020000 - 0x0002FFFF: pencereler ve iletişim kutuları

   0X00020000 + IDR_

nbsp;  (Not: 0x20000 - > 0x27FFF ise pratik aralığı IDRs beri < = 0x7FFF)

0x00030000 - 0x0003FFFF: hata iletileri (hata dizesi Kimliğine göre)

   0X00030000 + IDP_

0x00040000 - 0x0004FFFF: özel amaçlı (istemci olmayan alanları)

   0x00040000 + HitTest alanı

0x00050000 - 0x0005FFFF: denetimler (Bu komut olmayan)

   0X00040000 + IDW_

Bu kurallar, sabit kodlanmış Microsoft Foundation classes varsayılan uygulanması. Çeşitli üye Yardım ile ilgili fonksiyonları farklı uygulamaları sağlayarak kılınabilir.

"Yardım" basit komutları

Microsoft Foundation classes tarafından uygulanan iki basit Help komut:

Bu iki komut sadece uygulamanın Yardım dizinini göstermek ve sırasıyla WinHelp programı kullanarak kullanıcı yardımı göster.

Bağlama duyarlı Yardım (F1 Yardım)

Bu içerik duyarlı Yardım, (genellikle F1 Yardım adlandırılır) ilk şeklidir. Kullanıcı, görev el (etkin pencerenin veya menü öğesi) Yardım almak için F1'e basar. "Yardım modu" özel yer.

F1 tuşuna, genellikle tarafından ana pencerenin Hızlandırıcı tablo yerleştirilen bir Hızlandırıcı etki ID_HELP kimliği bir komutun çevrilir. ID_HELP komutu, bir buton ID_HELP ana pencereyi veya iletişim kutusunu kimliği ile de oluşturulabilir. Ayrıca, menü veya iletişim kutusu etkin olduğu ve kullanıcı F1 tuşuna bastığında vuruşu bir ID_HELP komut çevirmek için kodlanmış.

ID_HELP komutu oluşturulur ancak (komut yönlendirme Microsoft Foundation classes mimarisi hakkında daha fazla bilgi için bakın Teknik Not 21.) Bu komut işleyici ulaşana kadar bu normal komut olarak yönlendirilir Uygulama Yardımı etkin ise, ID_HELP komutu CWinApp::OnHelp işlev tarafından işlenecek. Varsayılan komut yönlendirme en belirgin bağlamı belirlemek için yeterli değildir çünkü komutu yerine her zaman uygulama nesnesine yönlendirilir ve özel Yardım için yönlendirme uğrar.

CWinApp::OnHelp aşağıdaki sırayla WinHelp başlatma girişiminde

  1. Kontroller için bir Yardım kimliği ile etkin bir AfxMessageBox arama Bir ileti kutusu etkin ise, bu mesaj kutusuna uygun içerikli WinHelp açıldı.

  2. Hiçbir ileti kutusu etkin ise, CWinApp::OnHelp bir wm_commandhelp (bir iletiyi Microsoft Foundation classes özel) etkin pencereye gönderir. Bu penceredeki WinHelp başlatarak yanıt vermezse, aynı mesajı sonra bu pencerenin üst ileti işleme veya geçerli pencerenin üst düzey pencere kadar gönderilir (ve bu nedenle bir üst pencere yok).

  3. İleti işlenmemiş kalırsa, varsayılan Yardım çağrılır. Bu ana penceresine bir ID_DEFAULT_HELP komutu göndererek yapılır. Bu komut genellikle CWinApp::OnHelpIndex için eşleştirilir.

Genel olarak kimliği temel değerleri komutları, iletişim kutuları vb. gibi kaynakların 0x20000 (0x10000) geçersiz kılmak için uygulama CWinApp::WinHelpgeçersiz kılmak. Her ikisi de tek bir Yardım dosyası paylaşmak beri bu aslında ClassWizard ve AppWizard uygulamalar kendilerini uygulanmasında, yapılır.

Bu işlevsellik ve Yardım içeriği belirlenir yol geçersiz kılmak için bir uygulama wm_commandhelp mesaj (aşağıya bakınız) işlemesi gerekir. Çerçeve sağlar daha olarak yalnızca geçerli MDI alt penceresi olarak derin gider daha özel Yardım yönlendirme sağlamak isteyebilirsiniz. Veya belirli bir pencere veya iletişim--belki bu nesne ya da iletişim içinde etkin denetimi geçerli iç durumu göre daha özel yardım sağlamak isteyebilirsiniz.

WM_COMMANDHELP

afx_msg lresult CWnd::OnCommandHelp (wparam, lparam lParam)

Wm_commandhelp Yardım istendiğinde, etkin pencereyi tarafından alınan bir mfc özel Windows iletisidir. Pencerenin bu iletiyi aldığında, pencerenin iç durumu eşleşen içeriği ile CWinApp::WinHelp çağırabilir.

lParam

şu anda kullanılabilir Yardım içeriği içerir. lParam sıfır ise, hiçbir yardım içeriği henüz belirledi. Bağlam Kimliğinin lParam içinde bir "iyi" bağlamında belirlemek için kullanabilirsiniz ya da sadece o-ebilmek geçmek için CWinApp::WinHelp OnCommandHelp uygulaması.

wParam

kullanılmaz ve sıfır olacak.

CWinApp::WinHelp OnCommandHelp işlevini çağırır, true dönmesi gerekir. Bu komut, diğer sınıfların (ana sınıfları) ve diğer windows yönlendirme gerçek durur döndürme.

Yardım modu (Üstkrktr + F1 Yardım)

Bu içerik duyarlı Yardım ikinci şeklidir. Genellikle bu tarz ÜSTKRKT + F1 tuşlarına basarak veya menü veya araç ile girilir. Bu komut (ID_CONTEXT_HELP) olarak uygulanır. Bu komut ise kalıcı bir iletişim kutusu çevirmek için ileti süzgeci kanca kullanılmaz veya menüsü etkin, ana mesajı pompa (CWinApp::Run) uygulama çalıştırırken bu nedenle bu komut yalnızca kullanıcı için kullanılabilir.

Uygulama normalde o bölgede (örneğin, çevresindeki pencere boyutlandırma kenarlığı) için imleci kendi görüntüler bile bu tarz girdikten sonra uygulamanın tüm alanlar üzerinde Yardım fare imleci görüntülenir. Kullanıcı komut seçmek için fare veya klavyeyi kullanmak mümkün. Komutu yürütmeden yerine komut hakkında Yardım görüntülenir. Kullanıcı ekranında, araç çubuğunda bir düğme gibi görünen bir nesne tıklatabilirsiniz ve bu nesne için Yardım görüntülenir. Bu mod Yardım CWinApp::OnContextHelp tarafından sağlanan.

Bu döngü yürütülmesi sırasında tüm klavye girişi menüsüne erişim tuşları dışında etkin değil. Ayrıca, komut çeviri hala bir Hızlandırıcı tuşuna basın ve komut hakkında yardım almak izin veren PreTranslateMessage ile gerçekleştirilir.

Belirli çeviriler veya üst karakter + F1 Yardım modu sırasında gerçekleşmesi gerektiğini PreTranslateMessage işlevinde yer alıyor eylemler varsa, bu işlemleri gerçekleştirmeden önce CWinApp m_bHelpMode üyesi kontrol etmelisiniz. PreTranslateMessage CDialog uygulanması bu IsDialogMessage, örneğin çağırmadan önce denetler. Bu kalıcı olmayan iletişim kutuları "iletişim gezinti" tuşlarını SHIFT + F1 modu sırasında devre dışı bırakır. Ayrıca, CWinApp::OnIdle hala bu döngü sırasında denir.

Kullanıcı menüsünde bir komutu seçerse, bu komut yardım olarak ele alınır ( wm_commandhelp, aşağıya bakınız). Uygulama penceresinin görünür bir alanı tıkladığında, bir nonclient veya bir istemci tıklatın olduğu gibi bir belirleme yapılır. OnContextHelp otomatik olarak nonclient tıklama için istemci tıklama haritalama işler. Eğer bir istemci seçeneğini tıklatın, daha sonra tıklandığında pencereye WM_HELPHITTEST gönderir. Bu penceredeki sıfır dışında bir değer döndürürse, bu değeri içerik Yardım için kullanılır. Sıfır döndürür OnContextHelp üst pencere dener (ve başarısız olan, üst vb.). Yardım içeriği belirlenemiyor varsayılan sonra (genellikle) CWinApp::OnHelpIndex için eşleştirilmiş ana penceresinde, ID_DEFAULT_HELP komut göndermek için ise.

WM_HELPHITTEST

afx_msg lresult CWnd::OnHelpHitTest (wparam, lparam lParam)

WM_HELPHITTEST SHIFT + F1 Yardım modunda tıklandığında etkin pencere tarafından alınan bir mfc özel windows iletisidir. Pencerenin bu iletiyi aldığında, WinHelp tarafından yardımcı bir dword kimliği kullanmak döndürür.

LOWORD(lParam)

burada fare pencerenin istemci alanının göreli tıklayan x ekseni aygıt koordinat içerir.

HIWORD(lParam)

y koordinatı içerir.

wParam

kullanılmaz ve sıfır olacak. Dönüş değeri sıfır ise, bu bağlamda ile WinHelp denir. Dönüş değeri sıfır ise, ana pencere yardım için sorgulanır.

Birçok durumda bulunanlar test kodu zaten olabilir yararlanabilirim. CToolBar::OnHelpHitTest (güçlendirir kodu, düğme ve CControlBararaç ipuçlarında isabet sınaması kodlar) WM_HELPHITTEST ileti işleme bir örnek için bkz:.

Mfc AppWizard destek ve makehm

AppWizard bir Yardım dosyası (.cnt ve .hpj dosyaları) oluşturmak için gerekli dosyaları oluşturur. Ayrıca önceden oluşturulmuş bir dizi içerir.rtf dosyaları Microsoft Yardım derleyici tarafından kabul edilir. Birçok konu tam, ama bazı özel uygulamanız için değiştirilmesi gerekebilir.

Otomatik oluşturma "eşleme Yardım" dosyasını, makehm adlı bir yardımcı program tarafından desteklenir. makehm yardımcı programı, bir uygulamanın kaynak çevirebilir.H dosyası bir Yardım eşleme dosyası. Örneğin:

# define IDD_MY_DIALOGnbsp;  2000
# define ID_MY_COMMA&ND 150

çevrileceğini:

HIDD_MY_DIALOGnbsp;   0x207d0
HID_MY_COMMA&ND 0X10096

Bu biçim, konu adları (sol tarafındaki simgeler) içerik kimlikleri (sağındaki sayılar) Haritalar Yardım derleyicisini 's tesisi ile uyumludur.

Makehm kaynak kodu mfc programlama Utilties örnek mevcuttur makehm.

AppWizard çalıştırdıktan sonra yardım desteği ekleme

Uygulamanızın yardım eklemek için en iyi yolu, uygulama oluşturmadan önce "Bağlam duyarlı Yardım" seçeneğini AppWizard'ın Seçenekleri iletişim kutusunda kontrol etmektir. Bu şekilde AppWizard otomatik olarak Yardım Destek CWinApp türetilmiş sınıf için gerekli ileti eşleme girdilerini ekler.

Uygulamanızın yardım desteği olmadan zaten oluşturduysanız ve şimdi eklemek istiyorsanız, bkz: Visual c++ programlama Kılavuzu.

İleti kutularını Yardım

İleti kutuları (uyarıları denir) Yardım AfxMessageBox işlevi, MessageBox Windows API için bir wrapper aracılığıyla desteklenir.

AfxMessageBox, bir dize kimliği ile kullanmak ve başka (LPCTSTR) dize işaretçisi ile kullanmak için iki sürümü vardır:

int AFXAPI AfxMessageBox(LPCSTR lpszText, UINT nType, UINT nIDHelp);
int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT nType, UINT nIDHelp)

Her iki durumda da, isteğe bağlı bir Yardım kimliği olduğunu.

İlk durumda, 0, bu ileti kutusunu hiç yardımına gösterir nIDHelp için varsayılandır. Gibi ileti kutusunu etkin durumdayken kullanıcı F1 tuşuna bastığında, (Uygulama Yardımı destekliyor bile) kullanıcı yardım almaz. Bu arzu değil, bir yardımcı kimliği nIDHelp için sağlanmalıdır.

İkinci durumda, için nIDHelp belirten Yardım kimliği nIDPrompt ile aynıdır -1 öntanımlıdır. Yalnızca uygulama tabii ki yardım etkin Yardım çalışmaz). İleti kutusu yardım desteği yok olmasını isterseniz nIDHelp için 0 sağlamalıdır. Etkin yardım var ama nIDPrompt daha bir farklı yardım kimliği arzu, sadece nIDHelp nIDPrompt farklı pozitif bir değer sağlamak için iletiyi istesin.

Teknik notlar numarasına göre |nbsp; Teknik notlar kategorisine göre

Index