mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
270 lines
8.9 KiB
270 lines
8.9 KiB
/** FILE: keybd.c ********** Module Header ********************************
|
|
*
|
|
* Control panel applet for Keyboard configuration. This file holds
|
|
* everything to do with the "Keyboard" dialog box in the Control Panel.
|
|
*
|
|
* History:
|
|
* 12:30 on Tues 23 Apr 1991 -by- Steve Cathcart [stevecat]
|
|
* Took base code from Win 3.1 source
|
|
*
|
|
* Copyright (C) 1990-1991 Microsoft Corporation
|
|
*
|
|
*************************************************************************/
|
|
//==========================================================================
|
|
// Include files
|
|
//==========================================================================
|
|
// C Runtime
|
|
#include <stddef.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
// Application specific
|
|
#include "main.h"
|
|
|
|
//==========================================================================
|
|
// Local Definitions
|
|
//==========================================================================
|
|
#define KSPEED_MIN 0
|
|
#define KSPEED_MAX 31
|
|
#define KSPEED_RANGE (KSPEED_MAX - KSPEED_MIN + 1)
|
|
|
|
/* The following added for keyboard delay control by C. Stevens, Oct. 90 */
|
|
|
|
#define KDELAY_MIN 0
|
|
#define KDELAY_MAX 3
|
|
#define KDELAY_RANGE (KDELAY_MAX - KDELAY_MIN + 1)
|
|
|
|
#ifdef JAPAN /* V-KeijiY July.6.1992 */
|
|
#define SPI_KANJIMENU 8 // Defined in ptypes32.h
|
|
#endif
|
|
|
|
//==========================================================================
|
|
// External Declarations
|
|
//==========================================================================
|
|
|
|
|
|
//==========================================================================
|
|
// Local Data Declarations
|
|
//==========================================================================
|
|
int nSpeedScrollPos; /* current keyboard speed scroll bar position */
|
|
int nDelayScrollPos; /* current keyboard delay scroll bar position */
|
|
|
|
#ifdef JAPAN /* V-KeijiY June.30.1992 */
|
|
TCHAR szKanjiMode[6] = TEXT("roman");
|
|
TCHAR szKanjiMenu[] = TEXT("kanjimenu");
|
|
#endif
|
|
|
|
//==========================================================================
|
|
// Local Function Prototypes
|
|
//==========================================================================
|
|
|
|
//==========================================================================
|
|
// Functions
|
|
//==========================================================================
|
|
|
|
BOOL KeyboardDlg (HWND hDlg, UINT message, DWORD wParam, LONG lParam)
|
|
{
|
|
HWND hCtrl;
|
|
static int nKbdOrig;
|
|
int *pnScrollPtr;
|
|
int nMin, nMax, nRange;
|
|
|
|
static int wOriginalDelay = 2, wOriginalSpeed = 20;
|
|
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
HourGlass (TRUE);
|
|
|
|
#ifdef JAPAN /* V-KeijiY June.30.1992 */
|
|
GetProfileString (szWindows, szKanjiMenu,
|
|
szKanjiMode, szKanjiMode, CharSizeOf(szKanjiMode));
|
|
CheckRadioButton (hDlg, KEYMODE_ROMAN, KEYMODE_KANJI,
|
|
lstrcmpi(szKanjiMode, TEXT("kanji")) ?
|
|
KEYMODE_ROMAN : KEYMODE_KANJI);
|
|
#endif
|
|
|
|
/* Get initial settings and set up scroll bars. The keyboard delay
|
|
* scroll bar logic added by C. Stevens, Oct. 90
|
|
*/
|
|
|
|
SystemParametersInfo (SPI_GETKEYBOARDSPEED, 0,
|
|
(PVOID)(int * ) &wOriginalSpeed, FALSE);
|
|
SystemParametersInfo (SPI_GETKEYBOARDDELAY, 0,
|
|
(PVOID)(int * ) &wOriginalDelay, FALSE);
|
|
|
|
nSpeedScrollPos = wOriginalSpeed;
|
|
nDelayScrollPos = KDELAY_MAX - wOriginalDelay + KDELAY_MIN;
|
|
|
|
SetScrollRange (GetDlgItem (hDlg, KSPEED_SCROLL), SB_CTL, KSPEED_MIN, KSPEED_MAX, FALSE);
|
|
SetScrollPos (GetDlgItem (hDlg, KSPEED_SCROLL), SB_CTL, nSpeedScrollPos, FALSE);
|
|
|
|
SetScrollRange (GetDlgItem (hDlg, KDELAY_SCROLL), SB_CTL, KDELAY_MIN, KDELAY_MAX, FALSE);
|
|
SetScrollPos (GetDlgItem (hDlg, KDELAY_SCROLL), SB_CTL, nDelayScrollPos, FALSE);
|
|
|
|
HourGlass (FALSE);
|
|
break;
|
|
|
|
case WM_HSCROLL:
|
|
|
|
/* Determine which scroll bar is being used. Copy its attributes
|
|
* into nKbdOrig,nMin,nMax,nRange,pnScrollPtr, and hCtrl. This
|
|
* code added to process keyboard speed AND delay scrollbars.
|
|
* C. Stevens, Oct. 90
|
|
*/
|
|
|
|
if ((HWND) lParam == GetDlgItem (hDlg, KSPEED_SCROLL))
|
|
{
|
|
if (LOWORD(wParam) != SB_ENDSCROLL)
|
|
nKbdOrig = nSpeedScrollPos;
|
|
|
|
nMin = KSPEED_MIN;
|
|
nMax = KSPEED_MAX;
|
|
nRange = KSPEED_RANGE;
|
|
pnScrollPtr = &nSpeedScrollPos;
|
|
hCtrl = GetDlgItem (hDlg, KSPEED_SCROLL);
|
|
}
|
|
else
|
|
{
|
|
if (LOWORD(wParam) != SB_ENDSCROLL)
|
|
nKbdOrig = nDelayScrollPos;
|
|
|
|
nMin = KDELAY_MIN;
|
|
nMax = KDELAY_MAX;
|
|
nRange = KDELAY_RANGE;
|
|
pnScrollPtr = &nDelayScrollPos;
|
|
hCtrl = GetDlgItem (hDlg, KDELAY_SCROLL);
|
|
}
|
|
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case SB_LINEUP:
|
|
if (--(*pnScrollPtr) < nMin)
|
|
*pnScrollPtr = nMin;
|
|
break;
|
|
|
|
case SB_LINEDOWN:
|
|
if (++(*pnScrollPtr) > nMax)
|
|
*pnScrollPtr = nMax;
|
|
break;
|
|
|
|
case SB_PAGEUP:
|
|
if ((*pnScrollPtr -= (nRange / 4)) < nMin)
|
|
*pnScrollPtr = nMin;
|
|
break;
|
|
|
|
case SB_PAGEDOWN:
|
|
if ((*pnScrollPtr += (nRange / 4)) > nMax)
|
|
*pnScrollPtr = nMax;
|
|
break;
|
|
|
|
case SB_THUMBPOSITION:
|
|
*pnScrollPtr = HIWORD(wParam);
|
|
break;
|
|
|
|
case SB_TOP:
|
|
*pnScrollPtr = nMin;
|
|
break;
|
|
|
|
case SB_BOTTOM:
|
|
*pnScrollPtr = nMax;
|
|
break;
|
|
|
|
case SB_ENDSCROLL:
|
|
|
|
/* Form keyboard driver byte from keyboard delay and speed.
|
|
* Added by C. Stevens, Oct. 90
|
|
*/
|
|
|
|
// [stevecat] remove test to fix "boundary bug" - if user holds down arrow
|
|
// key until scroll thumb reaches end of scroll range, clipping
|
|
// of values (done above) will make this test fail - hence causing
|
|
// speed and/or delay to NOT be set.
|
|
// if (nKbdOrig != *pnScrollPtr)
|
|
// {
|
|
// Always set new speed and delay on EndScroll message
|
|
|
|
SystemParametersInfo (SPI_SETKEYBOARDSPEED, (WORD)nSpeedScrollPos,
|
|
0L, FALSE);
|
|
SystemParametersInfo (SPI_SETKEYBOARDDELAY, (WORD) KDELAY_MAX -
|
|
nDelayScrollPos + KDELAY_MIN, 0L, FALSE);
|
|
|
|
// }
|
|
SetDlgItemText(hDlg, KSPEED_EDIT, MYNUL);
|
|
break;
|
|
}
|
|
|
|
if (nKbdOrig != *pnScrollPtr && LOWORD(wParam) != SB_ENDSCROLL)
|
|
{
|
|
SetScrollPos(hCtrl, SB_CTL, *pnScrollPtr, TRUE);
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDD_HELP:
|
|
goto DoHelp;
|
|
|
|
#ifdef JAPAN /* V-KeijiY June.30.1992 */
|
|
case KEYMODE_ROMAN:
|
|
case KEYMODE_KANJI:
|
|
lstrcpy (szKanjiMode, (wParam == KEYMODE_KANJI ?
|
|
TEXT("kanji") : TEXT("roman") ));
|
|
CheckRadioButton(hDlg, KEYMODE_ROMAN, KEYMODE_KANJI, wParam);
|
|
break;
|
|
#endif
|
|
|
|
case IDOK:
|
|
HourGlass (TRUE);
|
|
|
|
#ifdef JAPAN /* V-KeijiY June.30.1992 */
|
|
if (!WriteProfileString (szWindows, szKanjiMenu, szKanjiMode))
|
|
MyMessageBox(hDlg, UTILS+1, INITS+1, MB_OK|MB_ICONINFORMATION);
|
|
SystemParametersInfo (SPI_KANJIMENU,
|
|
lstrcmpi (szKanjiMode, TEXT("kanji")) ?
|
|
2 : 3, (LONG) NULL, SPIF_SENDWININICHANGE );
|
|
#endif
|
|
|
|
/* Form keyboard driver byte from keyboard delay and speed.
|
|
* Added by C. Stevens, Oct. 90
|
|
*/
|
|
|
|
SystemParametersInfo (SPI_SETKEYBOARDSPEED, (WORD) nSpeedScrollPos,
|
|
0L, TRUE);
|
|
SystemParametersInfo (SPI_SETKEYBOARDDELAY, (WORD)KDELAY_MAX -
|
|
nDelayScrollPos + KDELAY_MIN, 0L,TRUE);
|
|
|
|
SendWinIniChange (szWindows);
|
|
EndDialog (hDlg, 0L);
|
|
HourGlass (FALSE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
|
|
/* restore original keyboard speed */
|
|
|
|
SystemParametersInfo (SPI_SETKEYBOARDSPEED, (WORD) wOriginalSpeed,
|
|
0L, FALSE);
|
|
SystemParametersInfo (SPI_SETKEYBOARDDELAY, (WORD) wOriginalDelay,
|
|
0L, FALSE);
|
|
EndDialog (hDlg, 0L);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
if (message == wHelpMessage)
|
|
{
|
|
DoHelp:
|
|
CPHelp (hDlg);
|
|
return TRUE;
|
|
}
|
|
else
|
|
return FALSE;
|
|
break;
|
|
}
|
|
return (TRUE);
|
|
}
|
|
|
|
|