home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
tolkit45.zip
/
os2tk45
/
samples
/
pm
/
dragdrop
/
draghelp.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-05-11
|
14KB
|
417 lines
/**************************************************************************
* File name : draghelp.c
*
* Description: This file contains all the routines for interfacing
* with the IPF help manager.
*
* This source file contains the following functions:
*
* InitHelp(hab, hwnd)
* HelpUsingHelp(hwnd)
* HelpGeneral(hwnd)
* HelpIndex(hwnd)
* HelpProductInfo(hwnd)
* DestroyHelpInstance(hwnd)
* ProductInfoDlgProc(hwnd, msg, mp1, mp2)
* SetSysMenu(hwnd)
*
* Concepts : IPF Help Manager
*
* API's : WinLoadString
* WinCreateHelpInstance
* WinAssociateHelpInstance
* WinSendMsg
* WinDlgBox
* WinDestroyHelpInstance
* WinDefDlgProc
* WinWindowFromID
*
* Required
* Files : OS2.H, STRING.H, STDIO.H, DRAGDROP.H, DRAGHELP.H
*
* Copyright (C) 1991 IBM Corporation
*
* DISCLAIMER OF WARRANTIES. The following [enclosed] code is
* sample code created by IBM Corporation. This sample code is not
* part of any standard or IBM product and is provided to you solely
* for the purpose of assisting you in the development of your
* applications. The code is provided "AS IS", without
* warranty of any kind. IBM shall not be liable for any damages
* arising out of your use of the sample code, even if they have been
* advised of the possibility of such damages. *
*************************************************************************/
/*
* Include files, macros, defined constants, and externs
*/
#define INCL_WINHELP
#define INCL_WINSTDDRAG
#define INCL_WINMENUS
#define INCL_WINFRAMEMGR
#include <os2.h>
#include <string.h>
#include <stdio.h>
#include "dragdrop.h"
#include "draghelp.h"
#define HELPLIBRARYNAMELEN 20
/*
* Global variables
*/
static HWND hwndHelpInstance;
static CHAR szLibName[HELPLIBRARYNAMELEN];
static CHAR szWindowTitle[HELPLIBRARYNAMELEN];
static BOOL fHelpEnabled;
/*
* Entry point declarations
*/
MRESULT EXPENTRY ProductInfoDlgProc(HWND hwnd,
USHORT msg,
MPARAM mp1,
MPARAM mp2);
/**************************************************************************
*
* Name : InitHelp(hab, hwnd)
*
* Description: Initializes the IPF help facility
* Called once during initialization of the program
*
* Concepts : Initializes the HELPINIT structure and creates the
* help instance. If successful, the help instance
* is associated with the main window queue
*
* API's : WinLoadString
* WinCreateHelpInstance
* WinAssociateHelpInstance
*
* Parameters : hab = anchor block handle
* hwndMain = main window handle
*
* Return : [none]
*
*************************************************************************/
VOID InitHelp(HAB hab, HWND hwndMain)
{
HELPINIT hini;
/* If we return because of an error, Help will be disabled. */
fHelpEnabled = FALSE;
/* initialize help init structure */
hini.cb = sizeof(HELPINIT);
hini.ulReturnCode = 0L;
hini.pszTutorialName = (PSZ)NULL;
hini.phtHelpTable = (PHELPTABLE)MAKELONG(DRAGDROP_HELP_TABLE, 0xFFFF);
hini.hmodHelpTableModule = 0;
hini.hmodAccelActionBarModule = 0;
hini.idAccelTable = 0;
hini.idActionBar = 0;
if(!WinLoadString(hab,
0,
IDS_CLIENTCLASS,
HELPLIBRARYNAMELEN,
(PSZ)szWindowTitle))
{
MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, FALSE);
return;
}
hini.pszHelpWindowTitle = (PSZ)szWindowTitle;
hini.fShowPanelId = CMIC_HIDE_PANEL_ID;
if(!WinLoadString(hab,
0,
IDS_HELPLIBRARYNAME,
HELPLIBRARYNAMELEN,
(PSZ)szLibName))
{
MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, FALSE);
return;
}
hini.pszHelpLibraryName = (PSZ)szLibName;
/* creating help instance */
hwndHelpInstance = WinCreateHelpInstance(hab, &hini);
if(!hwndHelpInstance)
{
MessageBox(hwndMain, IDMSG_HELPNOTAVAILABLE, MB_OK | MB_ERROR, TRUE);
return;
}
if(hini.ulReturnCode)
{
MessageBox(hwndMain, IDMSG_HELPCREATEERROR, MB_OK | MB_ERROR, TRUE);
return;
}
/* associate help instance with main frame */
if(!WinAssociateHelpInstance(hwndHelpInstance, hwndMain))
{
MessageBox(hwndMain, IDMSG_HELPASSOCIATEERROR, MB_OK | MB_ERROR, TRUE);
return;
}
/* help manager is successfully initialized so set flag to TRUE */
fHelpEnabled = TRUE;
} /* End of InitHelp */
/**************************************************************************
*
* Name : HelpUsingHelp(hwnd)
*
* Description: Processes the Using help choice from the Help pulldown
*
* Concepts : Processes the WM_COMMAND message posted by the
* Using Help item of the Help menu
* Called from MainCommand when the Using Help
* menu item is selected
* Sends an HM_DISPLAY_HELP message to the help
* instance so that the default Using Help is
* displayed.
*
* API's : WinSendMsg
*
* Parameters : hwndMain = main window handle
*
* Return : [none]
*
*************************************************************************/
VOID HelpUsingHelp(HWND hwndMain)
{
/* this just displays the system using help panel */
if(fHelpEnabled)
if (NULL != WinSendMsg(hwndHelpInstance, HM_DISPLAY_HELP,
(MPARAM)NULL, (MPARAM)NULL))
{
MessageBox(hwndMain, IDMSG_HELPDISPLAYERROR, MB_OK | MB_ERROR,
FALSE);
}
} /* End of HelpUsingHelp */
/**************************************************************************
*
* Name : HelpGeneral(hwnd)
*
* Description: Processes the General help choice from the Help pulldown
*
* Concepts : Processes the WM_COMMAND message posted by the
* General Help item of the Help menu
* Called from MainCommand when the General Help
* menu item is selected
* Sends an HM_EXT_HELP message to the help
* instance so that the default Extended Help is
* displayed.
*
* API's : WinSendMsg
*
* Parameters : hwndMain = main window handle
*
* Return : [none]
*
*************************************************************************/
VOID HelpGeneral(HWND hwndMain)
{
/* this just displays the system general help panel */
if(fHelpEnabled)
if(NULL != WinSendMsg(hwndHelpInstance, HM_EXT_HELP,
(MPARAM)NULL, (MPARAM)NULL))
MessageBox(hwndMain,
IDMSG_HELPDISPLAYERROR,
MB_OK | MB_ERROR,
FALSE);
} /* End of HelpGeneral */
/**************************************************************************
*
* Name : HelpIndex(hwnd)
*
* Description: Processes the Help index choice from the Help pulldown
*
* Concepts : Processes the WM_COMMAND message posted by the
* Help index item of the Help menu
* Called from MainCommand when the Help index
* menu item is selected
* Sends an HM_INDEX_HELP message to the help
* instance so that the Help index is displayed.
*
* API's : WinSendMsg
*
* Parameters : hwndMain = main window handle
*
* Return : [none]
*
*************************************************************************/
VOID HelpIndex(HWND hwndMain)
{
/* this just displays the system help index panel */
if(fHelpEnabled)
if(NULL != WinSendMsg(hwndHelpInstance, HM_HELP_INDEX,
(MPARAM)NULL, (MPARAM)NULL))
MessageBox(hwndMain,
IDMSG_HELPDISPLAYERROR,
MB_OK | MB_ERROR,
FALSE);
} /* End of HelpIndex */
/**************************************************************************
*
* Name : HelpProductInfo(hwndMain)
*
* Description: Processes the Product information choice from the Help
* pulldown
*
* Concepts : Processes the WM_COMMAND message posted by the
* Product information item of the Help menu
* Called from MainCommand when the Product information
* menu item is selected
* Calls WinDlgBox to display the Product information
* dialog.
*
* API's : WinSendMsg
*
* Parameters : hwndMain = main window handle
*
* Return : [none]
*
*************************************************************************/
VOID HelpProductInfo(HWND hwndMain)
{
/* display the Product Information dialog. */
if(DID_ERROR == WinDlgBox(HWND_DESKTOP,
hwndMain,
(PFNWP)ProductInfoDlgProc,
0,
IDD_PRODUCTINFO,
(PVOID)NULL))
MessageBox(HWND_DESKTOP,
IDMSG_CANTSTARTDIALOG ,
MB_OK | MB_ERROR,
TRUE);
} /* End of HelpProductInfo */
/**************************************************************************
*
* Name : DestroyHelpInstance()
*
* Description: Deletes the application's help instance
*
* Concepts : Calls WinDestroyHelp Instance to delete the instance
*
* API's : WinDestroyHelpInstance
*
* Parameters : [none]
*
* Return : [none]
*
*************************************************************************/
VOID DestroyHelpInstance(VOID)
{
if(hwndHelpInstance != 0L)
{
WinDestroyHelpInstance(hwndHelpInstance);
}
} /* End of DestroyHelpInstance */
/**************************************************************************
*
* Name : ProductInfoDlgProc(hwnd, msg, mp1, mp2)
*
* Description: Processes all messages sent to the Product
* information dialog
*
* Concepts : Called for each message sent to the Product information
* dialog box.
*
* the Product information dialog has only a button control, so this
* routine processes only WM_COMMAND messages. Any
* WM_COMMAND posted must have come from the OK
* button, so we dismiss the dialog upon receiving it.
*
* API's : WinDefDlgProc
*
* Parameters : [none]
*
* Return : dependent on message sent
*
*************************************************************************/
MRESULT EXPENTRY ProductInfoDlgProc(HWND hwnd,
USHORT msg,
MPARAM mp1,
MPARAM mp2)
{
switch (msg)
{
case WM_INITDLG:
SetSysMenu(hwnd); /* system menu for this dialog */
return (MRESULT)NULL;
default:
return WinDefDlgProc(hwnd, msg, mp1, mp2);
}
return (MRESULT)NULL;
} /* End of ProductInfoDlgProc */
/**************************************************************************
*
* Name : SetSysMenu(hDlg)
*
* Description: Enables only the Move and Close items in the
* system menu pulldown for any dialog
*
* Concepts :
*
* API's : WinWindowFromID
* WinSendMsg
*
* Parameters : hDlg = dialog handle
*
* Return : [none]
*
*************************************************************************/
VOID SetSysMenu( HWND hDlg )
{
HWND hSysMenu;
MENUITEM Mi;
SHORT Pos;
ULONG Id;
SHORT cItems;
/*
* We only want Move and Close in the system menu.
*/
hSysMenu = WinWindowFromID(hDlg, FID_SYSMENU);
WinSendMsg( hSysMenu, MM_QUERYITEM
, MPFROM2SHORT(SC_SYSMENU, FALSE), MPFROMP((PCH) & Mi));
Pos = 0;
cItems = (SHORT)WinSendMsg( Mi.hwndSubMenu, MM_QUERYITEMCOUNT,
(MPARAM)NULL, (MPARAM)NULL);
while (cItems--)
{
Id = (ULONG) WinSendMsg( Mi.hwndSubMenu, MM_ITEMIDFROMPOSITION
, MPFROM2SHORT(Pos, TRUE), (MPARAM)NULL);
switch (SHORT1FROMMP(Id))
{
case SC_MOVE:
case SC_CLOSE:
Pos++; /* Don't delete that one. */
break;
default:
WinSendMsg( Mi.hwndSubMenu, MM_DELETEITEM
, MPFROM2SHORT(Id, TRUE), (MPARAM)NULL);
}
}
} /* End of SetSysMenu */
/*************************** End of draghelp.c *************************/