1/////////////////////////////////////////////////////////////////////////////
2// Name:        src/msw/penwin.cpp
3// Purpose:     PenWindows code
4// Author:      Julian Smart
5// Modified by:
6// Created:     04/01/98
7// RCS-ID:      $Id: penwin.cpp 37162 2006-01-26 16:50:23Z 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#ifndef WX_PRECOMP
20    #include "wx/window.h"
21#endif
22
23#include "wx/msw/private.h"
24
25#if wxUSE_PENWINDOWS
26
27#ifdef __BORLANDC__
28#define RPA_DEFAULT 1
29#else
30#include <penwin.h>
31#endif
32
33HANDLE g_hPenWin = (HANDLE)NULL;
34typedef void (CALLBACK * PENREGPROC)(WORD,BOOL);
35
36// The routine below allows Windows applications (binaries) to
37// support Pen input when running under Microsoft Windows for
38// Pen Computing 1.0 without need of the PenPalete.
39//
40// Should masked edit functions be added to wxWidgets we would
41// be a new class of functions to support BEDIT controls.
42//
43// (The function is a NOOP for native Windows-NT)
44#ifndef __WIN32__
45static  void (CALLBACK * RegPenApp) (WORD, BOOL) = NULL;
46#endif
47
48// Where is this called??
49void wxEnablePenAppHooks (bool hook)
50{
51#ifndef __WIN32__
52  if (hook)
53    {
54      if (g_hPenWin)
55      return;
56
57      ///////////////////////////////////////////////////////////////////////
58      // If running on a Pen Windows system, register this app so all
59      // EDIT controls in dialogs are replaced by HEDIT controls.
60      if ((g_hPenWin = (HANDLE)::GetSystemMetrics (SM_PENWINDOWS)) != (HANDLE) NULL)
61      {
62        // We do this fancy GetProcAddress simply because we don't
63        // know if we're running Pen Windows.
64        if ((RegPenApp = (PENREGPROC)GetProcAddress (g_hPenWin, "RegisterPenApp")) != NULL)
65          (*RegPenApp) (RPA_DEFAULT, TRUE);
66      }
67    }
68  else
69    {
70      ///////////////////////////////////////////////////////////////////////
71      // If running on a Pen Windows system, unregister
72      if (g_hPenWin)
73      {
74        // Unregister this app
75        if (RegPenApp != NULL)
76          (*RegPenApp) (RPA_DEFAULT, FALSE);
77        g_hPenWin = (HANDLE) NULL;
78      }
79    }
80#endif /* ! Windows-NT */
81}
82
83#endif
84  // End wxUSE_PENWINDOWS
85
86void wxRegisterPenWin(void)
87{
88#if wxUSE_PENWINDOWS
89///////////////////////////////////////////////////////////////////////
90// If running on a Pen Windows system, register this app so all
91// EDIT controls in dialogs are replaced by HEDIT controls.
92// (Notice the CONTROL statement in the RC file is "EDIT",
93// RegisterPenApp will automatically change that control to
94// an HEDIT.
95  if ((g_hPenWin = (HANDLE)::GetSystemMetrics(SM_PENWINDOWS)) != (HANDLE)NULL) {
96    // We do this fancy GetProcAddress simply because we don't
97    // know if we're running Pen Windows.
98   if ( (RegPenApp = (void (CALLBACK *)(WORD, BOOL))GetProcAddress(g_hPenWin, "RegisterPenApp"))!= NULL)
99     (*RegPenApp)(RPA_DEFAULT, TRUE);
100  }
101///////////////////////////////////////////////////////////////////////
102#endif
103}
104
105void wxCleanUpPenWin(void)
106{
107#if wxUSE_PENWINDOWS
108  if (g_hPenWin) {
109    // Unregister this app
110    if (RegPenApp != NULL)
111      (*RegPenApp)(RPA_DEFAULT, FALSE);
112  }
113#endif
114}
115