239 lines
5.7 KiB
C
239 lines
5.7 KiB
C
//****************************************************************************
|
|
//
|
|
// File: main.c
|
|
// Content: main cpl control code
|
|
// History:
|
|
// Date By Reason
|
|
// ==== == ======
|
|
// 29-nov-94 craige initial implementation
|
|
// 11-dec-94 craige added ShowJoyCPL
|
|
//
|
|
// Copyright (c) Microsoft Corporation 1994-1995
|
|
//
|
|
//****************************************************************************
|
|
#include "joycpl.h"
|
|
|
|
HINSTANCE hInstance = NULL;
|
|
LPCTSTR cszHelpFile = TEXT("joy.hlp");
|
|
|
|
#define JOYSTICK_CPL 0
|
|
#define MAX_PAGES 16 /* maximum number of joysticks supported */
|
|
|
|
#ifdef DEBUG
|
|
void FAR cdecl dprintf(LPSTR szFormat, ...)
|
|
{
|
|
char str[256];
|
|
|
|
wsprintf( str, "JOYCPL: " );
|
|
wvsprintf( str+lstrlen( str ), szFormat, (LPVOID)(&szFormat+1) );
|
|
|
|
OutputDebugString( str );
|
|
}
|
|
#endif
|
|
|
|
/*
|
|
* LibMain - main entry point for DLL
|
|
*/
|
|
BOOL APIENTRY LibMain( HANDLE hDll, DWORD dwReason, LPVOID lpReserved )
|
|
{
|
|
switch( dwReason ) {
|
|
case DLL_PROCESS_ATTACH:
|
|
hInstance = hDll;
|
|
DPF( "DLL_PROCESS_ATTACH: hInstance = %08lx\r\n" );
|
|
break;
|
|
case DLL_PROCESS_DETACH:
|
|
DPF( "DLL_PROCESS_DETACH: hInstance = %08lx\r\n" );
|
|
break;
|
|
case DLL_THREAD_DETACH:
|
|
DPF( "DLL_THREAD_DETACH: hInstance = %08lx\r\n" );
|
|
break;
|
|
case DLL_THREAD_ATTACH:
|
|
DPF( "DLL_THREAD_DETACH: hInstance = %08lx\r\n" );
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
} /* LibMain */
|
|
|
|
/*
|
|
* startJoyCPL - start the joystick CPL
|
|
*/
|
|
static void startJoyCPL( HWND hwnd )
|
|
{
|
|
PROPSHEETHEADER psh;
|
|
char title[MAX_STR];
|
|
PROPSHEETPAGE psp;
|
|
LPJOYDATA pjd;
|
|
#if defined( WANT_SHEETS )
|
|
JOYDATAPTR jdp[MAX_PAGES];
|
|
HPROPSHEETPAGE hpsp[MAX_PAGES];
|
|
int numsheets;
|
|
int i;
|
|
char str[MAX_STR];
|
|
#else
|
|
JOYDATAPTR jdp;
|
|
HPROPSHEETPAGE hpsp[1];
|
|
#endif
|
|
|
|
#if defined(WANT_SHEETS)
|
|
numsheets = joyGetNumDevs();
|
|
if( numsheets == 0 ) {
|
|
return;
|
|
}
|
|
#endif
|
|
|
|
InitCommonControls();
|
|
LoadString( hInstance, IDS_JOY, title, sizeof(title));
|
|
|
|
psh.dwSize = sizeof(PROPSHEETHEADER);
|
|
psh.dwFlags = PSH_PROPTITLE;
|
|
psh.hwndParent = hwnd;
|
|
psh.hInstance = hInstance;
|
|
psh.pszCaption = (LPSTR) MAKEINTRESOURCE( IDS_JOY );
|
|
psh.nPages = 0;
|
|
psh.nStartPage = 0;
|
|
psh.phpage = hpsp;
|
|
|
|
psp.dwSize = sizeof( PROPSHEETPAGE );
|
|
psp.dwFlags = PSP_DEFAULT | PSP_USETITLE;
|
|
psp.hInstance = hInstance;
|
|
psp.pszTemplate = MAKEINTRESOURCE( IDD_JOYSTICK );
|
|
psp.pszIcon = NULL;
|
|
psp.pfnDlgProc = JoystickDlg;
|
|
psp.pfnCallback = NULL;
|
|
psp.pcRefParent = NULL;
|
|
pjd = JoystickDataInit();
|
|
#if defined(WANT_SHEETS)
|
|
for( i=0;i<numsheets;i++ ) {
|
|
wsprintf( str, "%s %d", title, i+1 );
|
|
psp.pszTitle = str;
|
|
jdp[i].pjd = pjd;
|
|
jdp[i].iJoyId = i;
|
|
psp.lParam = (LPARAM) &jdp[i];
|
|
if( psh.phpage[ psh.nPages ] = CreatePropertySheetPage( &psp ) ) {
|
|
psh.nPages++;
|
|
DPF( "PropertySheetPage()\r\n" );
|
|
}
|
|
}
|
|
#else
|
|
psp.pszTitle = title;
|
|
jdp.pjd = pjd;
|
|
jdp.iJoyId = JOYSTICKID1;
|
|
psp.lParam = (LPARAM) &jdp;
|
|
if( psh.phpage[ psh.nPages ] = CreatePropertySheetPage( &psp ) ) {
|
|
psh.nPages++;
|
|
DPF( "PropertySheetPage()\r\n" );
|
|
}
|
|
#endif
|
|
if( psh.nPages ) {
|
|
PropertySheet( &psh );
|
|
DPF( "PropertySheet()\r\n" );
|
|
}
|
|
JoystickDataFini( pjd );
|
|
|
|
} /* startJoyCPL */
|
|
|
|
/*
|
|
* ShowJoyCPL - exported function to allow apps to show the joystick CPL
|
|
*/
|
|
void WINAPI ShowJoyCPL( HWND hwnd )
|
|
{
|
|
HWND hwnd_parent;
|
|
|
|
hwnd_parent = hwnd;
|
|
if( hwnd != NULL ) {
|
|
if( GetWindowLong( hwnd, GWL_EXSTYLE ) & WS_EX_TOPMOST ) {
|
|
hwnd_parent = NULL;
|
|
}
|
|
}
|
|
startJoyCPL( hwnd_parent );
|
|
|
|
} /* ShowJoyCPL */
|
|
|
|
/*
|
|
* CPlApplet - applet manager
|
|
*/
|
|
LONG WINAPI CPlApplet(HWND hwnd, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
|
|
{
|
|
LPCPLINFO pcplinfo;
|
|
LPNEWCPLINFO pnewcplinfo;
|
|
|
|
switch( uMsg ) {
|
|
case CPL_INIT:
|
|
DPF( "CPL_INIT:\r\n" );
|
|
// return TRUE; // (fall through to CPL_GETCOUNT--fail if no joysticks)
|
|
|
|
case CPL_GETCOUNT:
|
|
/*
|
|
* number of applets in this DLL - 1 per device
|
|
* no joystick devices installed (i.e., no CPL's to display)
|
|
*/
|
|
if( joyGetNumDevs() ) {
|
|
DPF( "CPL_GETCOUNT = 1\r\n" );
|
|
return 1;
|
|
} else {
|
|
DPF( "CPL_GETCOUNT = 0\r\n" );
|
|
return 0;
|
|
}
|
|
|
|
case CPL_INQUIRE:
|
|
/*
|
|
* Fill the CPLINFO with the pertinent information for each applet
|
|
*/
|
|
DPF( "CPL_INQUIRE:\r\n" );
|
|
pcplinfo = (LPCPLINFO) lParam2;
|
|
switch( lParam1 ) {
|
|
case JOYSTICK_CPL:
|
|
pcplinfo->idIcon = CPL_DYNAMIC_RES;
|
|
pcplinfo->idName = CPL_DYNAMIC_RES;
|
|
pcplinfo->idInfo = CPL_DYNAMIC_RES;
|
|
break;
|
|
}
|
|
pcplinfo->lData = 0L;
|
|
return TRUE;
|
|
|
|
case CPL_NEWINQUIRE:
|
|
DPF( "CPL_NEWINQUIRE\r\n" );
|
|
pnewcplinfo = (LPNEWCPLINFO) lParam2;
|
|
switch( lParam1 ) {
|
|
case JOYSTICK_CPL:
|
|
pnewcplinfo->hIcon = LoadIcon( hInstance, MAKEINTRESOURCE(IDI_JOYSTICK));
|
|
LoadString(hInstance, IDS_JOY, pnewcplinfo->szName,
|
|
sizeof(pnewcplinfo->szName));
|
|
LoadString( hInstance, IDS_JOYINFO, pnewcplinfo->szInfo,
|
|
sizeof(pnewcplinfo->szInfo) );
|
|
DPF( "hIcon = %04x\r\n", pnewcplinfo->hIcon );
|
|
DPF( "szName = \"%s\"\r\n", pnewcplinfo->szName );
|
|
DPF( "szInfo = \"%s\"\r\n", pnewcplinfo->szInfo );
|
|
break;
|
|
}
|
|
pnewcplinfo->dwHelpContext = 0;
|
|
pnewcplinfo->dwSize = sizeof( NEWCPLINFO );
|
|
pnewcplinfo->lData = 0L;
|
|
pnewcplinfo->szHelpFile[0] = 0;
|
|
return TRUE;
|
|
|
|
case CPL_DBLCLK:
|
|
DPF( "CPL_DBLCLK\r\n" );
|
|
switch( lParam1 ) {
|
|
case JOYSTICK_CPL:
|
|
startJoyCPL( hwnd );
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case CPL_EXIT:
|
|
DPF( "CPL_EXIT\r\n" );
|
|
break;
|
|
|
|
default:
|
|
return 0L;
|
|
}
|
|
|
|
return 1L;
|
|
|
|
} /* CPlApplet */
|