Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

225 lines
7.0 KiB

#include "sol.h"
VSZASSERT
#define dxBord 3
#define dyBord 3
BOOL APIENTRY OptionsDlgProc(HANDLE hdlg, WORD wm, WPARAM wParam, LONG lParam)
{
BOOL fNewGame;
static INT ccrdDealNew;
static SMD smdNew;
BOOL FDestroyStat();
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);
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);
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;
}
return fTrue;
}
VOID DoOptions()
{
FARPROC lpprocOptions;
BOOL fNewGame;
lpprocOptions = MakeProcInstance( (FARPROC)OptionsDlgProc, hinstApp);
if(fNewGame = DialogBox(hinstApp,
MAKEINTRESOURCE(iddOptions),
hwndApp,
(WNDPROC)lpprocOptions))
NewGame(fTrue, fTrue);
FreeProcInstance(lpprocOptions);
}
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;
}
BOOL APIENTRY BackDlgProc(HANDLE hdlg, WORD wm, WPARAM wParam, LONG lParam)
{
static INT modeNew;
MEASUREITEMSTRUCT FAR *lpmi;
DRAWITEMSTRUCT FAR *lpdi;
RC rc, rcCrd;
HDC hdc;
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 = 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) {
// bugbug what is the next line doing? ChrisW 2-5-96
if (lpdi->itemState & ODS_FOCUS);
modeNew = lpdi->CtlID;
FDrawFocus(hdc, &rc, lpdi->itemState & ODS_FOCUS);
}
break;
default:
return fFalse;
}
return fTrue;
}
LONG APIENTRY BackPushProc(HWND hwnd, INT wm, INT wParam, LONG lParam)
{
return 0L;
}
VOID DoBacks()
{
FARPROC lpprocBacks;
lpprocBacks = MakeProcInstance( (FARPROC)BackDlgProc, hinstApp);
DialogBox(hinstApp,
MAKEINTRESOURCE(iddBacks),
hwndApp,
(WNDPROC)lpprocBacks);
FreeProcInstance(lpprocBacks);
}