1
2
3 #include "studiox_includes.h"
4 #include "options_dialog.h"
5
6 enum OPTION_CONTROL_IDS {
7 OPTION_0 = 20100,
8 OPTION_1,
9 OPTION_2,
10 OPTION_3,
11 OPTION_4
12 };
13
14 enum option_dlg_test_commands{
15 TEST_SELECT_OPTION = 1,
16 };
17
BEGIN_MESSAGE_MAP(options_dialog,express_dialog)18 BEGIN_MESSAGE_MAP(options_dialog, express_dialog)
19 ON_WM_CREATE()
20 ON_WM_SIZE()
21 ON_CONTROL_RANGE(BN_CLICKED, OPTION_0, OPTION_4, options_dialog::OnOptionClicked)
22 ON_MESSAGE(STUDIO_TEST, OnTestMessage)
23 END_MESSAGE_MAP()
24
25 IMPLEMENT_DYNAMIC(options_dialog, express_dialog)
26
27 ///////////////////////////////////////////////////////////////////////////////
28 options_dialog::options_dialog(CString title, CString msg, STRING_VAL_PAIR *option_list, CWnd* pParent /*=NULL*/)
29 : express_dialog(options_dialog::IDD, pParent)
30 {
31 IconId = IDB_WARNING;
32 SetTitleText(title);
33 m_message = msg;
34 m_selected_option = 0;
35
36 mp_option_list = option_list;
37 }
38
39 ///////////////////////////////////////////////////////////////////////////////
~options_dialog()40 options_dialog::~options_dialog()
41 {
42
43 }
44
45 ///////////////////////////////////////////////////////////////////////////////
OnCreate(LPCREATESTRUCT lpCreateStruct)46 int options_dialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
47 {
48 if (CDialog::OnCreate(lpCreateStruct) == -1)
49 return -1;
50
51 // TODO: Add your specialized creation code here
52 m_message_box.Create(m_message, WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this);
53
54 STRING_VAL_PAIR *entry = mp_option_list;
55 m_option_count = 0;
56
57 while (entry->val && (m_option_count < MAX_OPTION_COUNT))
58 {
59 m_option_buttons[m_option_count].Create(entry->name, BS_PUSHBUTTON | BS_CENTER | BS_VCENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP,
60 CRect(0, 0, 0, 0), this, OPTION_0 + m_option_count);
61
62 entry++;
63 m_option_count++;
64 }
65
66 PositionChildren();
67
68 if (mTitleText)
69 {
70 SetWindowText(mTitleText);
71 }
72
73 return 0;
74 }
75
76 ///////////////////////////////////////////////////////////////////////////////
DoDataExchange(CDataExchange * pDX)77 void options_dialog::DoDataExchange(CDataExchange* pDX)
78 {
79 express_dialog::DoDataExchange(pDX);
80 }
81
82 ///////////////////////////////////////////////////////////////////////////////
PositionChildren()83 void options_dialog::PositionChildren()
84 {
85 CRect window_size;
86 CRect size;
87 GetClientRect(&window_size);
88 size = window_size;
89
90 size.left += 16;
91 size.right -= 16;
92 size.top += 40;
93 size.bottom = size.top + 40;
94 m_message_box.MoveWindow(&size);
95
96
97 for (int index = 0; index < m_option_count; index++)
98 {
99 size.top = size.bottom + 10;
100 size.bottom = size.top + 30;
101 m_option_buttons[index].MoveWindow(&size);
102 }
103
104 window_size.bottom = size.bottom + 60;
105 MoveWindow(&window_size);
106 CenterWindow();
107 }
108
109 ///////////////////////////////////////////////////////////////////////////////
OnOptionClicked(UINT nID)110 void options_dialog::OnOptionClicked(UINT nID)
111 {
112 m_selected_option = mp_option_list[nID - OPTION_0].val;
113 OnOK();
114 }
115
116 ///////////////////////////////////////////////////////////////////////////////
OnTestMessage(WPARAM wParam,LPARAM lParam)117 LRESULT options_dialog::OnTestMessage(WPARAM wParam, LPARAM lParam)
118 {
119 switch (wParam)
120 {
121 case TEST_SELECT_OPTION:
122 OnOptionClicked(OPTION_0 + lParam);
123 break;
124 }
125
126 return 0;
127 }