OWL WinHelp für OS/2

Willemers Informatik-Ecke

Eine WinHelp()-Funktion für OS/2

In der OWL für OS/2 ist die Hilfe leider nicht mehr realisiert worden. Die Header liegen unvollständig vor und die Funktion TWindow::WinHelp() ist nicht realisiert.

Beides ist kein großer Aufwand. In der PMWINDOW.H:

      #define HELP_CONTEXT      0x223   // HM_EXT_HELP (oder HM_KEYS_HELP?)
      #define HELP_QUIT         0x231   // special handling for OS/2
      #define HELP_INDEX        0x22a   // HM_HELP_INDEX
      #define HELP_CONTENTS     0x22b   // HM_HELP_CONTENTS
      #define HELP_HELPONHELP   0x22f
      #define HELP_SETINDEX     0x
      #define HELP_SETCONTENTS  0x
      #define HELP_CONTEXTPOPUP 0x
      #define HELP_FORCEFILE    0x
      #define HELP_KEY          0x22c // HM_HELP_KEYS
      #define HELP_COMMAND      0x
      #define HELP_PARTIALKEY   0x230  // HM_HELP_INDEX
      #define HELP_MULTIKEY     0x232
      #define HELP_SETWINPOS    0x

Die Funktion TWindows::WinHelp muß geschrieben werden:


/* Ergaenzung der OS/2-OWL um die WinHelp-Funktion.
 * wurde leider von Borland vollstaendig weggelassen.
 *
 * (C) Arnold Willemer 1996
 */

// Verbindung zur OS/2 Hilfe schlagen
#define INCL_WINHELP
#include 

// Einbindung in die TWindow-Klasse von OWL
#include 

// gibt es eine Hilfe? Wenn nicht, initialisieren. Dann ist HwndHilfe das Handle des Help-Kontexts
static HWND HwndHilfe = 0;

// Windows sendet HELP_QUIT und gut. OS/2 macht eine richtige Abmeldung des Help-Kontexts
static void CloseHelp(void)
{
	// Hilfe freigeben
	WinDestroyHelpInstance(HwndHilfe);
	HwndHilfe = 0;
}

// Ergaenze die TWindow-Klasse um WinHelp
BOOL TWindow ::WinHelp(const char * helpFile, unsigned int command, unsigned long data)
{
HELPINIT HelpInit;

	if (HwndHilfe==0) {
		// Initialierung der Hilfe
		HelpInit.cb = sizeof(HELPINIT);
		HelpInit.pszTutorialName=0;
		HelpInit.phtHelpTable=(PHELPTABLE)MAKEULONG(1,0xFFFF); // wer sollte das sein?
		HelpInit.hmodHelpTableModule=0;
		HelpInit.hmodAccelActionBarModule=0;
		HelpInit.idAccelTable=0;
		HelpInit.idActionBar=0;
		HelpInit.pszHelpWindowTitle="Hilfe";
		HelpInit.fShowPanelId=CMIC_HIDE_PANEL_ID;
		HelpInit.pszHelpLibraryName=(char *)helpFile;
		HwndHilfe = WinCreateHelpInstance(::WinQueryAnchorBlock(HWindow), &HelpInit);
		if (HwndHilfe && (HelpInit.ulReturnCode==0)) {
			WinAssociateHelpInstance(HwndHilfe, Parent->HWindow);
		} else if (command!=HELP_QUIT) {
			char message[80];
			sprintf(message, "Hilfesystem nicht ok (%d)", HelpInit.ulReturnCode);
			WinMessageBox(HWND_DESKTOP, HWindow, message, "Achtung", 0, MB_NOICON|MB_OK);
		}
	} // if (HwndHilfe==0)
	// Absetzen der Nachricht
	switch (command) {
	case HELP_HELPONHELP:
		WinSendMsg(HwndHilfe, HM_DISPLAY_HELP, 0, 0); // causes Using Help
		break;
	case HELP_KEY:
		WinSendMsg(HwndHilfe, HM_DISPLAY_HELP, (char *)data, (void *)HM_PANELNAME);
		break;
	case HELP_PARTIALKEY:	// fhrt unter Windows zum Suchen
	case HELP_INDEX:
		WinSendMsg(HwndHilfe, HM_HELP_INDEX, (void *)0, (void *)0);
		break;
	case HELP_CONTENTS:
		WinSendMsg(HwndHilfe, HM_HELP_CONTENTS, (void *)0, (void *)0);
		break;
	case HELP_QUIT:
		CloseHelp();
		break;
	case HELP_CONTEXT:
		char Msg[80];
		sprintf(Msg, "Kontext-Nr %d", data);
		WinMessageBox(HWND_DESKTOP, HWindow, Msg, "HELP_CONTEXT", 0, MB_OK);
		break;
	default:
		WinMessageBox(HWND_DESKTOP, HWindow, "no help type realized by owl", "Sorry", 0, MB_OK);
		break;
	}
}



Homepage - OWL-Index 22.9.2001 (C) Copyright 1999, 2001 Arnold Willemer