274 lines
8.8 KiB
C
274 lines
8.8 KiB
C
|
#include "sol.h"
|
||
|
#include <htmlhelp.h>
|
||
|
VSZASSERT
|
||
|
|
||
|
#define dxBord 3
|
||
|
#define dyBord 3
|
||
|
|
||
|
INT_PTR APIENTRY OptionsDlgProc(HANDLE hdlg, UINT wm, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
BOOL fNewGame;
|
||
|
static INT ccrdDealNew;
|
||
|
static SMD smdNew;
|
||
|
|
||
|
BOOL FDestroyStat();
|
||
|
|
||
|
// Used for context sensitive help.
|
||
|
static DWORD aIds[] = {
|
||
|
ideDrawOne, IDH_OPTIONS_DRAW,
|
||
|
ideDrawThree, IDH_OPTIONS_DRAW,
|
||
|
ideScoreStandard, IDH_OPTIONS_SCORING,
|
||
|
ideScoreVegas, IDH_OPTIONS_SCORING,
|
||
|
ideScoreNone, IDH_OPTIONS_SCORING,
|
||
|
ideTimedGame, IDH_OPTIONS_TIMED_GAME,
|
||
|
ideStatusBar, IDH_OPTIONS_STATUS_BAR,
|
||
|
ideOutlineDrag, IDH_OPTIONS_OUTLINE_DRAGGING,
|
||
|
ideKeepScore, IDH_OPTIONS_CUMULATIVE_SCORE,
|
||
|
ideScore, IDH_OPTIONS_CUMULATIVE_SCORE,
|
||
|
0,0 };
|
||
|
|
||
|
switch(wm)
|
||
|
{
|
||
|
default:
|
||
|
return fFalse;
|
||
|
|
||
|
case WM_INITDIALOG:
|
||
|
CheckRadioButton(hdlg, ideScoreStandard, ideScoreNone, smdNew = smd);
|
||
|
ccrdDealNew = ccrdDeal;
|
||
|
CheckRadioButton(hdlg, ideDrawOne, ideDrawThree, ccrdDeal == 1 ? ideDrawOne : ideDrawThree);
|
||
|
CheckDlgButton(hdlg, ideStatusBar, (WORD)fStatusBar);
|
||
|
CheckDlgButton(hdlg, ideTimedGame, (WORD)fTimedGame);
|
||
|
CheckDlgButton(hdlg, ideOutlineDrag, (WORD)fOutlineDrag);
|
||
|
CheckDlgButton(hdlg, ideKeepScore, (WORD)fKeepScore);
|
||
|
EnableWindow(GetDlgItem(hdlg, ideKeepScore), smd == smdVegas);
|
||
|
EnableWindow(GetDlgItem(hdlg, ideScore), smd == smdVegas);
|
||
|
break;
|
||
|
case WM_COMMAND:
|
||
|
switch( GET_WM_COMMAND_ID( wParam, lParam) )
|
||
|
{
|
||
|
default:
|
||
|
return fFalse;
|
||
|
case ideDrawOne:
|
||
|
case ideDrawThree:
|
||
|
ccrdDealNew = GET_WM_COMMAND_ID( wParam, lParam) == ideDrawOne ? 1 : 3;
|
||
|
CheckRadioButton(hdlg, ideDrawOne, ideDrawThree, GET_WM_COMMAND_ID( wParam, lParam));
|
||
|
break;
|
||
|
case ideScoreStandard:
|
||
|
case ideScoreVegas:
|
||
|
case ideScoreNone:
|
||
|
smdNew = GET_WM_COMMAND_ID( wParam, lParam );
|
||
|
CheckRadioButton(hdlg, ideScoreStandard, ideScoreNone, GET_WM_COMMAND_ID( wParam, lParam ));
|
||
|
EnableWindow(GetDlgItem(hdlg, ideKeepScore), smdNew == smdVegas);
|
||
|
EnableWindow(GetDlgItem(hdlg, ideScore), smdNew == smdVegas);
|
||
|
break;
|
||
|
case IDOK:
|
||
|
fNewGame = fFalse;
|
||
|
if(IsDlgButtonChecked(hdlg, ideStatusBar) != (WORD)fStatusBar)
|
||
|
{
|
||
|
if(fStatusBar ^= 1)
|
||
|
FCreateStat();
|
||
|
else
|
||
|
FDestroyStat();
|
||
|
}
|
||
|
if(ccrdDealNew != ccrdDeal)
|
||
|
{
|
||
|
ccrdDeal = ccrdDealNew;
|
||
|
FInitGm();
|
||
|
PositionCols();
|
||
|
fNewGame = fTrue;
|
||
|
}
|
||
|
if(IsDlgButtonChecked(hdlg, ideTimedGame) != (WORD)fTimedGame)
|
||
|
{
|
||
|
fTimedGame ^= 1;
|
||
|
fNewGame = fTrue;
|
||
|
}
|
||
|
if(smd != smdNew)
|
||
|
{
|
||
|
smd = smdNew;
|
||
|
fNewGame = fTrue;
|
||
|
}
|
||
|
if(IsDlgButtonChecked(hdlg, ideOutlineDrag) != (WORD)fOutlineDrag)
|
||
|
{
|
||
|
FSetDrag(fOutlineDrag^1);
|
||
|
}
|
||
|
|
||
|
fKeepScore = IsDlgButtonChecked(hdlg, ideKeepScore);
|
||
|
|
||
|
WriteIniFlags(wifOpts|wifBitmap);
|
||
|
/* fall thru */
|
||
|
case IDCANCEL:
|
||
|
EndDialog(hdlg, GET_WM_COMMAND_ID( wParam, lParam ) == IDOK && fNewGame);
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
// context sensitive help.
|
||
|
case WM_HELP:
|
||
|
WinHelp(((LPHELPINFO) lParam)->hItemHandle, TEXT("sol.hlp"),
|
||
|
HELP_WM_HELP, (ULONG_PTR) aIds);
|
||
|
break;
|
||
|
|
||
|
case WM_CONTEXTMENU:
|
||
|
WinHelp((HWND) wParam, TEXT("sol.hlp"), HELP_CONTEXTMENU,
|
||
|
(ULONG_PTR) aIds);
|
||
|
break;
|
||
|
}
|
||
|
return fTrue;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
VOID DoOptions()
|
||
|
{
|
||
|
BOOL fNewGame;
|
||
|
|
||
|
if(fNewGame = (BOOL)DialogBox(hinstApp,
|
||
|
MAKEINTRESOURCE(iddOptions),
|
||
|
hwndApp,
|
||
|
OptionsDlgProc))
|
||
|
|
||
|
NewGame(fTrue, fTrue);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
BOOL FDrawFocus(HDC hdc, RC *prc, BOOL fFocus)
|
||
|
{
|
||
|
HBRUSH hbr;
|
||
|
RC rc;
|
||
|
hbr = CreateSolidBrush(GetSysColor(fFocus ? COLOR_HIGHLIGHT : COLOR_3DFACE));
|
||
|
if(hbr == NULL)
|
||
|
return fFalse;
|
||
|
rc = *prc;
|
||
|
FrameRect(hdc, (LPRECT) &rc, hbr);
|
||
|
InflateRect((LPRECT) &rc, -1, -1);
|
||
|
FrameRect(hdc, (LPRECT) &rc, hbr);
|
||
|
DeleteObject(hbr);
|
||
|
return fTrue;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
INT_PTR APIENTRY BackDlgProc(HANDLE hdlg, UINT wm, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
static INT modeNew;
|
||
|
MEASUREITEMSTRUCT FAR *lpmi;
|
||
|
DRAWITEMSTRUCT FAR *lpdi;
|
||
|
RC rc, rcCrd;
|
||
|
HDC hdc;
|
||
|
|
||
|
// Used for context sensitive help.
|
||
|
static DWORD aIds[] = {
|
||
|
IDFACEDOWN1, IDH_SELECT_CARD_BACK,
|
||
|
IDFACEDOWN2, IDH_SELECT_CARD_BACK,
|
||
|
IDFACEDOWN3, IDH_SELECT_CARD_BACK,
|
||
|
IDFACEDOWN4, IDH_SELECT_CARD_BACK,
|
||
|
IDFACEDOWN5, IDH_SELECT_CARD_BACK,
|
||
|
IDFACEDOWN6, IDH_SELECT_CARD_BACK,
|
||
|
IDFACEDOWN7, IDH_SELECT_CARD_BACK,
|
||
|
IDFACEDOWN8, IDH_SELECT_CARD_BACK,
|
||
|
IDFACEDOWN9, IDH_SELECT_CARD_BACK,
|
||
|
IDFACEDOWN10, IDH_SELECT_CARD_BACK,
|
||
|
IDFACEDOWN11, IDH_SELECT_CARD_BACK,
|
||
|
IDFACEDOWN12, IDH_SELECT_CARD_BACK,
|
||
|
0,0 };
|
||
|
|
||
|
switch(wm)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
modeNew = modeFaceDown;
|
||
|
SetFocus(GetDlgItem(hdlg, modeFaceDown));
|
||
|
return fFalse;
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
if( GET_WM_COMMAND_CMD( wParam, lParam )==BN_CLICKED )
|
||
|
if( GET_WM_COMMAND_ID( wParam, lParam ) >= IDFACEDOWNFIRST && GET_WM_COMMAND_ID( wParam, lParam ) <= IDFACEDOWN12) {
|
||
|
modeNew = (INT) wParam;
|
||
|
break;
|
||
|
}
|
||
|
if( GET_WM_COMMAND_CMD( wParam, lParam )==BN_DOUBLECLICKED )
|
||
|
if( GET_WM_COMMAND_ID( wParam, lParam ) >= IDFACEDOWNFIRST && GET_WM_COMMAND_ID( wParam, lParam ) <= IDFACEDOWN12 )
|
||
|
// BabakJ: On Win32, we are destroying wNotifyCode, but is not used later!
|
||
|
wParam=IDOK;
|
||
|
// slimy fall through hack of doom (no dupe code or goto)
|
||
|
switch( GET_WM_COMMAND_ID( wParam, lParam )) {
|
||
|
case IDOK:
|
||
|
ChangeBack(modeNew);
|
||
|
WriteIniFlags(wifBack);
|
||
|
// fall thru
|
||
|
|
||
|
case IDCANCEL:
|
||
|
EndDialog(hdlg, 0);
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case WM_MEASUREITEM:
|
||
|
lpmi = (MEASUREITEMSTRUCT FAR *)lParam;
|
||
|
lpmi->CtlType = ODT_BUTTON;
|
||
|
lpmi->itemWidth = 32;
|
||
|
lpmi->itemHeight = 54;
|
||
|
break;
|
||
|
case WM_DRAWITEM:
|
||
|
lpdi = (DRAWITEMSTRUCT FAR *)lParam;
|
||
|
|
||
|
CopyRect((LPRECT) &rc, &lpdi->rcItem);
|
||
|
rcCrd = rc;
|
||
|
InflateRect((LPRECT) &rcCrd, -dxBord, -dyBord);
|
||
|
hdc = lpdi->hDC;
|
||
|
|
||
|
if (lpdi->itemAction == ODA_DRAWENTIRE)
|
||
|
{
|
||
|
cdtDrawExt(hdc, rcCrd.xLeft, rcCrd.yTop,
|
||
|
rcCrd.xRight-rcCrd.xLeft, rcCrd.yBot-rcCrd.yTop,
|
||
|
lpdi->CtlID, FACEDOWN, 0L);
|
||
|
FDrawFocus(hdc, &rc, lpdi->itemState & ODS_FOCUS);
|
||
|
break;
|
||
|
}
|
||
|
if (lpdi->itemAction == ODA_SELECT)
|
||
|
InvertRect(hdc, (LPRECT)&rcCrd);
|
||
|
|
||
|
if (lpdi->itemAction == ODA_FOCUS) {
|
||
|
// Set the new mode when we get focus
|
||
|
if (lpdi->itemState & ODS_FOCUS)
|
||
|
modeNew = lpdi->CtlID;
|
||
|
FDrawFocus(hdc, &rc, lpdi->itemState & ODS_FOCUS);
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
|
||
|
// context sensitive help.
|
||
|
case WM_HELP:
|
||
|
WinHelp(((LPHELPINFO) lParam)->hItemHandle, TEXT("sol.hlp"),
|
||
|
HELP_WM_HELP, (ULONG_PTR) aIds);
|
||
|
break;
|
||
|
|
||
|
case WM_CONTEXTMENU:
|
||
|
WinHelp((HWND) wParam, TEXT("sol.hlp"), HELP_CONTEXTMENU,
|
||
|
(ULONG_PTR) aIds);
|
||
|
break;
|
||
|
|
||
|
|
||
|
default:
|
||
|
return fFalse;
|
||
|
}
|
||
|
return fTrue;
|
||
|
}
|
||
|
|
||
|
|
||
|
LRESULT APIENTRY BackPushProc(HWND hwnd, INT wm, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
return 0L;
|
||
|
}
|
||
|
|
||
|
VOID DoBacks()
|
||
|
{
|
||
|
|
||
|
DialogBox(hinstApp,
|
||
|
MAKEINTRESOURCE(iddBacks),
|
||
|
hwndApp,
|
||
|
BackDlgProc);
|
||
|
|
||
|
}
|