/*++ Copyright (c) 2000 Microsoft Corporation Module Name: buttons.c Abstract: Tablet PC Buttons Property Sheet module. Environment: User mode Author: Michael Tsang (MikeTs) 20-Apr-2000 Revision History: --*/ #include "pch.h" #ifdef BUTTONPAGE #define NUM_HOTKEY_BUTTONS 2 BUTTON_SETTINGS gButtonSettings = {0}; DWORD gButtonTags[NUM_BUTTONS] = { 0x00000004, 0x00000002, 0x00000001, 0x00000010, 0x00000008 }; int giButtonComboIDs[] = { IDC_BUTTON_1, IDC_BUTTON_2, IDC_BUTTON_3, IDC_BUTTON_4, IDC_BUTTON_5 }; COMBOBOX_STRING ButtonComboStringTable[] = { ButtonNoAction, IDS_BUTCOMBO_NONE, InvokeNoteBook, IDS_BUTCOMBO_INVOKENOTEBOOK, PageUp, IDS_BUTCOMBO_PAGEUP, PageDown, IDS_BUTCOMBO_PAGEDOWN, AltEsc, IDS_BUTCOMBO_ALTESC, AltTab, IDS_BUTCOMBO_ALTTAB, Enter, IDS_BUTCOMBO_ENTER, Esc, IDS_BUTCOMBO_ESC, 0, 0 }; DWORD gButtonsHelpIDs[] = { IDC_BUTTON_1, IDH_BUTTONS_BUTTONMAP, IDC_BUTTON_2, IDH_BUTTONS_BUTTONMAP, IDC_BUTTON_3, IDH_BUTTONS_BUTTONMAP, IDC_BUTTON_4, IDH_BUTTONS_BUTTONMAP, IDC_BUTTON_5, IDH_BUTTONS_BUTTONMAP, 0, 0 }; /***************************************************************************** * * @doc EXTERNAL * * @func INT_PTR | ButtonsDlgProc | * Dialog procedure for the buttons page. * * @parm IN HWND | hwnd | Window handle. * @parm IN UINT | uMsg | Message. * @parm IN WPARAM | wParam | Word Parameter. * @parm IN LPARAM | lParam | Long Parameter. * * @rvalue Return value depends on the message. * *****************************************************************************/ INT_PTR APIENTRY ButtonsDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { TRACEPROC("ButtonsDlgProc", 2) INT_PTR rc = FALSE; static BOOL fInitDone = FALSE; TRACEENTER(("(hwnd=%p,Msg=%s,wParam=%x,lParam=%x)\n", hwnd, LookupName(uMsg, WMMsgNames), wParam, lParam)); switch (uMsg) { case WM_INITDIALOG: rc = InitButtonPage(hwnd); if (rc == FALSE) { EnableWindow(hwnd, FALSE); } else { fInitDone = TRUE; } break; case WM_NOTIFY: { NMHDR FAR *lpnm = (NMHDR FAR *)lParam; switch (lpnm->code) { case PSN_APPLY: RPC_TRY("TabSrvSetButtonSettings", rc = TabSrvSetButtonSettings(ghBinding, &gButtonSettings)); if (rc == FALSE) { ErrorMsg(IDSERR_TABSRV_SETBUTTONSETTINGS); } break; } break; } case WM_COMMAND: { int iButtonMapping; int i, j; switch (LOWORD(wParam)) { case IDC_BUTTON_1: i = BUTTON_1; goto ButtonCommon; case IDC_BUTTON_2: i = BUTTON_2; goto ButtonCommon; case IDC_BUTTON_3: i = BUTTON_3; goto ButtonCommon; case IDC_BUTTON_4: i = BUTTON_4; goto ButtonCommon; case IDC_BUTTON_5: i = BUTTON_5; ButtonCommon: switch (HIWORD(wParam)) { case CBN_SELCHANGE: iButtonMapping = (int)SendMessage(GetDlgItem(hwnd, LOWORD(wParam)), CB_GETCURSEL, 0, 0); j = MapButtonTagIndex(i); if (iButtonMapping != gButtonSettings.ButtonMap[j]) { // // Mapping has changed, mark the property // sheet dirty. // gButtonSettings.ButtonMap[j] = iButtonMapping; SendMessage(GetParent(hwnd), PSM_CHANGED, (WPARAM)hwnd, 0); rc = TRUE; } break; } break; case IDC_HOTKEY1: case IDC_HOTKEY2: switch (HIWORD(wParam)) { case EN_UPDATE: { int hk1, hk2; BOOL fOK1, fOK2; hk1 = GetDlgItemInt(hwnd, IDC_HOTKEY1, &fOK1, FALSE); hk2 = GetDlgItemInt(hwnd, IDC_HOTKEY2, &fOK2, FALSE); if (fOK1 && fOK2 && (hk1 > 0) && (hk1 <= NUM_BUTTONS) && (hk2 > 0) && (hk2 <= NUM_BUTTONS)) { gButtonSettings.dwHotKeyButtons = gButtonTags[hk1 - 1] | gButtonTags[hk2 - 1]; SendMessage(GetParent(hwnd), PSM_CHANGED, (WPARAM)hwnd, 0); } else if (fInitDone) { SendMessage((HWND)lParam, EM_SETSEL, 0, -1); MessageBeep(MB_ICONEXCLAMATION); } break; } } break; } break; } case WM_HELP: WinHelp((HWND)((LPHELPINFO)lParam)->hItemHandle, TEXT("tabletpc.hlp"), HELP_WM_HELP, (DWORD_PTR)gButtonsHelpIDs); break; case WM_CONTEXTMENU: WinHelp((HWND)wParam, TEXT("tabletpc.hlp"), HELP_CONTEXTMENU, (DWORD_PTR)gButtonsHelpIDs); break; } TRACEEXIT(("=%x\n", rc)); return rc; } //ButtonsDlgProc /***************************************************************************** * * @doc INTERNAL * * @func BOOL | InitButtonPage | * Initialize the Button property page. * * @parm IN HWND | hwnd | Window handle. * * @rvalue SUCCESS | Returns TRUE. * @rvalue FAILURE | Returns FALSE. * *****************************************************************************/ BOOL InitButtonPage( IN HWND hwnd ) { TRACEPROC("InitButtonPage", 2) BOOL rc; TRACEENTER(("(hwnd=%x)\n", hwnd)); RPC_TRY("TabSrvGetButtonSettings", rc = TabSrvGetButtonSettings(ghBinding, &gButtonSettings)); if (rc == TRUE) { int i, j; int HotKeys[2] = {0, 0}; for (i = 0; i < NUM_BUTTONS; i++) { InsertComboBoxStrings(hwnd, giButtonComboIDs[i], ButtonComboStringTable); j = MapButtonTagIndex(i); SendDlgItemMessage(hwnd, giButtonComboIDs[i], CB_SETCURSEL, gButtonSettings.ButtonMap[j], 0); } for (i = 0, j = 0; i < NUM_BUTTONS; i++) { if (gButtonSettings.dwHotKeyButtons & gButtonTags[i]) { HotKeys[j] = i + 1; j++; if (j >= NUM_HOTKEY_BUTTONS) { break; } } } SendDlgItemMessage(hwnd, IDC_HOTKEY1_SPIN, UDM_SETRANGE32, 1, NUM_BUTTONS); SendDlgItemMessage(hwnd, IDC_HOTKEY2_SPIN, UDM_SETRANGE32, 1, NUM_BUTTONS); SendDlgItemMessage(hwnd, IDC_HOTKEY1_SPIN, UDM_SETPOS32, 0, HotKeys[0]); SendDlgItemMessage(hwnd, IDC_HOTKEY2_SPIN, UDM_SETPOS32, 0, HotKeys[1]); } else { ErrorMsg(IDSERR_TABSRV_GETBUTTONSETTINGS); } TRACEEXIT(("=%x\n", rc)); return rc; } //InitButtonPage /***************************************************************************** * * @doc INTERNAL * * @func int | MapButtonTagIndex | Map button tag index by Button Number. * * @parm IN int | iButton | Button Number. * * @rvalue SUCCESS | Returns Button Tag index. * @rvalue FAILURE | Returns -1. * *****************************************************************************/ int MapButtonTagIndex( IN int iButton ) { TRACEPROC("MapButtonTagIndex", 3) int i; TRACEENTER(("(ButtonNumber=%d)\n", iButton)); for (i = 0; i < NUM_BUTTONS; ++i) { if (gButtonTags[iButton] == (1 << i)) { break; } } if (i == NUM_BUTTONS) { i = -1; } TRACEEXIT(("=%d\n", i)); return i; } //MapButtonTagIndex #endif