2013-04-08 22 views
5

Eski bir MFC uygulamasında bakım gerçekleştiriyorum. Yardım iletişim kutusundaki Yazdır düğmesini devre dışı bırakmamız gerekiyor. Sisteme bağlı yazıcı yok ve kullanıcı yardım penceresindeki Yazdır düğmesine bastığında uygulama çöküyor.Html Yardımı'nda Yazdır düğmesini devre dışı bırak

kod sadece Windows Yardım iletişim kutusunu açmak için standart HtmlHelpA yöntemini kullanır:

void CNiftyView::OnHelp() 
{ 
    CString csHelpFile; 
    csHelpFile.Format("%s/NiftyHelp.chm", NiftyDoc::GetHelpPath()); 
    ::HtmlHelpA(m_hWnd, csHelpFile, HH_HELP_CONTEXT, IDH_NIFTY_SECTION); 
} 

buldum bilgiler, Yardım HTML stil bazı kodla Yazdır düğmesini baskılayabilir (http://www.sagehill.net/docbookxsl/HtmlHelp.html) . Ama bu yardım dosyasını yeniden derlemeyi gerektirir ve bunu yapmayı tercih ederim. Ayrıca, her bölmenin HH_WINTYPE yapısını değiştirerek HTML Yardım Görüntüleyicisi'ni özelleştirebileceğinizi söyleyen bazı bilgiler buldum, ancak bunu nasıl yaptığınıza dair hiçbir bilgi (http://msdn.microsoft.com/en-us/library/ms524435%28v=vs.85%29.aspx).

HTML Yardımı görüntüleyicide bu Yazdır düğmesini programlı olarak devre dışı bırakmanın bir yolu var mı? aşağıdaki gibi

+1

* "sistemi ve uygulama çöker bağlı bir yazıcı yoktur. "* Bu bana garip geliyor. Kesinlikle HTML Yardım ekibi, makineye hiç bir yazıcının bağlı olmadığı durum için test edildi. Aslında, ben onların dev makineleri muhtemelen onlara bağlı bir yazıcı yoktu bahse girerim. Diğer * yazdırma düğmeleri tıklandığında sistem çöküyor mu? –

+0

HTML Yardımı, sizinkinden başka bir uygulama yardımıyla yazdırmaya çalıştığınızda çöküyor mu? –

+0

Bence bu çok garip. Yazdırmak için başka bir uygulama bulmak zordur, çünkü bu yerleşik bir sistemdir (WES7) ve Notepad veya WordPad gibi uygulamaların standart düzenini içermez. – Frecklefoot

cevap

6

Sen Baskı düğmesi olmadan CHM yardım dosyası gösterebilir: HH_GET_WIN_TYPE komutuyla

  • Çağrısı HtmlHelp CHM dosyasında tanımlanan HTML Yardım Görüntüleyici parametreleri içeren bir HH_WINTYPE yapıya bir işaretçi alır.
  • Döndürülmüş yapıyı kopyalayın. (Döndürülen yapının değiştirilmesi doğrudan çalışmaz.)
  • HHWIN_BUTTON_PRINT değerini dışlamak için yapının fsToolBarFlags üyesini değiştirin.
  • komutunu kullanarak HH_WINTYPE yapısını yeniden HtmlHelp işlevine geçirin.

Örnek C++ kodu *: çok amatör kod yüzden

HH_WINTYPE *pwt = NULL; 
LPCWSTR pszFile = L"MyFile.chm"; 
LPCWSTR pszWin = L"MyFile.chm>Main"; // "Main" is the window type defined in the CHM file 

// Get the window type definition 
HWND hWndHelp = HtmlHelp(NULL, pszWin, HH_GET_WIN_TYPE, (DWORD) &pwt); 

if (pwt) { 
    // Copy the contents of the returned structure 
    HH_WINTYPE wt = *pwt; 

    // Remove the "Print" toolbar button from the window definition 
    wt.fsToolBarFlags &= ~HHWIN_BUTTON_PRINT; 
    wt.cbStruct = sizeof(wt); // force the correct size 

    // Set the new window type 
    hWndHelp = HtmlHelp(NULL, pszFile, HH_SET_WIN_TYPE, (DWORD) &wt); 

    // Display help 
    hWndHelp = HtmlHelp(NULL, pszFile, HH_DISPLAY_TOPIC, NULL); 
} 

Neredeyse, C++ bilmiyorum. Lütfen düzenlemek ve geliştirmek için ücretsiz düştü. HH_WINTYPE, HH_GET_WIN_TYPE ve HH_SET_WIN_TYPE kullanmanın

fazla örnek: Kullanıcı yardım penceresindeki Yazdır düğmesini basarsa
How To Programmatically Create a Tri-pane HTML Help Window
How to use the unmanaged HTML Help API from a managed Visual C# application

+0

Bence tam da aradığım şey bu; Bir deneyeceğim. Teşekkürler! – Frecklefoot

+1

CHM dosyasını yazdırmak isteyen kullanıcıların Seçenekler düğmesini tıklayıp açılır menüden "Yazdır" ı seçeceklerine dikkat edilmelidir. "Seçenekler" düğmesini de kaldırmak isteyebilirsiniz: 'wt.fsToolBarFlags & = ~ (HHWIN_BUTTON_PRINT | HHWIN_BUTTON_OPTIONS);' – izogfif