Aracılığıyla paylaş


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

Bu not, Yardım içerikleri kimlikleri ve diğer Yardım konuları, mfc atama kuralları açıklar.Visual C++'da kullanılabilir Yardım derleyicisi bağlama duyarlı yardım desteği gerektirir.

[!NOT]

Bağlama duyarlı Yardım WinHelp kullanarak uygulamanın yanı sıra, mfc de html Yardım'ı kullanarak destekler.Bu desteği ve html Yardımı ile programlama hakkında daha fazla bilgi için bkz: html Yardımı: programlarınızı Context-Sensitive yardımına.

Desteklenen Yardım türleri

İki tür Windows uygulamalarında uygulanan bağlama duyarlı Yardım vardır.İlk ifade için WinHelp etkin nesnesini temel alan uygun içerik ile başlatılıyor "F1 Yardım" içerir.İkinci "Shift + F1" modudur.Bu modda, fare imlecini Yardım imlecine dönüşür ve kullanıcı nesne üzerinde tıklatmaya devam eder.Bu noktada, kullanıcıyı tıklattığı nesnesi için Yardım vermek için WinHelp başlattı.

Microsoft temel sınıfları Yardım bu formları her ikisini de uygulayın.Buna ek olarak, framework, iki basit Yardım komutları Yardım dizini ve Yardım kullanarak destekler.

Yardım dosyaları

Microsoft temel sınıfları tek bir Yardım dosyası varsayalım.Yardım dosyası uygulama adı ve yolu olmalıdır.Örneğin, çalıştırılabilir C:\MyApplication\MyHelp.exe ise Yardım dosyası C:\MyApplication\MyHelp.hlp olmalıdır.Yol boyunca ayarlamak m_pszHelpFilePath üye değişkeni CWinApp sınıfı.

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

mfc varsayılan uygulama programı Yardım içeriği kimlikleri atama hakkında bazı kurallara uymak gerekir.Bu bir aralığı, belirli denetimleri için ayrılmış kimlikleri kurallardır.Çeşitli Yardım ilgili üye işlevleri farklı uygulamaları sağlayarak bu kurallar geçersiz kılabilirsiniz.

0x00000000 - 0x0000FFFF : user defined
0x00010000 - 0x0001FFFF : commands (menus/command buttons)
   0x00010000 + ID_
   (note: 0x18000-> 0x1FFFF is the practical range since command IDs are >=0x8000)
0x00020000 - 0x0002FFFF : windows and dialogs
   0x00020000 + IDR_
   (note: 0x20000-> 0x27FFF is the practical range since IDRs are <= 0x7FFF)
0x00030000 - 0x0003FFFF : error messages (based on error string ID)
   0x00030000 + IDP_
0x00040000 - 0x0004FFFF : special purpose (non-client areas)
   0x00040000 + HitTest area
0x00050000 - 0x0005FFFF : controls (those that are not commands)
   0x00040000 + IDW_

"Yardım" basit komutları

Microsoft Foundation sınıfları tarafından uygulanan iki basit Yardım komutları şunlardır:

İlk komut, uygulamanın Yardım dizinini gösterir.İkinci WinHelp program kullanarak kullanıcı Yardımı gösterir.

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

F1 tuşu genellikle komut kimliği ile çevrilmiş ID_HELP ana pencerenin Hızlandırıcı tablo yerleştirilmiş bir Hızlandırıcı olarak.ID_HELP Komut de üretilmesine kimliği olan bir düğme ile ID_HELP ana pencereyi veya iletişim kutusunu.

Bakılmaksızın nasıl ID_HELP komut üretilir, komut işleyicisi ulaşıncaya kadar normal bir komut olarak yönlendirilir.mfc komut yönlendirme mimarisi hakkında daha fazla bilgi için bakın Teknik Not 21.Etkin Yardım uygulaması varsa, ID_HELP komutu işlenen tarafından CWinApp::OnHelp.Uygulama nesnesi Yardım iletisi alır ve sonra komut uygun şekilde yönlendirir.Varsayılan yönlendirme komutu en belirgin bağlamı belirlemek için yeterli olmadığından, bu gereklidir.

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

  1. Denetler için etkin bir AfxMessageBox bir Yardım No ile aramaBir ileti kutusu etkin ise, ileti kutusu uygun içerik ile WinHelp başlattı.

  2. Etkin pencereyi wm_commandhelp iletisi gönderir.Söz konusu pencereyi WinHelp başlatarak yanıt vermezse, aynı iletiyi ileti işleme veya geçerli pencerenin üst düzey pencere olduğu kadar sonra o pencereyi öncüleri için gönderilir.

  3. ID_DEFAULT_HELP komutu, ana penceresine gönderir.Bu varsayılan Yardım'ı başlatır.Bu komut genellikle eşleştirilir CWinApp::OnHelpIndex.

