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 }