Initial commit

This commit is contained in:
Cesar Gimenes
2021-09-18 14:10:47 -03:00
parent 46f2228e15
commit e2607a94c0
131 changed files with 5312 additions and 0 deletions

View File

@@ -0,0 +1,607 @@
/* property sheet functions */
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include "NekoCFG.h"
#include "..\NekoCommon.h"
#include "NekoCFG_resource.h"
#include "NekoCFG_resource.hm"
/* help ID lookup table */
static DWORD dwHelpID[] = {
IDC_SCALESLIDER, HIDC_SCALESLIDER,
IDC_SCALEDISPLAY, HIDC_SCALEDISPLAY,
IDC_SET100, HIDC_SET100,
IDC_IMAGELIB, HIDC_IMAGELIB,
IDC_CHANGE, HIDC_CHANGE,
IDC_DEFAULT, HIDC_DEFAULT,
IDC_SPEEDSLIDER, HIDC_SPEEDSLIDER,
IDC_SENSESLIDER, HIDC_SENSESLIDER,
IDC_SOUNDFREQ, HIDC_SOUNDFREQ,
IDC_SOUNDSAVAIL, HIDC_SOUNDSAVAIL,
IDC_SOUNDNAME, HIDC_SOUNDNAME,
IDC_PREVIEW, HIDC_PREVIEW,
IDC_NONE, HIDC_NONE,
IDC_BROWSE, HIDC_BROWSE,
IDC_ACTION, HIDC_ACTION,
IDC_ACTIONDESC, HIDC_ACTIONDESC,
IDC_ALWAYSONTOP, HIDC_ALWAYSONTOP,
IDC_FOOTPRINTS, HIDC_FOOTPRINTS,
0,0
};
/**************************************************************************************/
//cat settings
LPCATSETTINGS g_lpCurrentCat = NULL;
#define MY_WRITESETTINGS (WM_USER+32)
#define MY_READSETTINGS (WM_USER+33)
/**************************************************************************************/
//tab control data
#define NUM_PAGES 5
BOOL CALLBACK PropPage_Display( HWND hPage, UINT uMsg, WPARAM wParam, LPARAM lParam );
BOOL CALLBACK PropPage_Movement( HWND hPage, UINT uMsg, WPARAM wParam, LPARAM lParam );
BOOL CALLBACK PropPage_Sound( HWND hPage, UINT uMsg, WPARAM wParam, LPARAM lParam );
BOOL CALLBACK PropPage_Independence( HWND hPage, UINT uMsg, WPARAM wParam, LPARAM lParam );
BOOL CALLBACK PropPage_Effects( HWND hPage, UINT uMsg, WPARAM wParam, LPARAM lParam );
TABINITDATA tibTabs[NUM_PAGES] = {
{ "Display", IDD_DISPLAY, (DLGPROC)PropPage_Display, IDI_TAB_DISPLAY, NULL },
{ "Movement", IDD_MOVEMENT, (DLGPROC)PropPage_Movement, IDI_TAB_MOVEMENT, NULL },
{ "Sound", IDD_SOUND, (DLGPROC)PropPage_Sound, IDI_TAB_SOUNDS, NULL },
{ "Independence", IDD_INDEPENDENCE, (DLGPROC)PropPage_Independence, IDI_TAB_INDEPENDENCE, NULL },
{ "Effects", IDD_EFFECTS, (DLGPROC)PropPage_Effects, IDI_TAB_EFFECTS, NULL },
};
HWND g_hDlgDisplay = NULL; //current child dialog
HWND g_hWndTab = NULL; //tab control
RECT g_rcTabStart; //offset in dialog to draw tab pages
HIMAGELIST g_himgTabIcons = NULL;
/**************************************************************************************/
/* InitialisePropertyDialog - loads all of the property sheet pages into the property sheet control */
void WINAPI InitialisePropertyDialog( HWND hWnd )
{
int i;
//create the image list
g_himgTabIcons = ImageList_Create( 16, 16, ILC_COLOR4|ILC_MASK, NUM_PAGES, 0 );
for( i = 0; i < NUM_PAGES; i++ )
{
HICON hIcon = (HICON)LoadImage( g_hInstance, MAKEINTRESOURCE(tibTabs[i].uIDIcon), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE );
tibTabs[i].uIDIcon = ImageList_AddIcon( g_himgTabIcons, hIcon );
DestroyIcon( hIcon );
}
TabCtrl_SetImageList( hWnd, g_himgTabIcons );
//insert tabs for each of the dialog items and create the (hidden) dialog
TC_ITEM tie;
tie.mask = TCIF_TEXT | TCIF_IMAGE;
for( i = 0; i < NUM_PAGES; i++ )
{
tie.iImage = tibTabs[i].uIDIcon;
tie.pszText = tibTabs[i].szTitle;
TabCtrl_InsertItem( hWnd, i, &tie );
tibTabs[i].hDlg = CreateDialog( g_hInstance, MAKEINTRESOURCE(tibTabs[i].uIDDialog), GetParent(hWnd), tibTabs[i].lpfnDlgProc );
}
//calculate where to stick each dialog
GetWindowRect( hWnd, &g_rcTabStart );
ScreenToClient( GetParent(hWnd), (LPPOINT)&g_rcTabStart.left );
ScreenToClient( GetParent(hWnd), (LPPOINT)&g_rcTabStart.right );
g_rcTabStart.top += 42;
g_rcTabStart.left += 3;
//store the handle and show the first page
g_hWndTab = hWnd;
OnSelChanged( hWnd );
}
/* ShutdownPropertyDialog - releases any resources owned by the propery sheet */
void WINAPI ShutdownPropertyDialog()
{
ImageList_Destroy( g_himgTabIcons );
}
/* OnTabSelection - updates the tabs when one is selected */
void WINAPI OnSelChanged( HWND hWnd )
{
int iSel = TabCtrl_GetCurSel( hWnd );
//destroy the current child dialog box, if any.
if( g_hDlgDisplay != NULL) ShowWindow( g_hDlgDisplay, SW_HIDE );
//create the new child dialog box.
g_hDlgDisplay = tibTabs[iSel].hDlg;
ShowWindow( g_hDlgDisplay, SW_SHOW );
}
/* SetActiveCat - selects which cat to configure */
void WINAPI SetActiveCat( LPCATSETTINGS lpCat )
{
GetDialogSettings();
g_lpCurrentCat = lpCat;
for( int i = 0; i < NUM_PAGES; i++ ) SendMessage( tibTabs[i].hDlg, MY_READSETTINGS, 0, 0 );
}
/* GetDialogSettings - causes all property pages to write their settings into the data structure */
void WINAPI GetDialogSettings()
{
if( g_lpCurrentCat )
for( int i = 0; i < NUM_PAGES; i++ ) SendMessage( tibTabs[i].hDlg, MY_WRITESETTINGS, 0, 0 );
}
/**************************************************************************************/
/* PropPage_Display - message processsing function for the 'display' property page */
BOOL CALLBACK PropPage_Display( HWND hPage, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg )
{
case WM_INITDIALOG:
SendDlgItemMessage( hPage, IDC_SCALESLIDER, TBM_SETRANGE, FALSE, MAKELPARAM(MIN_SCALE/10,MAX_SCALE/10) );
break;
case MY_WRITESETTINGS:
g_lpCurrentCat->uScale = SendDlgItemMessage( hPage, IDC_SCALESLIDER, TBM_GETPOS, 0, 0 ) * 10;
GetDlgItemText( hPage, IDC_IMAGELIB, g_lpCurrentCat->szLibrary, MAX_PATH );
g_lpCurrentCat->fAlwaysOnTop = IsDlgButtonChecked( hPage, IDC_ALWAYSONTOP );
break;
case MY_READSETTINGS:
SendDlgItemMessage( hPage, IDC_SCALESLIDER, TBM_SETPOS, TRUE, g_lpCurrentCat->uScale / 10 );
SetDlgItemText( hPage, IDC_IMAGELIB, g_lpCurrentCat->szLibrary );
CheckDlgButton( hPage, IDC_ALWAYSONTOP, g_lpCurrentCat->fAlwaysOnTop );
SendMessage( hPage, WM_HSCROLL, 0, 0 );
break;
case WM_HSCROLL:
{
//update the % indicator
char szBuffer[32];
sprintf( szBuffer, "%d%%", SendDlgItemMessage( hPage, IDC_SCALESLIDER, TBM_GETPOS, 0, 0 ) * 10 );
SetDlgItemText( hPage, IDC_SCALEDISPLAY, szBuffer );
break;
}
case WM_COMMAND:
switch( LOWORD(wParam) )
{
case IDC_SET100:
SendDlgItemMessage( hPage, IDC_SCALESLIDER, TBM_SETPOS, TRUE, 10 );
SendMessage( hPage, WM_HSCROLL, 0, 0 );
break;
case IDC_DEFAULT:
SetDlgItemText( hPage, IDC_IMAGELIB, "" );
break;
case IDC_CHANGE:
{
OPENFILENAME ofn;
char lpstrLibrary[MAX_PATH];
LPCTSTR lpstrFileMasks = "Icon Libraries\0*.icl;*.exe;*.dll\0All Files (*.*)\0*.*\0\0";
//get the current file
GetDlgItemText( hPage, IDC_IMAGELIB, lpstrLibrary, MAX_PATH-1 );
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hPage;
ofn.hInstance = NULL;
ofn.lpstrFilter = lpstrFileMasks;
ofn.lpstrCustomFilter = NULL;
ofn.nFilterIndex = 1;
ofn.lpstrFile = lpstrLibrary;
ofn.nMaxFile = MAX_PATH-1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = "Select Image Library";
ofn.Flags = OFN_EXPLORER|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
ofn.lpstrDefExt = "icl";
if( GetOpenFileName( &ofn ) )
{
//check to make sure it's got enough icons in...
if( (UINT)ExtractIcon( g_hInstance, ofn.lpstrFile, (UINT)-1 ) < 32 )
MessageBox( hPage, "That file does not have enough icons in it - it must have at least 32", "Change Image Library", MB_ICONEXCLAMATION );
else
SetDlgItemText( hPage, IDC_IMAGELIB, ofn.lpstrFile );
}
break;
}
}
break;
case WM_SHOWWINDOW:
if( wParam ) SetWindowPos( hPage, HWND_TOP, g_rcTabStart.left, g_rcTabStart.top, 0, 0, SWP_NOSIZE );
break;
/* help stuff */
case WM_HELP:
if( ((LPHELPINFO)lParam)->iCtrlId != (-1) )
WinHelp( (HWND)((LPHELPINFO)lParam)->hItemHandle, szHelpFile, HELP_WM_HELP, (DWORD)(LPSTR)dwHelpID );
else
return FALSE;
break;
case WM_CONTEXTMENU:
WinHelp( (HWND)wParam, szHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)dwHelpID );
break;
default:
return FALSE;
}
return TRUE;
}
/* PropPage_Movement - message processsing function for the 'movement' property page */
BOOL CALLBACK PropPage_Movement( HWND hPage, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg )
{
case WM_INITDIALOG:
SendDlgItemMessage( hPage, IDC_SPEEDSLIDER, TBM_SETRANGE, FALSE, MAKELPARAM(MIN_SPEED,MAX_SPEED) );
SendDlgItemMessage( hPage, IDC_SENSESLIDER, TBM_SETRANGE, FALSE, MAKELPARAM(MIN_SENSE,MAX_SENSE) );
break;
case MY_WRITESETTINGS:
g_lpCurrentCat->uSpeed = SendDlgItemMessage( hPage, IDC_SPEEDSLIDER, TBM_GETPOS, 0, 0 );
g_lpCurrentCat->uMouseSensitivity = MAX_SENSE - SendDlgItemMessage( hPage, IDC_SENSESLIDER, TBM_GETPOS, 0, 0 );
break;
case MY_READSETTINGS:
SendDlgItemMessage( hPage, IDC_SPEEDSLIDER, TBM_SETPOS, TRUE, g_lpCurrentCat->uSpeed );
SendDlgItemMessage( hPage, IDC_SENSESLIDER, TBM_SETPOS, TRUE, MAX_SENSE - g_lpCurrentCat->uMouseSensitivity );
break;
case WM_SHOWWINDOW:
if( wParam ) SetWindowPos( hPage, HWND_TOP, g_rcTabStart.left, g_rcTabStart.top, 0, 0, SWP_NOSIZE );
break;
/* help stuff */
case WM_HELP:
if( ((LPHELPINFO)lParam)->iCtrlId != (-1) )
WinHelp( (HWND)((LPHELPINFO)lParam)->hItemHandle, szHelpFile, HELP_WM_HELP, (DWORD)(LPSTR)dwHelpID );
else
return FALSE;
break;
case WM_CONTEXTMENU:
WinHelp( (HWND)wParam, szHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)dwHelpID );
break;
default:
return FALSE;
}
return TRUE;
}
/* PropPage_Sound - message processsing function for the 'sound' property page */
BOOL CALLBACK PropPage_Sound( HWND hPage, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
static HCURSOR s_hcPlaying = NULL;
switch( uMsg )
{
case WM_INITDIALOG:
SendDlgItemMessage( hPage, IDC_PREVIEW, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)LoadImage( g_hInstance, MAKEINTRESOURCE(IDR_PLAYBITMAP), IMAGE_BITMAP, 0, 0, LR_LOADMAP3DCOLORS ) );
SendDlgItemMessage( hPage, IDC_SOUNDFREQ, TBM_SETRANGE, FALSE, MAKELPARAM(MIN_SNDFREQ,MAX_SNDFREQ) );
SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_ADDSTRING, 0, (LPARAM)"Idle One" );
SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_ADDSTRING, 0, (LPARAM)"Idle Two" );
SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_ADDSTRING, 0, (LPARAM)"Idle Three" );
SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_ADDSTRING, 0, (LPARAM)"Sleep" );
SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_ADDSTRING, 0, (LPARAM)"Awake" );
//load the playing cursor
s_hcPlaying = LoadCursor( g_hInstance, MAKEINTRESOURCE(IDC_PLAYING) );
//select first item in the list & update
SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_SETCURSEL, 0, 0 );
break;
case WM_DESTROY:
DestroyCursor( s_hcPlaying );
break;
case MY_WRITESETTINGS:
g_lpCurrentCat->uSndFrequency = SendDlgItemMessage( hPage, IDC_SOUNDFREQ, TBM_GETPOS, 0, 0 );
break;
case MY_READSETTINGS:
SendDlgItemMessage( hPage, IDC_SOUNDFREQ, TBM_SETPOS, TRUE, g_lpCurrentCat->uSndFrequency );
SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_SETITEMDATA, 0, (LPARAM)g_lpCurrentCat->szSndIdle1 );
SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_SETITEMDATA, 1, (LPARAM)g_lpCurrentCat->szSndIdle2 );
SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_SETITEMDATA, 2, (LPARAM)g_lpCurrentCat->szSndIdle3 );
SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_SETITEMDATA, 3, (LPARAM)g_lpCurrentCat->szSndSleep );
SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_SETITEMDATA, 4, (LPARAM)g_lpCurrentCat->szSndAwake );
PostMessage( hPage, WM_COMMAND, MAKEWPARAM( IDC_SOUNDSAVAIL, 0 ), 0 );
break;
case WM_COMMAND:
switch( LOWORD(wParam) )
{
case IDC_SOUNDSAVAIL:
{
int iCurSel = SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_GETCURSEL, 0, 0 );
char * lpszFile = (char*)SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_GETITEMDATA, iCurSel, 0 );
if( strcmp( lpszFile, "" ) == 0 )
{
SetDlgItemText( hPage, IDC_SOUNDNAME, "" );
EnableWindow( GetDlgItem( hPage, IDC_PREVIEW ), FALSE );
EnableWindow( GetDlgItem( hPage, IDC_NONE ), FALSE );
}
else
{
SetDlgItemText( hPage, IDC_SOUNDNAME, lpszFile );
EnableWindow( GetDlgItem( hPage, IDC_PREVIEW ), TRUE );
EnableWindow( GetDlgItem( hPage, IDC_NONE ), TRUE );
}
break;
}
case IDC_PREVIEW:
{
int iCurSel = SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_GETCURSEL, 0, 0 );
char * lpszFile = (char*)SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_GETITEMDATA, iCurSel, 0 );
if( strcmp( lpszFile, "" ) != 0 )
{
SetCursor( s_hcPlaying );
if( !PlaySound( lpszFile, NULL, SND_FILENAME|SND_NODEFAULT|SND_SYNC ) ) MessageBox( hPage, "Unable to start playing wave file!", "Preview Sound", MB_ICONEXCLAMATION );
SetCursor( LoadCursor( NULL, MAKEINTRESOURCE(IDC_ARROW) ) );
}
break;
}
case IDC_NONE:
{
int iCurSel = SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_GETCURSEL, 0, 0 );
strcpy( (char*)SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_GETITEMDATA, iCurSel, 0 ), "" );
//update the display
PostMessage( hPage, WM_COMMAND, MAKEWPARAM( IDC_SOUNDSAVAIL, 0 ), 0 );
break;
}
case IDC_BROWSE:
{
OPENFILENAME ofn;
char szPrompt[256] = "Browse for ", szSoundName[256];
LPCTSTR lpstrFileMasks ="Sounds (*.wav)\0*.wav\0All Files (*.*)\0*.*\0\0";
int iCurSel = SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_GETCURSEL, 0, 0 );
//build browse dialog prompt
SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_GETTEXT, iCurSel, (LPARAM)szSoundName );
strcat( szPrompt, szSoundName );
strcat( szPrompt, " sound" );
strcpy( szSoundName, (char*)SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_GETITEMDATA, iCurSel, 0 ) );
//get the current file
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hPage;
ofn.hInstance = NULL;
ofn.lpstrFilter = lpstrFileMasks;
ofn.lpstrCustomFilter = NULL;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szSoundName;
ofn.nMaxFile = MAX_PATH-1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = szPrompt;
ofn.Flags = OFN_EXPLORER|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
ofn.lpstrDefExt = "WAV";
if( GetOpenFileName( &ofn ) )
{
//update everything with the new sound
SetDlgItemText( hPage, IDC_SOUNDNAME, ofn.lpstrFile );
strcpy( (char*)SendDlgItemMessage( hPage, IDC_SOUNDSAVAIL, LB_GETITEMDATA, iCurSel, 0 ), szSoundName );
//update the display
PostMessage( hPage, WM_COMMAND, MAKEWPARAM( IDC_SOUNDSAVAIL, 0 ), 0 );
//make sure it will make a sound
if( SendDlgItemMessage( hPage, IDC_SOUNDFREQ, TBM_GETPOS, 0, 0 ) == 0 )
SendDlgItemMessage( hPage, IDC_SOUNDFREQ, TBM_SETPOS, TRUE, 2 );
}
break;
}
}
break;
case WM_SHOWWINDOW:
if( wParam ) SetWindowPos( hPage, HWND_TOP, g_rcTabStart.left, g_rcTabStart.top, 0, 0, SWP_NOSIZE );
break;
/* help stuff */
case WM_HELP:
if( ((LPHELPINFO)lParam)->iCtrlId != (-1) )
WinHelp( (HWND)((LPHELPINFO)lParam)->hItemHandle, szHelpFile, HELP_WM_HELP, (DWORD)(LPSTR)dwHelpID );
else
return FALSE;
break;
case WM_CONTEXTMENU:
WinHelp( (HWND)wParam, szHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)dwHelpID );
break;
default:
return FALSE;
}
return TRUE;
}
/* PropPage_Independence - message processsing function for the 'independence' property page */
BOOL CALLBACK PropPage_Independence( HWND hPage, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg )
{
case WM_INITDIALOG:
SendDlgItemMessage( hPage, IDC_ACTION, CB_ADDSTRING, 0, (LPARAM)"Chase the mouse (default)" );
SendDlgItemMessage( hPage, IDC_ACTION, CB_ADDSTRING, 0, (LPARAM)"Run away from the mouse");
SendDlgItemMessage( hPage, IDC_ACTION, CB_ADDSTRING, 0, (LPARAM)"Run around randomly");
SendDlgItemMessage( hPage, IDC_ACTION, CB_ADDSTRING, 0, (LPARAM)"Pace around the screen");
SendDlgItemMessage( hPage, IDC_ACTION, CB_ADDSTRING, 0, (LPARAM)"Run around the screen");
break;
case MY_WRITESETTINGS:
g_lpCurrentCat->uAction = SendDlgItemMessage( hPage, IDC_ACTION, CB_GETCURSEL, 0, 0 );
break;
case MY_READSETTINGS:
SendDlgItemMessage( hPage, IDC_ACTION, CB_SETCURSEL, g_lpCurrentCat->uAction, 0 );
SendMessage( hPage, WM_COMMAND, MAKEWPARAM(IDC_ACTION, CBN_SELCHANGE), 0 );
break;
case WM_SHOWWINDOW:
if( wParam ) SetWindowPos( hPage, HWND_TOP, g_rcTabStart.left, g_rcTabStart.top, 0, 0, SWP_NOSIZE );
break;
case WM_COMMAND:
switch( LOWORD(wParam) )
{
case IDC_ACTION:
if( HIWORD(wParam) == CBN_SELCHANGE )
{
const char* szActionDesc[] = {
"Neko will follow the mouse cursor wherever it goes",
"Neko will run away when the mouse cursor gets too near, and sleep when it isn't near",
"Neko will run to a random spot on the desktop, sleep for a while, and then continue running around",
"Neko will run around the outside of the desktop",
"Neko will run around the desktop, without stopping"
};
SetDlgItemText( hPage, IDC_ACTIONDESC, szActionDesc[SendDlgItemMessage( hPage, IDC_ACTION, CB_GETCURSEL, 0, 0 )] );
}
break;
}
break;
/* help stuff */
case WM_HELP:
if( ((LPHELPINFO)lParam)->iCtrlId != (-1) )
WinHelp( (HWND)((LPHELPINFO)lParam)->hItemHandle, szHelpFile, HELP_WM_HELP, (DWORD)(LPSTR)dwHelpID );
else
return FALSE;
break;
case WM_CONTEXTMENU:
WinHelp( (HWND)wParam, szHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)dwHelpID );
break;
default:
return FALSE;
}
return TRUE;
}
/* PropPage_Effects - message processsing function for the 'effects' property page */
BOOL CALLBACK PropPage_Effects( HWND hPage, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg )
{
case MY_WRITESETTINGS:
GetDlgItemText( hPage, IDC_IMAGELIB, g_lpCurrentCat->szFootprintLib, MAX_PATH );
g_lpCurrentCat->bFootprints = IsDlgButtonChecked( hPage, IDC_FOOTPRINTS );
break;
case MY_READSETTINGS:
SetDlgItemText( hPage, IDC_IMAGELIB, g_lpCurrentCat->szFootprintLib );
CheckDlgButton( hPage, IDC_FOOTPRINTS, g_lpCurrentCat->bFootprints );
break;
case WM_COMMAND:
switch( LOWORD(wParam) )
{
case IDC_DEFAULT:
SetDlgItemText( hPage, IDC_IMAGELIB, "" );
break;
case IDC_CHANGE:
{
OPENFILENAME ofn;
char lpstrLibrary[MAX_PATH];
LPCTSTR lpstrFileMasks = "Icon Libraries\0*.icl;*.exe;*.dll\0All Files (*.*)\0*.*\0\0";
//get the current file
GetDlgItemText( hPage, IDC_IMAGELIB, lpstrLibrary, MAX_PATH-1 );
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hPage;
ofn.hInstance = NULL;
ofn.lpstrFilter = lpstrFileMasks;
ofn.lpstrCustomFilter = NULL;
ofn.nFilterIndex = 1;
ofn.lpstrFile = lpstrLibrary;
ofn.nMaxFile = MAX_PATH-1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = "Select Footprint Image Library";
ofn.Flags = OFN_EXPLORER|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
ofn.lpstrDefExt = "icl";
if( GetOpenFileName( &ofn ) )
{
//check to make sure it's got enough icons in...
if( (UINT)ExtractIcon( g_hInstance, ofn.lpstrFile, (UINT)-1 ) < 8 )
MessageBox( hPage, "That file does not have enough icons in it - it must have at least 8", "Change Image Library", MB_ICONEXCLAMATION );
else
{
SetDlgItemText( hPage, IDC_IMAGELIB, ofn.lpstrFile );
CheckDlgButton( hPage, IDC_FOOTPRINTS, TRUE );
}
}
break;
}
}
break;
case WM_SHOWWINDOW:
if( wParam ) SetWindowPos( hPage, HWND_TOP, g_rcTabStart.left, g_rcTabStart.top, 0, 0, SWP_NOSIZE );
break;
/* help stuff */
case WM_HELP:
if( ((LPHELPINFO)lParam)->iCtrlId != (-1) )
WinHelp( (HWND)((LPHELPINFO)lParam)->hItemHandle, szHelpFile, HELP_WM_HELP, (DWORD)(LPSTR)dwHelpID );
else
return FALSE;
break;
case WM_CONTEXTMENU:
WinHelp( (HWND)wParam, szHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)dwHelpID );
break;
default:
return FALSE;
}
return TRUE;
}