Genel olarak (örn: varsayılan kimliği temel değerleri geçersiz kılmak için0x10000 komutları ve iletişim kutuları gibi kaynakların 0x20000) uygulama geçersiz kılıp kılmayacağını CWinApp::WinHelp.

Bu işlevsellik ve Yardım içeriği belirlenir biçimini geçersiz kılmak için wm_commandhelp iletisi işlemek.Framework sağladığından geçerli MDI alt penceresi olarak derinlikte sadece gider gibi daha özel Yardım yönlendirme sağlamak isteyebilirsiniz.Belirli bir pencere veya iletişim kutusunda, belki iç veya geçerli durumunu o nesnenin etkin denetimi iletişim içinde temel daha ayrıntılı yardım sağlamak isteyebilirsiniz.

WM_COMMANDHELP

afx_msg LRESULT CWnd::OnCommandHelp(WPARAM wParam, LPARAM lParam)

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

  • lParam
    Şu anda kullanılabilir Yardım içeriği içeriyor.lParamYardım içeriği yok belirlenen sıfır olur.Uygulaması OnCommandHelp bağlam Kimliğinin kullanabilirsiniz lParam için yalnızca kendisine iletebilir veya farklı bir içerik belirlemek CWinApp::WinHelp.

  • wParam
    Kullanılmaz ve sıfır olacaktır.

OnCommandHelp İşlev çağrıları CWinApp::WinHelp, iade etmelisiniz TRUE.Dönme TRUE bu komut, diğer sınıflara ve diğer Windows yönlendirme durdurur.

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

Bu ikinci bağlama duyarlı Yardım biçimidir.Bu mod genellikle ÜstKrkt + F1 tuşlarına basarak ya da menü/araç ile girilir.Komut olarak uygulanır (ID_CONTEXT_HELP).İleti süzgeci hook bu komutu çalışırken bir kalıcı iletişim kutusu çevirmek için kullanılmaz veya etkin menü, ana mesaj pompasına ihtiyaç uygulama çalıştırırken bu nedenle bu komut yalnızca kullanıcı için kullanılabilir (CWinApp::Run).

Uygulama kendi imleci bu alana (Pencere boyutlandırma etrafındaki) normal olarak görüntülenir, bu mod girdikten sonra tüm uygulama alanlarını Yardım fare imleci görüntülenir.Kullanıcı komut seçmek için fare veya klavyeyi kullanabilirsiniz.Komutu çalıştırmak yerine bu komutla ilgili Yardım görüntülenir.Ayrıca, kullanıcı araç çubuğunda bir düğme gibi ekranda görünür bir nesneyi tıklatın ve bu nesne için Yardım görüntülenir.Bu mod Yardım tarafından sağlanan CWinApp::OnContextHelp.

Bu döngü yürütülürken tüm giriş klavye menüsü erişim tuşları dışında etkin değil.Ayrıca, komut çevirisi hala aracılığıyla gerçekleştirilir PreTranslateMessage bir kısayol tuşuna basın ve bu komutla ilgili Yardım almak kullanıcı izin vermek.

Varsa belirli çevirileri veya alma eylemleri koyun PreTranslateMessage üst karakter + F1 Yardım modunda kontrol etmelisiniz gerçekleşmesi gerekir işlev m_bHelpMode üyesi CWinApp bu işlemleri gerçekleştirmeden önce.CDialog Uygulaması PreTranslateMessage bu aramadan önce denetler IsDialogMessage, örneğin.Bu "iletişim gezinti" adlı engelleyici olmayan iletişim kutuları tuşları üst karakter + F1 modunu sırasında devre dışı bırakır.Buna ek olarak, CWinApp::OnIdle Bu döngü sırasında yine de denir.

Kullanıcı menüsünde bir komutu seçerse, bu komutla ilgili Yardım olarak ele alınır (aracılığıyla wm_commandhelp, aşağıya bakın).Kullanıcı uygulama penceresinin görünür bir alanı tıklatırsa, bir nonclient veya bir istemci olup gibi bir belirleme yapılır.OnContextHelpnonclient tutamaçları eşleştirme otomatik olarak istemci tıklatma tıklatır.İstemci tıklatın ise daha sonra gönderir bir WM_HELPHITTEST tıklandığını penceresine.Söz konusu pencereyi sıfır olmayan bir değer döndürürse, bu değer Yardım için içerik kullanılır.Sıfır döndürür, OnContextHelp ana penceresinde çalışır (ve başarısız olan, üst vb.).Yardım içeriği belirlenemiyorsa göndermek varsayılandır bir ID_DEFAULT_HELP sonra (genellikle) eşleştirilir ana penceresinde, komut CWinApp::OnHelpIndex.

