|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
tabletpc.c
Abstract: Tablet PC Control Panel applet main module.
Environment:
User mode
Author:
Michael Tsang (MikeTs) 20-Apr-2000
Revision History:
--*/
#include "pch.h"
HINSTANCE ghInstance = NULL; RPC_BINDING_HANDLE ghBinding = NULL; #ifdef SYSACC
HANDLE ghSysAcc = INVALID_HANDLE_VALUE; HFONT ghFont = NULL; #endif
TCHAR gtszTitle[64] = {0};
UINT uHelpMessage = 0; TABLETPC_PROPPAGE TabletPCPropPages[] = { #ifdef PENPAGE
MAKEINTRESOURCE(IDD_MUTOHPEN), MutohPenDlgProc, 0, #endif
#ifdef BUTTONPAGE
MAKEINTRESOURCE(IDD_BUTTONS), ButtonsDlgProc, 0, #endif
MAKEINTRESOURCE(IDD_DISPLAY), DisplayDlgProc, 0, MAKEINTRESOURCE(IDD_GESTURE), GestureDlgProc, 0, #ifdef DEBUG
MAKEINTRESOURCE(IDD_TUNING), TuningDlgProc, 0, #endif
#ifdef BATTINFO
MAKEINTRESOURCE(IDD_BATTERY), BatteryDlgProc, 0, #endif
#ifdef CHGRINFO
MAKEINTRESOURCE(IDD_CHARGER), ChargerDlgProc, 0, #endif
#ifdef TMPINFO
MAKEINTRESOURCE(IDD_TEMPERATURE), TemperatureDlgProc, 0, #endif
0, NULL, 0 }; #define MAX_PAGES (sizeof(TabletPCPropPages)/sizeof(TABLETPC_PROPPAGE))
/*++
@doc EXTERNAL
@func BOOL | DllInitialize | Library entry point.
@parm IN HINSTANCE | hDLLInstance | Instance handle. @parm IN DWORD | dwReason | Reason being called. @parm IN LPVOID | lpvReserved | Reserved (Unused).
@rvalue SUCCESS | always returns TRUE --*/
BOOL WINAPI DllInitialize( IN HINSTANCE hDLLInstance, IN DWORD dwReason, IN LPVOID lpvReserved OPTIONAL ) { UNREFERENCED_PARAMETER(lpvReserved);
switch (dwReason) { case DLL_PROCESS_ATTACH: ghInstance = hDLLInstance; LoadString(ghInstance, IDS_TITLE, gtszTitle, sizeof(gtszTitle)/sizeof(TCHAR)); DisableThreadLibraryCalls(ghInstance); break;
case DLL_PROCESS_DETACH: break; }
return TRUE; } //DllInitialize
/*++
@doc EXTERNAL
@func LONG | CPlApplet | Library-defined callback function that serves as the entry point for a Control Panel application.
@parm IN HHWN | hwnd | Main window handle. @parm IN UINT | uMsg | Message. @parm IN LONG | lParam1 | Message specific parameter 1. @parm IN LONG | lParam2 | Message specific parameter 2.
@rvalue Return value depends on the message. --*/
LONG APIENTRY CPlApplet( IN HWND hwnd, IN UINT uMsg, IN LONG lParam1, IN LONG lParam2 ) { TRACEPROC("CPlApplet", 1) LONG rc = 0;
TRACEENTER(("(hwnd=%p,Msg=%s,Param1=%x,Param2=%x)\n", hwnd, LookupName(uMsg, CPLMsgNames), lParam1, lParam2));
switch (uMsg) { case CPL_INIT: TRACEINIT(MODNAME, 0, 0); uHelpMessage = RegisterWindowMessage(TEXT("ShellHelp")); rc = (LONG)TRUE; break;
case CPL_GETCOUNT: rc = 1; break;
case CPL_INQUIRE: { LPCPLINFO CPLInfo = (LPCPLINFO)lParam2;
CPLInfo->idIcon = IDI_TABLETPC; CPLInfo->idName = IDS_NAME; CPLInfo->idInfo = IDS_INFO; CPLInfo->lData = 0; rc = (LONG)TRUE; break; }
case CPL_NEWINQUIRE: { LPNEWCPLINFO NewCPLInfo = (LPNEWCPLINFO)lParam2;
memset(NewCPLInfo, 0, sizeof(NEWCPLINFO)); NewCPLInfo->dwSize = sizeof(NEWCPLINFO); NewCPLInfo->hIcon = LoadIcon(ghInstance, MAKEINTRESOURCE(IDI_TABLETPC)); LoadString(ghInstance, IDS_NAME, NewCPLInfo->szName, sizeof(NewCPLInfo->szName)/sizeof(TCHAR)); LoadString(ghInstance, IDS_INFO, NewCPLInfo->szInfo, sizeof(NewCPLInfo->szInfo)/sizeof(TCHAR)); lstrcpy(NewCPLInfo->szHelpFile, TEXT("")); rc = (LONG)TRUE; break; }
case CPL_DBLCLK: lParam2 = 0L; //
// Fall through ...
//
case CPL_STARTWPARMS: { HWND hwndMe;
if (!(gtszTitle[0])) { LoadString(ghInstance, IDS_TITLE, gtszTitle, sizeof(gtszTitle)/sizeof(TCHAR)); } hwndMe = FindWindow(TEXT("#32770"), gtszTitle); if (hwndMe != NULL) { //
// We found another copy running, let's just switch focus to it.
//
SetForegroundWindow(hwndMe); } else { rc = RunApplet(hwnd, (LPTSTR)lParam2); } break; }
case CPL_STOP: break;
case CPL_EXIT: #ifdef SYSACC
if (ghSysAcc != INVALID_HANDLE_VALUE) { CloseHandle(ghSysAcc); ghSysAcc = INVALID_HANDLE_VALUE; } #endif
TRACETERMINATE(); break; }
TRACEEXIT(("=%d\n", rc)); return rc; } //CPlApplet
/*++
@doc INTERNAL
@func VOID | RunApplet | The applet has been invoked.
@parm IN HHWN | hwnd | Main window handle. @parm IN LPTSTR | CmdLine | Supplies the command line used to invoke the applet.
@rvalue SUCCESS | Returns TRUE. @rvalue FAILURE | Returns FALSE. --*/
BOOL RunApplet( IN HWND hwnd, IN LPTSTR CmdLine OPTIONAL ) { TRACEPROC("RunApplet", 1) BOOL rc = FALSE; RPC_STATUS status; unsigned char *StringBinding;
TRACEENTER(("(hwnd=%p,CmdLine=%s)\n", hwnd, CmdLine? CmdLine: "NULL"));
if ((status = RpcStringBindingCompose(NULL, TEXT("ncalrpc"), NULL, NULL, NULL, &StringBinding)) != RPC_S_OK) { ErrorMsg(IDSERR_STRING_BINDING, status); } else if ((status = RpcBindingFromStringBinding(StringBinding, &ghBinding)) != RPC_S_OK) { ErrorMsg(IDSERR_BINDING_HANDLE, status); } else if ((status = RpcBindingSetAuthInfo(ghBinding, NULL, RPC_C_AUTHN_LEVEL_NONE, RPC_C_AUTHN_WINNT, NULL, 0)) != RPC_S_OK) { ErrorMsg(IDSERR_SETAUTHO_INFO, status); } else { INITCOMMONCONTROLSEX ComCtrl; #ifdef SYSACC
ghSysAcc = CreateFile(SMBLITE_IOCTL_DEVNAME, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (ghSysAcc == INVALID_HANDLE_VALUE) { ErrorMsg(IDSERR_SYSACC_OPENDEV, GetLastError()); }
ghFont = GetStockObject(SYSTEM_FIXED_FONT); #endif
ComCtrl.dwSize = sizeof(ComCtrl); ComCtrl.dwICC = ICC_BAR_CLASSES | ICC_USEREX_CLASSES; if (InitCommonControlsEx(&ComCtrl)) { HPROPSHEETPAGE hPages[MAX_PAGES]; PROPSHEETHEADER psh;
psh.dwSize = sizeof(psh); psh.dwFlags = 0; psh.hwndParent = hwnd; psh.hInstance = ghInstance; psh.pszCaption = MAKEINTRESOURCE(IDS_TITLE); psh.phpage = hPages; psh.nStartPage = 0; psh.nPages = CreatePropertyPages(TabletPCPropPages, hPages);
if (PropertySheet(&psh) >= 0) { rc = TRUE; } else { ErrorMsg(IDSERR_PROP_SHEET, GetLastError()); } } else { ErrorMsg(IDSERR_COMMCTRL); } }
TRACEEXIT(("=%x\n", rc)); return rc; } //RunApplet
/*++
@doc INTERNAL
@func VOID | CreatePropertyPages | Create all the property sheet pages according to the property page table.
@parm IN PTABLETPC_PROPPAGE | TabletPCPages | Points to the property page table. @parm OUT HPROPSHEETPAGE * | hPages | Points to the array to hold all the created property sheet handles.
@rvalue Returns number of property page handles created. --*/
UINT CreatePropertyPages( IN PTABLETPC_PROPPAGE TabletPCPages, OUT HPROPSHEETPAGE *hPages ) { TRACEPROC("CreatePropertyPages", 3) UINT nPages = 0; PROPSHEETPAGE psp;
TRACEENTER(("(TabletPCPages=%p,hPages=%p)\n", TabletPCPages, hPages));
psp.dwSize = sizeof(psp); psp.dwFlags = 0; psp.hInstance = ghInstance; psp.pszTitle = NULL; psp.lParam = 0;
while (TabletPCPages->DlgTemplate != NULL) { psp.pszTemplate = TabletPCPages->DlgTemplate; psp.pfnDlgProc = TabletPCPages->DlgProc; TabletPCPages->hPropSheetPage = CreatePropertySheetPage(&psp); if (TabletPCPages->hPropSheetPage != NULL) { hPages[nPages] = TabletPCPages->hPropSheetPage; nPages++; } TabletPCPages++; }
TRACEEXIT(("=%d\n", nPages)); return nPages; } //CreatePropertyPages
/*++
@doc INTERNAL
@func VOID | InsertComboBoxStrings | Insert the strings into the given combo box.
@parm IN HWND | hwnd | Dialog handle. @parm IN UINT | ComboBoxID | The ID of the combo box. @parm IN PCOMBOBOX_STRING | ComboString | Points to the combo box string table.
@rvalue None. --*/
VOID InsertComboBoxStrings( IN HWND hwnd, IN UINT ComboBoxID, IN PCOMBOBOX_STRING ComboString ) { TRACEPROC("InsertComboBoxStrings", 3) TCHAR tszStringText[64];
TRACEENTER(("(hwnd=%x,ComboBoxID=%x,ComboStringTable=%p)\n", hwnd, ComboBoxID, ComboString));
SendDlgItemMessage(hwnd, ComboBoxID, CB_RESETCONTENT, 0, 0); while (ComboString->StringID != 0) { LoadString(ghInstance, ComboString->StringID, tszStringText, sizeof(tszStringText)/sizeof(TCHAR)); SendDlgItemMessage(hwnd, ComboBoxID, CB_INSERTSTRING, ComboString->StringIndex, (LPARAM)tszStringText);
ComboString++; }
TRACEEXIT(("!\n")); return; } //InsertComboBoxStrings
/*****************************************************************************
* * @doc INTERNAL * * @func VOID | EnableDlgControls | Enable dialog controls. * * @parm IN HWND | hwnd | Window handle. * @parm IN int * | piControls | Points to the dialog control array. * @parm IN BOOL | fEnable | TRUE if enable. * * @rvalue None. * *****************************************************************************/
VOID EnableDlgControls( IN HWND hwnd, IN int *piControls, IN BOOL fEnable ) { TRACEPROC("EnableDlgControls", 2)
TRACEENTER(("(hwnd=%x,piControls=%p,fEnable=%x)\n", hwnd, piControls, fEnable));
while (*piControls != 0) { EnableWindow(GetDlgItem(hwnd, *piControls), fEnable); piControls++; }
TRACEEXIT(("!\n")); return; } //EnableDlgControls
/*++
@doc EXTERNAL
@func void __RPC_FAR * | MIDL_user_allocate | MIDL allocate.
@parm IN size_t | len | size of allocation.
@rvalue SUCCESS | Returns the pointer to the memory allocated. @rvalue FAILURE | Returns NULL. --*/
void __RPC_FAR * __RPC_USER MIDL_user_allocate( IN size_t len ) { TRACEPROC("MIDL_user_allocate", 5) void __RPC_FAR *ptr;
TRACEENTER(("(len=%d)\n", len));
ptr = malloc(len);
TRACEEXIT(("=%p\n", ptr)); return ptr; } //MIDL_user_allocate
/*++
@doc EXTERNAL
@func void | MIDL_user_free | MIDL free.
@parm IN void __PRC_FAR * | ptr | Points to the memory to be freed.
@rvalue None. --*/
void __RPC_USER MIDL_user_free( IN void __RPC_FAR *ptr ) { TRACEPROC("MIDL_user_free", 5)
TRACEENTER(("(ptr=%p)\n", ptr));
free(ptr);
TRACEEXIT(("!\n")); return; } //MIDL_user_free
|