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
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