WM_HELPHITTEST

afx_msg LRESULT CWnd::OnHelpHitTest(WPARAM, LPARAM lParam)

WM_HELPHITTEST etkin pencerenin üst karakter + F1 Yardım modu sırasında tıklatılmış alınan mfc özel windows iletisi.Pencere bu iletiyi aldığında, dword Yardım kimliği kullanmak için WinHelp döndürür.

  • LOWORD(lParam)
    x ekseni aygıt koordinat penceresi istemci alanına göre fareyi tıklattığınız içerir.

  • HIWORD(lParam)
    Y koordinatı içerir.

  • wParam
    kullanılmaz ve sıfır olacaktır.Dönüş değeri sıfır ise WinHelp o içerikle denir.Dönüş değeri sıfır ise, ana penceresinde Yardım için sorgulanır.

Çoğu durumda, isabet sınaması kodu zaten olabilir sağlayabilirler.Bkz: CToolBar::OnHelpHitTest işleme bir örnek için WM_HELPHITTEST ileti (düğme ve ipuçlarında kullanılan isabet sınaması kodu kodu kullanır CControlBar).

mfc uygulaması Sihirbazı destek ve makehm

mfc uygulaması Sihirbazı Yardım dosyası (.cnt ve .hpj dosyaları) oluşturmak için gerekli dosyaları oluşturur.Ayrıca, Microsoft Yardım Derleyici tarafından kabul edilen videosuna .rtf dosyaları sayısını içerir.Birçok konular tamamlandı, ancak bazı özel uygulamanız için değiştirilmesi gerekebilir.

"Eşleme Yardım" dosyasını otomatik olarak oluşturulmasını makehm adlı bir yardımcı program tarafından desteklenir.makehm yardımcı programı, bir uygulamanın kaynak çevirebilirsiniz.Yardım eşleme dosyası dosya h.Örne?in:

#define IDD_MY_DIALOG   2000
#define ID_MY_COMMAND   150

çevrileceğini:

HIDD_MY_DIALOG    0x207d0
HID_MY_COMMAND    0x10096

Bu biçim, içerik kimlikleri (sağ tarafındaki numaraları) (sol tarafındaki simgeler) konu adlarla eşleştiren Yardım derleyicisi 's tesis uyumludur.

mfc programlama Utilities örnek kullanılabilir kaynak kodu makehm makehm.

mfc uygulaması Sihirbazı'nı çalıştırdıktan sonra Yardım desteği ekleme

Uygulamanızın Yardım eklemek için en iyi yolu, uygulamanızın oluşturmadan önce "Context-sensitive Yardım" seçeneğini mfc uygulaması Sihirbazı'nın Gelişmiş Özellikler sayfasında kontrol etmektir.Böylece mfc uygulaması Sihirbazı otomatik olarak gerekli ileti eşleme girdilerini ekler, CWinApp-türetilmiş sınıf Yardım desteklemek için.

İleti kutularını Yardım

İleti kutuları (uyarılar da denir) Yardımı ile desteklenen AfxMessageBox işlevi, için bir sarıcı MessageBox Windows API.

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

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

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

Bu durumda, Yardım için bu ileti kutusunu gösterir 0 nIDHelp için varsayılandır.Gibi ileti kutusunu etkin durumdayken kullanıcı F1 tuşuna bastığında, (uygulama Yardımı destekliyor olsa bile) kullanıcı yardım almanız gerekmez.Arzu değil, Yardım kimliği nIDHelp için sağlanmalıdır.

İkinci durumda, nIDHelp için varsayılan değer Yardım kimliği nIDPrompt aynı olduğunu gösterir -1 ' dir.Yalnızca uygulama tabii Yardım etkin olduğunda Yardım çalışır).İleti kutusu Yardım desteği yok isterseniz nIDHelp için 0 sağlamalıdır.Yardım etkin, ancak istediğiniz nIDPrompt'den farklı Yardım kimliği, basitçe nIDPrompt farklı nIDHelp pozitif bir değer sağlamak için iletiyi istediğiniz.

Ayrıca bkz.

Diğer Kaynaklar

Teknik notlar numarasına göre

Kategoriye göre teknik notlar