Sync with trunk head (part 1 of x)
[reactos.git] / base / applications / games / solitaire / solcreate.cpp
1 #include <windows.h>
2 #include <commctrl.h>
3 #include <tchar.h>
4 #include "resource.h"
5 #include "cardlib.h"
6
7 #include "solitaire.h"
8
9 CardRegion *pDeck;
10 CardRegion *pPile;
11 CardRegion *pSuitStack[4];
12 CardRegion *pRowStack[NUM_ROW_STACKS];
13
14 extern CardStack activepile;
15
16 HBITMAP hbmBitmap;
17 HDC hdcBitmap;
18 int yRowStackCardOffset;
19
20 void CreateSol()
21 {
22 int i;
23
24 // hbmBitmap = (HBITMAP)LoadImage(0,"test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
25 // SolWnd.SetBackImage(hbmBitmap);
26
27 activepile.Clear();
28
29 // Compute the value for yRowStackCardOffset based on the height of the card, so the card number isn't hidden on larger cards
30 yRowStackCardOffset = (int)(__cardheight / 6.7);
31
32 pDeck = SolWnd.CreateRegion(DECK_ID, true, X_BORDER, Y_BORDER, 2, 1);
33 pDeck->SetEmptyImage(CS_EI_CIRC);
34 pDeck->SetThreedCount(6);
35 pDeck->SetDragRule(CS_DRAG_NONE, 0);
36 pDeck->SetDropRule(CS_DROP_NONE, 0);
37 pDeck->SetClickProc(DeckClickProc);
38 pDeck->SetDblClickProc(DeckClickProc);
39 pDeck->SetFaceDirection(CS_FACE_DOWN, 0);
40
41 pPile = SolWnd.CreateRegion(PILE_ID, true, X_BORDER + __cardwidth + X_PILE_BORDER, Y_BORDER, CS_DEFXOFF, 1);
42 pPile->SetEmptyImage(CS_EI_NONE);
43 pPile->SetDragRule(CS_DRAG_TOP, 0);
44 pPile->SetDropRule(CS_DROP_NONE, 0);
45 pPile->SetDblClickProc(PileDblClickProc);
46 pPile->SetRemoveCardProc(PileRemoveProc);
47
48 //
49 // Create the suit stacks
50 //
51 for(i = 0; i < 4; i++)
52 {
53 pSuitStack[i] = SolWnd.CreateRegion(SUIT_ID+i, true, 0, Y_BORDER, 0, 0);
54 pSuitStack[i]->SetEmptyImage(CS_EI_SUNK);
55 pSuitStack[i]->SetPlacement(CS_XJUST_CENTER, 0, i * (__cardwidth + X_SUITSTACK_BORDER) , 0);
56
57 pSuitStack[i]->SetDropRule(CS_DROP_CALLBACK, SuitStackDropProc);
58 pSuitStack[i]->SetDragRule(CS_DRAG_TOP);
59
60 pSuitStack[i]->SetAddCardProc(SuitStackAddProc);
61 }
62
63 //
64 // Create the row stacks
65 //
66 for(i = 0; i < NUM_ROW_STACKS; i++)
67 {
68 pRowStack[i] = SolWnd.CreateRegion(ROW_ID+i, true, 0, Y_BORDER + __cardheight + Y_ROWSTACK_BORDER, 0, yRowStackCardOffset);
69 pRowStack[i]->SetEmptyImage(CS_EI_SUNK);
70 pRowStack[i]->SetFaceDirection(CS_FACE_DOWNUP, i);
71
72 pRowStack[i]->SetPlacement(CS_XJUST_CENTER, 0,
73 (i - NUM_ROW_STACKS/2) * (__cardwidth + X_ROWSTACK_BORDER), 0);
74
75 pRowStack[i]->SetEmptyImage(CS_EI_NONE);
76
77 pRowStack[i]->SetDragRule(CS_DRAG_CALLBACK, RowStackDragProc);
78 pRowStack[i]->SetDropRule(CS_DROP_CALLBACK, RowStackDropProc);
79 pRowStack[i]->SetClickProc(RowStackClickProc);
80 pRowStack[i]->SetDblClickProc(RowStackDblClickProc);
81 }
82 }