1///////////////////////////////////////////////////////////////////////////// 2// Name: src/msw/helpwin.cpp 3// Purpose: Help system: WinHelp implementation 4// Author: Julian Smart 5// Modified by: 6// Created: 04/01/98 7// RCS-ID: $Id: helpwin.cpp 38791 2006-04-18 09:56:17Z ABX $ 8// Copyright: (c) Julian Smart 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12// For compilers that support precompilation, includes "wx.h". 13#include "wx/wxprec.h" 14 15#ifdef __BORLANDC__ 16 #pragma hdrstop 17#endif 18 19#if wxUSE_HELP 20 21#ifndef WX_PRECOMP 22#endif 23 24#include "wx/filefn.h" 25#include "wx/msw/helpwin.h" 26 27#include <time.h> 28 29#ifdef __WXMSW__ 30#include "wx/msw/private.h" 31#endif 32 33#include <string.h> 34 35static HWND GetSuitableHWND(wxWinHelpController* controller) 36{ 37 if (controller->GetParentWindow()) 38 return (HWND) controller->GetParentWindow()->GetHWND(); 39 else if (wxTheApp->GetTopWindow()) 40 return (HWND) wxTheApp->GetTopWindow()->GetHWND(); 41 else 42 return GetDesktopWindow(); 43} 44 45IMPLEMENT_DYNAMIC_CLASS(wxWinHelpController, wxHelpControllerBase) 46 47bool wxWinHelpController::Initialize(const wxString& filename) 48{ 49 m_helpFile = filename; 50 return true; 51} 52 53bool wxWinHelpController::LoadFile(const wxString& file) 54{ 55 if (!file.empty()) 56 m_helpFile = file; 57 return true; 58} 59 60bool wxWinHelpController::DisplayContents(void) 61{ 62 if (m_helpFile.empty()) return false; 63 64 wxString str = GetValidFilename(m_helpFile); 65 66 return (WinHelp(GetSuitableHWND(this), (const wxChar*) str, HELP_FINDER, 0L) != 0); 67} 68 69bool wxWinHelpController::DisplaySection(int section) 70{ 71 // Use context number 72 if (m_helpFile.empty()) return false; 73 74 wxString str = GetValidFilename(m_helpFile); 75 76 return (WinHelp(GetSuitableHWND(this), (const wxChar*) str, HELP_CONTEXT, (DWORD)section) != 0); 77} 78 79bool wxWinHelpController::DisplayContextPopup(int contextId) 80{ 81 if (m_helpFile.empty()) return false; 82 83 wxString str = GetValidFilename(m_helpFile); 84 85 return (WinHelp(GetSuitableHWND(this), (const wxChar*) str, HELP_CONTEXTPOPUP, (DWORD) contextId) != 0); 86} 87 88bool wxWinHelpController::DisplayBlock(long block) 89{ 90 DisplaySection(block); 91 return true; 92} 93 94bool wxWinHelpController::KeywordSearch(const wxString& k, 95 wxHelpSearchMode WXUNUSED(mode)) 96{ 97 if (m_helpFile.empty()) return false; 98 99 wxString str = GetValidFilename(m_helpFile); 100 101 return (WinHelp(GetSuitableHWND(this), (const wxChar*) str, HELP_PARTIALKEY, (DWORD)(const wxChar*) k) != 0); 102} 103 104// Can't close the help window explicitly in WinHelp 105bool wxWinHelpController::Quit(void) 106{ 107 return (WinHelp(GetSuitableHWND(this), 0, HELP_QUIT, 0L) != 0); 108} 109 110// Append extension if necessary. 111wxString wxWinHelpController::GetValidFilename(const wxString& file) const 112{ 113 wxString path, name, ext; 114 wxSplitPath(file, & path, & name, & ext); 115 116 wxString fullName; 117 if (path.empty()) 118 fullName = name + wxT(".hlp"); 119 else if (path.Last() == wxT('\\')) 120 fullName = path + name + wxT(".hlp"); 121 else 122 fullName = path + wxT("\\") + name + wxT(".hlp"); 123 return fullName; 124} 125 126#endif // wxUSE_HELP 127