reactos/base/applications/games/winemine/dialog.c
Amine Khaldi c424146e2c Create a branch for cmake bringup.
svn path=/branches/cmake-bringup/; revision=48236
2010-07-24 18:52:44 +00:00

168 lines
5.7 KiB
C

/*
* WineMine (dialog.c)
*
* Copyright 2000 Joshua Thielen <jt85296@ltu.edu>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <windows.h>
#include <tchar.h>
#include "main.h"
#include "dialog.h"
#include "resource.h"
INT_PTR CALLBACK CustomDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
static BOARD *pBoard;
switch(uMsg)
{
case WM_INITDIALOG:
pBoard = (BOARD*) lParam;
SetDlgItemInt( hDlg, IDC_EDITROWS, pBoard->uRows, FALSE );
SetDlgItemInt( hDlg, IDC_EDITCOLS, pBoard->uCols, FALSE );
SetDlgItemInt( hDlg, IDC_EDITMINES, pBoard->uMines, FALSE );
return TRUE;
case WM_COMMAND:
switch( LOWORD( wParam ) )
{
case IDOK:
pBoard->uRows = GetDlgItemInt( hDlg, IDC_EDITROWS, NULL, FALSE );
pBoard->uCols = GetDlgItemInt( hDlg, IDC_EDITCOLS, NULL, FALSE );
pBoard->uMines = GetDlgItemInt( hDlg, IDC_EDITMINES, NULL, FALSE );
CheckLevel( pBoard );
/* Fall through */
case IDCANCEL:
EndDialog( hDlg, LOWORD(wParam) );
return TRUE;
}
break;
}
return FALSE;
}
INT_PTR CALLBACK CongratsDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
static BOARD *pBoard;
switch(uMsg)
{
case WM_INITDIALOG:
pBoard = (BOARD*) lParam;
SetDlgItemText( hDlg, IDC_EDITNAME, pBoard->szBestName[pBoard->Difficulty] );
return TRUE;
case WM_COMMAND:
switch( LOWORD(wParam) )
{
case IDOK:
GetDlgItemText( hDlg, IDC_EDITNAME,
pBoard->szBestName[pBoard->Difficulty],
sizeof( pBoard->szBestName[pBoard->Difficulty] ) );
EndDialog( hDlg, 0 );
return TRUE;
case IDCANCEL:
EndDialog( hDlg, 0 );
return TRUE;
}
break;
}
return FALSE;
}
INT_PTR CALLBACK TimesDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
static BOARD *pBoard;
HKEY hKey;
UCHAR i;
TCHAR szData[16];
TCHAR szKeyName[8];
TCHAR szTimes[35];
TCHAR szSeconds[23];
TCHAR szNobody[15];
switch(uMsg)
{
case WM_INITDIALOG:
pBoard = (BOARD*) lParam;
/* set best names */
for( i = 0; i < 3; i++ )
SetDlgItemText( hDlg, (IDC_NAME1) + i, pBoard->szBestName[i] );
/* set best times */
LoadString( pBoard->hInst, IDS_SECONDS, szSeconds, sizeof(szSeconds) / sizeof(TCHAR) );
for( i = 0; i < 3; i++ )
{
wsprintf(szTimes, TEXT("%d %s"), pBoard->uBestTime[i], szSeconds);
SetDlgItemText( hDlg, (IDC_TIME1) + i, szTimes );
}
return TRUE;
case WM_COMMAND:
switch( LOWORD( wParam ) )
{
case IDOK:
case IDCANCEL:
EndDialog( hDlg, 0 );
return TRUE;
case IDRESET:
if( RegCreateKeyEx( HKEY_CURRENT_USER, szWineMineRegKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL ) != ERROR_SUCCESS)
return TRUE;
LoadString( pBoard->hInst, IDS_NOBODY, szNobody, sizeof(szNobody) / sizeof(TCHAR) );
LoadString( pBoard->hInst, IDS_SECONDS, szSeconds, sizeof(szSeconds) / sizeof(TCHAR) );
for (i = 0; i < 3; i++)
{
pBoard->uBestTime[i] = 999;
_tcscpy(pBoard->szBestName[i], szNobody);
wsprintf(szTimes, TEXT("%d %s"), pBoard->uBestTime[i], szSeconds);
SetDlgItemText( hDlg, (IDC_NAME1) + i, pBoard->szBestName[i] );
SetDlgItemText( hDlg, (IDC_TIME1) + i, szTimes );
}
/* Write the changes to the registry
As we write to the same registry key as MS WinMine does, we have to start at 1 for the registry keys */
for( i = 0; i < 3; i++ )
{
wsprintf( szKeyName, TEXT("Name%u"), i + 1 );
_tcsncpy( szData, pBoard->szBestName[i], sizeof(szData) / sizeof(TCHAR) );
RegSetValueEx( hKey, szKeyName, 0, REG_SZ, (LPBYTE)szData, (_tcslen(szData) + 1) * sizeof(TCHAR) );
}
for( i = 0; i < 3; i++ )
{
wsprintf( szKeyName, TEXT("Time%u"), i + 1 );
RegSetValueEx( hKey, szKeyName, 0, REG_DWORD, (LPBYTE)&pBoard->uBestTime[i], sizeof(DWORD) );
}
RegCloseKey(hKey);
return TRUE;
}
}
return FALSE;
}