ReactOS  0.4.12-dev-18-gf469aca
spider.cpp
Go to the documentation of this file.
1 /*
2  * PROJECT: Spider Solitaire
3  * LICENSE: See COPYING in top level directory
4  * FILE: base/applications/games/spider/spider.cpp
5  * PURPOSE: Window and message queue for Spider Solitaire
6  * PROGRAMMER: Gregor Schneider
7  */
8 
9 #include "spider.h"
10 
11 #include <commctrl.h>
12 #include <tchar.h>
13 
15 
19 
26 
28 
29 typedef struct _CardBack
30 {
31  HWND hSelf;
33  INT hdcNum;
34  INT imgNum;
37 
39 
40 void MakePath(TCHAR *szDest, UINT nDestLen, const TCHAR *szExt)
41 {
42  TCHAR *ptr;
43 
44  ptr = szDest + GetModuleFileName(GetModuleHandle(0), szDest, nDestLen) - 1;
45  while(*ptr-- != '.');
46  lstrcpy(ptr + 1, szExt);
47 }
48 
50 {
51  switch (uMsg)
52  {
53  case WM_INITDIALOG:
55  return TRUE;
56 
57  case WM_COMMAND:
58  switch(LOWORD(wParam))
59  {
60  case IDOK:
67 
68  NewGame();
69  EndDialog(hDlg, TRUE);
70  return TRUE;
71 
72  case IDCANCEL:
73  EndDialog(hDlg, FALSE);
74  return TRUE;
75  }
76  break;
77  }
78  return FALSE;
79 }
80 
81 int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR szCmdLine, int iCmdShow)
82 {
83  HWND hwnd;
84  MSG msg;
85  WNDCLASS wndclass;
87  HACCEL hAccelTable;
88 
89  hInstance = hInst;
90 
91  /* Load application title */
92  LoadString(hInst, IDS_SPI_NAME, szAppName, sizeof(szAppName) / sizeof(szAppName[0]));
93  /* Load MsgBox() texts here to avoid loading them many times later */
94  LoadString(hInst, IDS_SPI_ABOUT, MsgAbout, sizeof(MsgAbout) / sizeof(MsgAbout[0]));
95  LoadString(hInst, IDS_SPI_QUIT, MsgQuit, sizeof(MsgQuit) / sizeof(MsgQuit[0]));
96  LoadString(hInst, IDS_SPI_WIN, MsgWin, sizeof(MsgWin) / sizeof(MsgWin[0]));
97  LoadString(hInst, IDS_SPI_DEAL, MsgDeal, sizeof(MsgDeal) / sizeof(MsgDeal[0]));
98 
99  /* Window class for the main application parent window */
100  wndclass.style = 0;
101  wndclass.lpfnWndProc = WndProc;
102  wndclass.cbClsExtra = 0;
103  wndclass.cbWndExtra = 0;
104  wndclass.hInstance = hInst;
105  wndclass.hIcon = LoadIcon (hInst, MAKEINTRESOURCE(IDI_SPIDER));
106  wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
107  wndclass.hbrBackground = (HBRUSH)NULL;
109  wndclass.lpszClassName = szAppName;
110 
111  RegisterClass(&wndclass);
112 
113  ice.dwSize = sizeof(ice);
114  ice.dwICC = ICC_BAR_CLASSES;
115  InitCommonControlsEx(&ice);
116 
117  srand((unsigned)GetTickCount());
118 
119  /* InitCardLib(); */
120 
121  /* Construct the path to our help file */
122  MakePath(szHelpPath, MAX_PATH, _T(".hlp"));
123 
124  hwnd = CreateWindow(szAppName,
125  szAppName,
129  0, /*The real size will be computed in WndProc through WM_GETMINMAXINFO */
130  0, /* The real size will be computed in WndProc through WM_GETMINMAXINFO */
131  NULL,
132  NULL,
133  hInst,
134  NULL);
135 
136  hwndMain = hwnd;
137 
138  ShowWindow(hwnd, iCmdShow);
139  UpdateWindow(hwnd);
140 
141  hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));
142 
144 
145  while (GetMessage(&msg, NULL,0,0))
146  {
147  if (!TranslateAccelerator(hwnd, hAccelTable, &msg))
148  {
149  TranslateMessage(&msg);
150  DispatchMessage(&msg);
151  }
152  }
153  return msg.wParam;
154 }
155 
157 {
158  PCARDBACK pCardBack = (PCARDBACK)GetWindowLongPtr(hwnd, GWLP_USERDATA);
159  static WNDPROC hOldProc = NULL;
160 
161  if (!pCardBack)
162  return FALSE;
163 
164  if (!hOldProc)
165  hOldProc = pCardBack->hOldProc;
166 
167  switch (msg)
168  {
169  case WM_PAINT:
170  {
171  HDC hdc;
172  PAINTSTRUCT ps;
173  HPEN hPen, hOldPen;
174  HBRUSH hBrush, hOldBrush;
175  RECT rc;
176 
177  hdc = BeginPaint(hwnd, &ps);
178 
179  if (pCardBack->bSelected)
180  {
181  hPen = CreatePen(PS_SOLID, 2, RGB(0,0,0));
182  }
183  else
184  {
186  hPen = CreatePen(PS_SOLID, 2, Face);
187  }
188 
189  GetClientRect(hwnd, &rc);
190  hBrush = (HBRUSH)GetStockObject(NULL_BRUSH);
191  hOldPen = (HPEN)SelectObject(hdc, hPen);
192  hOldBrush = (HBRUSH)SelectObject(hdc, hBrush);
193 
194  Rectangle(hdc, rc.left+1, rc.top+1, rc.right, rc.bottom);
195 
196  StretchBlt(hdc,
197  2,
198  2,
202  pCardBack->hdcNum * __cardwidth,
203  0,
204  __cardwidth,
205  __cardheight,
206  SRCCOPY);
207 
208  SelectObject(hdc, hOldPen);
209  SelectObject(hdc, hOldBrush);
210 
211  EndPaint(hwnd, &ps);
212 
213  break;
214  }
215 
216  case WM_LBUTTONDOWN:
217  pCardBack->bSelected = pCardBack->bSelected ? FALSE : TRUE;
218  break;
219  }
220 
221  return CallWindowProc(hOldProc, hwnd, msg, wParam, lParam);
222 }
223 
224 
226 {
227  static PCARDBACK pCardBacks = NULL;
228 
229  switch (uMsg)
230  {
231  case WM_INITDIALOG:
232  {
233  INT i, c;
234  SIZE_T size = sizeof(CARDBACK) * NUM_CARDBACKS;
235 
236  pCardBacks = (PCARDBACK)HeapAlloc(GetProcessHeap(), 0, size);
237 
238  if (!pCardBacks)
239  return FALSE;
240 
241  for (i = 0, c = CARDBACK_START; c <= CARDBACK_END; i++, c++)
242  {
243  pCardBacks[i].hSelf = GetDlgItem(hDlg, c);
244  pCardBacks[i].bSelected = FALSE;
245  pCardBacks[i].hdcNum = CARDBACK_RES_START + i;
246  pCardBacks[i].imgNum = i + 1;
247  pCardBacks[i].hOldProc = (WNDPROC)SetWindowLongPtr(pCardBacks[i].hSelf,
248  GWLP_WNDPROC,
250 
251  SetWindowLongPtr(pCardBacks[i].hSelf, GWLP_USERDATA, (LONG_PTR)&pCardBacks[i]);
252  }
253 
254  return TRUE;
255  }
256 
257  case WM_COMMAND:
258  if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
259  {
260  INT i, num = 0;
261  for (i = 0; i < NUM_CARDBACKS; i++)
262  {
263  if (pCardBacks[i].bSelected)
264  {
265  num = pCardBacks[i].imgNum;
266  }
267  }
268 
269  EndDialog(hDlg, LOWORD(wParam) == IDOK ? num : FALSE);
270  HeapFree(GetProcessHeap(), 0, pCardBacks);
271  return TRUE;
272  }
273 
274  if (HIWORD(wParam) == STN_CLICKED)
275  {
276  INT i;
277  RECT rc;
278  for (i = 0; i < NUM_CARDBACKS; i++)
279  {
280  pCardBacks[i].bSelected = pCardBacks[i].hSelf == (HWND)lParam;
281 
282  GetClientRect(pCardBacks[i].hSelf, &rc);
283  InvalidateRect(pCardBacks[i].hSelf, &rc, TRUE);
284  }
285 
286  break;
287  }
288  }
289 
290  return FALSE;
291 }
292 
293 
295 {
296  INT cardBack;
297 
298  if ((cardBack = DialogBox(hInstance, MAKEINTRESOURCE(IDD_CARDBACK), hwnd, CardBackDlgProc)))
299  {
300  SpiderWnd.SetBackCardIdx(CARDBACK_RES_START + (cardBack - 1));
301  SpiderWnd.Redraw();
302  }
303 }
304 
306 {
307  static int nWidth, nHeight;
308 
309  switch (iMsg)
310  {
311  case WM_CREATE:
312  {
313  // For now, the Help dialog is disabled because of lacking of HTML Help support
315 
316  SpiderWnd.Create(hwnd, 0, WS_CHILD | WS_VISIBLE, 0, 0, 100, 100);
318  CreateSpider();
319 
320  SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOZORDER);
321 
323 
324  return 0;
325  }
326 
327  case WM_DESTROY:
328  PostQuitMessage(0);
329  return 0;
330 
331  case WM_SIZE:
332  nWidth = LOWORD(lParam);
333  nHeight = HIWORD(lParam);
334 
335  MoveWindow(SpiderWnd, 0, 0, nWidth, nHeight, TRUE);
336  return 0;
337 
338  case WM_GETMINMAXINFO:
339  {
340  MINMAXINFO *mmi;
341 
342  mmi = (MINMAXINFO *)lParam;
343  mmi->ptMinTrackSize.x = NUM_STACKS * __cardwidth + (NUM_STACKS + 3) * X_BORDER + 12; // Border left and right of 6px
346  2 * Y_BORDER +
347  3 * __cardheight +
349  return 0;
350  }
351 
352  case WM_COMMAND:
353  switch (LOWORD(wParam))
354  {
355  case IDM_GAME_NEW:
356  NewGame();
357  return 0;
358 
359  case IDM_GAME_DECK:
360  ShowDeckOptionsDlg(hwnd);
361  return 0;
362 
363  case IDM_HELP_CONTENTS:
364  WinHelp(hwnd, szHelpPath, HELP_CONTENTS, 0);//HELP_KEY, (DWORD)"How to play");
365  return 0;
366 
367  case IDM_HELP_ABOUT:
369  return 0;
370 
371  case IDM_GAME_EXIT:
372  PostMessage(hwnd, WM_CLOSE, 0, 0);
373  return 0;
374  }
375 
376  return 0;
377 
378  case WM_CLOSE:
379  if (fGameStarted == false)
380  {
381  DestroyWindow(hwnd);
382  return 0;
383  }
384  else
385  {
386  int ret;
387 
389  if (ret == IDYES)
390  {
391  WinHelp(hwnd, szHelpPath, HELP_QUIT, 0);
392  DestroyWindow(hwnd);
393  }
394  }
395  return 0;
396  }
397  return DefWindowProc (hwnd, iMsg, wParam, lParam);
398 }
399 
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define IDS_SPI_ABOUT
Definition: resource.h:38
POINT ptMinTrackSize
Definition: winuser.h:3572
#define CallWindowProc
Definition: winuser.h:5601
#define HDC
Definition: msvc.h:22
void MakePath(TCHAR *szDest, UINT nDestLen, const TCHAR *szExt)
Definition: spider.cpp:40
HWND hSelf
Definition: solitaire.cpp:36
#define IDD_CARDBACK
Definition: resource.h:27
#define TranslateAccelerator
Definition: winuser.h:5726
#define Y_BORDER
Definition: solitaire.h:53
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define DispatchMessage
Definition: winuser.h:5631
BOOL WINAPI TranslateMessage(_In_ const MSG *)
INT imgNum
Definition: solitaire.cpp:39
#define TRUE
Definition: types.h:120
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
#define IDOK
Definition: winuser.h:824
#define HELP_CONTENTS
Definition: winuser.h:2359
CardWindow SpiderWnd
Definition: spider.cpp:27
#define MF_BYCOMMAND
Definition: winuser.h:202
#define IDR_ACCELERATOR1
Definition: resource.h:7
long y
Definition: polytest.cpp:48
#define WM_LBUTTONDOWN
Definition: winuser.h:1752
#define CreateWindow
Definition: winuser.h:5620
#define IDYES
Definition: winuser.h:829
long x
Definition: polytest.cpp:48
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
#define X_BORDER
Definition: solitaire.h:49
struct _CardBack * PCARDBACK
BOOL Create(HWND hwndParent, DWORD dwExStyle, DWORD dwStyle, int x, int y, int width, int height)
Definition: cardwindow.cpp:109
#define NULL_BRUSH
Definition: wingdi.h:899
#define HELP_QUIT
Definition: winuser.h:2368
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
DWORD dwAppStartTime
Definition: spider.cpp:16
#define IDR_MENU1
Definition: resource.h:6
#define CALLBACK
Definition: compat.h:27
BOOL WINAPI UpdateWindow(_In_ HWND)
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:445
void __cdecl srand(_In_ unsigned int _Seed)
LONG top
Definition: windef.h:297
HANDLE HWND
Definition: compat.h:13
#define IDM_GAME_DECK
Definition: resource.h:11
HINSTANCE hInstance
Definition: spider.cpp:18
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
int cbClsExtra
Definition: winuser.h:3118
int yRowStackCardOffset
Definition: solcreate.cpp:12
LPCSTR lpszMenuName
Definition: winuser.h:3124
#define IDM_HELP_ABOUT
Definition: resource.h:375
HBRUSH hbrBackground
Definition: winuser.h:3123
#define WS_CHILD
Definition: pedump.c:617
#define CARDBACK_RES_START
Definition: solitaire.h:19
LONG left
Definition: windef.h:296
#define SWP_NOZORDER
Definition: winuser.h:1232
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR szCmdLine, int iCmdShow)
Definition: spider.cpp:81
int32_t INT_PTR
Definition: typedefs.h:62
LONG right
Definition: windef.h:298
void CreateSpider(void)
Definition: spigame.cpp:279
BOOL WINAPI DestroyWindow(_In_ HWND)
HWND hwndMain
Definition: spider.cpp:17
int32_t INT
Definition: typedefs.h:56
#define SetWindowLongPtr
Definition: treelist.c:70
DWORD WINAPI GetSysColor(_In_ int)
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
WPARAM wParam
Definition: combotst.c:138
HDC __hdcCardBitmaps
Definition: cardlib.cpp:18
CHAR * LPTSTR
Definition: xmlstorage.h:192
#define IDD_DIFFICULTY
Definition: resource.h:31
UINT_PTR WPARAM
Definition: windef.h:207
void NewGame(void)
Definition: solgame.cpp:17
void Redraw(void)
Definition: cardwindow.cpp:553
#define DialogBox
Definition: winuser.h:5627
#define PS_SOLID
Definition: wingdi.h:584
int cbWndExtra
Definition: winuser.h:3119
#define LoadAccelerators
Definition: winuser.h:5676
GLenum GLclampf GLint i
Definition: glfuncs.h:14
#define CARDBACK_OPTIONS_HEIGHT
Definition: solitaire.h:21
#define COLOR_3DFACE
Definition: winuser.h:919
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MB_YESNO
Definition: winuser.h:811
LRESULT CALLBACK CardImageWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: spider.cpp:156
LONG_PTR LPARAM
Definition: windef.h:208
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
static PVOID ptr
Definition: dispmode.c:27
HCURSOR hCursor
Definition: winuser.h:3122
#define CW_USEDEFAULT
Definition: winuser.h:225
#define GWLP_USERDATA
Definition: treelist.c:63
#define IDS_SPI_DEAL
Definition: resource.h:41
HDC hdc
Definition: msvc.h:53
INT_PTR CALLBACK CardBackDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: spider.cpp:225
UINT msg
Definition: msvc.h:92
smooth NULL
Definition: ftsmooth.c:416
#define MB_ICONQUESTION
Definition: winuser.h:783
TCHAR MsgDeal[128]
Definition: spider.cpp:24
WNDPROC hOldProc
Definition: solitaire.cpp:37
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
#define DefWindowProc
Definition: ros2win.h:31
#define WM_DESTROY
Definition: winuser.h:1591
#define PostMessage
Definition: winuser.h:5698
char TCHAR
Definition: xmlstorage.h:189
#define IDS_SPI_QUIT
Definition: resource.h:39
#define ICC_BAR_CLASSES
Definition: commctrl.h:60
#define _T(x)
Definition: vfdio.h:22
#define IDM_HELP_CONTENTS
Definition: resource.h:14
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:395
#define SM_CYCAPTION
Definition: winuser.h:953
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define STN_CLICKED
Definition: winuser.h:2055
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define WM_SIZE
Definition: winuser.h:1593
#define WM_CLOSE
Definition: winuser.h:1603
#define RGB(r, g, b)
Definition: wingdi.h:2917
#define MAX_PATH
Definition: compat.h:26
unsigned int UINT
Definition: ndis.h:50
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
int WINAPI GetSystemMetrics(_In_ int)
#define CARDBACK_START
Definition: solitaire.h:16
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint num
Definition: glext.h:9618
TCHAR szHelpPath[MAX_PATH]
Definition: spider.cpp:14
#define GetModuleFileName
Definition: winbase.h:3645
BOOL bSelected
Definition: solitaire.cpp:40
#define WM_PAINT
Definition: winuser.h:1602
#define MB_ICONINFORMATION
Definition: winuser.h:796
int ret
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:893
#define IDI_SPIDER
Definition: resource.h:4
#define MessageBox
Definition: winuser.h:5688
#define NUM_CARDBACKS
Definition: solitaire.h:18
#define WM_COMMAND
Definition: winuser.h:1716
DWORD dwDifficulty
Definition: spider.cpp:25
LPCSTR lpszClassName
Definition: winuser.h:3125
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
#define WINAPI
Definition: msvc.h:20
#define LoadCursor
Definition: winuser.h:5678
int __cardwidth
Definition: cardlib.cpp:25
#define GWLP_WNDPROC
Definition: treelist.c:66
UINT style
Definition: winuser.h:3116
#define IDC_DIF_ONECOLOR
Definition: resource.h:32
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2859
TCHAR MsgAbout[128]
Definition: spider.cpp:22
void SetBackCardIdx(UINT uBackIdx)
Definition: cardwindow.cpp:728
#define IDM_GAME_EXIT
Definition: resource.h:13
struct _CardBack CARDBACK
ULONG_PTR SIZE_T
Definition: typedefs.h:78
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define CARDBACK_END
Definition: solitaire.h:17
#define IDC_DIF_TWOCOLORS
Definition: resource.h:33
#define IDM_GAME_NEW
Definition: resource.h:10
HINSTANCE hInst
Definition: dxdiag.c:13
#define GetModuleHandle
Definition: winbase.h:3641
bool fGameStarted
Definition: solgame.cpp:14
HINSTANCE hInstance
Definition: winuser.h:3120
#define lstrcpy
Definition: winbase.h:3688
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
INT_PTR CALLBACK DifficultyDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: spider.cpp:49
#define MB_OK
Definition: winuser.h:784
#define GetMessage
Definition: winuser.h:5656
VOID ShowDeckOptionsDlg(HWND hwnd)
Definition: spider.cpp:294
#define BST_CHECKED
Definition: winuser.h:197
WNDPROC lpfnWndProc
Definition: winuser.h:3117
#define msg(x)
Definition: auth_time.c:54
#define IDC_ARROW
Definition: winuser.h:682
int __cardheight
Definition: cardlib.cpp:26
#define WM_CREATE
Definition: winuser.h:1590
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define c
Definition: ke_i.h:80
TCHAR MsgQuit[128]
Definition: spider.cpp:21
#define HIWORD(l)
Definition: typedefs.h:246
#define IDC_DIF_FOURCOLORS
Definition: resource.h:34
LONG bottom
Definition: windef.h:299
#define SWP_NOMOVE
Definition: winuser.h:1229
#define NUM_STACKS
Definition: spider.h:21
#define SM_CYMENU
Definition: winuser.h:966
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define IDS_SPI_WIN
Definition: resource.h:40
BOOL WINAPI CheckRadioButton(_In_ HWND, _In_ int, _In_ int, _In_ int)
#define RegisterClass
Definition: winuser.h:5702
#define LoadIcon
Definition: winuser.h:5679
#define GetWindowLongPtr
Definition: treelist.c:73
#define MF_GRAYED
Definition: winuser.h:129
TCHAR MsgWin[128]
Definition: spider.cpp:23
#define IDCANCEL
Definition: winuser.h:825
LONG_PTR LRESULT
Definition: windef.h:209
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
Definition: spider.cpp:305
#define CARDBACK_OPTIONS_WIDTH
Definition: solitaire.h:20
#define WS_VISIBLE
Definition: pedump.c:620
HMENU WINAPI GetMenu(_In_ HWND)
TCHAR szAppName[128]
Definition: spider.cpp:20
#define WM_INITDIALOG
Definition: winuser.h:1715
LPARAM lParam
Definition: combotst.c:139
#define WM_GETMINMAXINFO
Definition: winuser.h:1622
#define LOWORD(l)
Definition: pedump.c:82
#define IDS_SPI_NAME
Definition: resource.h:37
#define HeapFree(x, y, z)
Definition: compat.h:394
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define SRCCOPY
Definition: wingdi.h:331
#define LoadString
Definition: winuser.h:5685
HICON hIcon
Definition: winuser.h:3121
INT hdcNum
Definition: solitaire.cpp:38
#define WinHelp
Definition: winuser.h:5730