QuakeGod
2022-07-22 fc8a81d80e32cdafdae319cf439145db6613c793
提交 | 用户 | age
65f713 1 // CDialogSysRegSet.cpp: 实现文件
Q 2 //
3
4 #include "pch.h"
5 #include "MTerm2.h"
6 #include "DialogSysRegSet.h"
7 #include "afxdialogex.h"
8 #include "PropSysReg1.h"
9
10 // CDialogSysRegSet 对话框
11
12 IMPLEMENT_DYNAMIC(CDialogSysRegSet, CDialogEx)
13
14 CDialogSysRegSet::CDialogSysRegSet(CWnd* pParent /*=nullptr*/)
15     : CDialogEx(IDD_DIALOG_SYSREG_SET, pParent)
16 {
17
18 }
19
20 CDialogSysRegSet::~CDialogSysRegSet()
21 {
22 }
23
24 void CDialogSysRegSet::DoDataExchange(CDataExchange* pDX)
25 {
26     CDialogEx::DoDataExchange(pDX);
27     DDX_Control(pDX, IDC_SCROLLBAR1, m_prop_scrollbar1);
28     DDX_Control(pDX, IDC_LIST_SEL1, m_listSel1);
29 }
30
31
32 BEGIN_MESSAGE_MAP(CDialogSysRegSet, CDialogEx)
33     ON_WM_VSCROLL()
34     ON_WM_MOUSEWHEEL()
35     ON_LBN_SELCHANGE(IDC_LIST_SEL1, &CDialogSysRegSet::OnLbnSelchangeListSel1)
36 END_MESSAGE_MAP()
37
38
39 // CDialogSysRegSet 消息处理程序
40
41 int CDialogSysRegSet::AddPropPage(CString sName, CDialogEx & rDlg)
42 {
43     // TODO: 在此处添加实现代码.
44     m_listSel1.AddString(sName);
45     if (rDlg.GetSafeHwnd() == NULL ) { }
46
47     m_PropPages[m_nTotalProp] = &rDlg;
48     m_nTotalProp++;
49     return 0;
50 }
51
52 BOOL CDialogSysRegSet::OnInitDialog()
53 {
54     CDialogEx::OnInitDialog();
55
56     // TODO:  在此添加额外的初始化
57
58     m_listSel1.GetCount();
59     AddPropPage(_T("工作模式设置1"), m_propmodecfg1);
60     AddPropPage(_T("内存分配1"), m_propmemcfg1);
61     AddPropPage(_T("保持/非保持11"), m_propmodecfg1);
62     AddPropPage(_T("保持/非保持21"), m_propmodecfg1);
63     AddPropPage(_T("232通信端口设置1"), m_propcommcfg1);
64     AddPropPage(_T("485通信端口设置1"), m_propcommcfg2);
65     AddPropPage(_T("输入时间常数设置1"), m_propinputcfg1);
66     AddPropPage(_T("输入时间常数设置2"), m_propinputcfg2);
67     AddPropPage(_T("输入时间常数设置3"), m_propinputcfg3);
68     AddPropPage(_T("输入时间常数设置4"), m_propinputcfg4);
69     AddPropPage(_T("输出保持时间设置1"), m_propoutputcfg1);
70     AddPropPage(_T("输出保持时间设置2"), m_propoutputcfg2);
71     AddPropPage(_T("输入时间常数设置3"), m_propoutputcfg3);
72     AddPropPage(_T("输出保持时间设置4"), m_propoutputcfg4);
73     AddPropPage(_T("485通信端口设置2"), m_propcommcfg3);
74     AddPropPage(_T("内置SPI端口设置1"), m_propmodecfg1);
75     AddPropPage(_T("外置扩展SPI端口设置1"), m_propmodecfg1);
76
77     //GetDlgItem(IDC_STATIC_PROP)->
78
79     GetDlgItem(IDC_STATIC_PROP)->GetClientRect(&rect1);
80     m_nFrameheight = rect1.bottom - rect1.top;
81     GetDlgItem(IDC_STATIC_PROP)->ClientToScreen(&rect1);
82     this->ScreenToClient(&rect1);
83
84     m_propsysreg1.Create(IDD_PROP_SYSREG1, this);
85     m_propsysreg1.EnableWindow(true);
86     m_propsysreg1.GetClientRect(&rect0);
87     m_nPropHeight = rect0.bottom - rect0.top;
88 //    m_propsysreg1.ShowWindow(SW_SHOW);
89
90     m_propmodecfg1.Create(IDD_PROP_MODE_CFG1, this);
91     m_propmodecfg1.EnableWindow(true);
92     m_propmodecfg1.MoveWindow(&rect1, true);
93     m_propmodecfg1.ShowWindow(SW_SHOW);
94
95     m_propmemcfg1.Create(IDD_PROP_MEM_CFG, this);
96     m_propmemcfg1.MoveWindow(&rect1, true);
97     m_propmemcfg1.EnableWindow(true);
98
99
100     m_propcommcfg1.Create(IDD_PROP_COMM_CFG, this);
101     m_propcommcfg1.MoveWindow(&rect1, true);
102     m_propcommcfg1.EnableWindow(true);
103
104     m_propcommcfg2.Create(IDD_PROP_COMM_CFG, this);
105     m_propcommcfg2.MoveWindow(&rect1, true);
106     m_propcommcfg2.EnableWindow(true);
107
108     m_propcommcfg3.Create(IDD_PROP_COMM_CFG, this);
109     m_propcommcfg3.MoveWindow(&rect1, true);
110     m_propcommcfg3.EnableWindow(true);
111
112     m_propinputcfg1.Create(IDD_PROP_INPUT_CFG, this);
113     m_propinputcfg1.MoveWindow(&rect1, true);
114     m_propinputcfg1.EnableWindow(true);
115
116     m_propinputcfg2.Create(IDD_PROP_INPUT_CFG, this);
117     m_propinputcfg2.MoveWindow(&rect1, true);
118     m_propinputcfg2.EnableWindow(true);
119
120     m_propinputcfg3.Create(IDD_PROP_INPUT_CFG, this);
121     m_propinputcfg3.MoveWindow(&rect1, true);
122     m_propinputcfg3.EnableWindow(true);
123
124     m_propinputcfg4.Create(IDD_PROP_INPUT_CFG, this);
125     m_propinputcfg4.MoveWindow(&rect1, true);
126     m_propinputcfg4.EnableWindow(true);
127
128     m_propoutputcfg1.Create(IDD_PROP_OUTPUT_SET, this);
129     m_propoutputcfg1.MoveWindow(&rect1, true);
130     m_propoutputcfg1.EnableWindow(true);
131
132     m_propoutputcfg2.Create(IDD_PROP_OUTPUT_SET, this);
133     m_propoutputcfg2.MoveWindow(&rect1, true);
134     m_propoutputcfg2.EnableWindow(true);
135
136     m_propoutputcfg3.Create(IDD_PROP_OUTPUT_SET, this);
137     m_propoutputcfg3.MoveWindow(&rect1, true);
138     m_propoutputcfg3.EnableWindow(true);
139
140     m_propoutputcfg4.Create(IDD_PROP_OUTPUT_SET, this);
141     m_propoutputcfg4.MoveWindow(&rect1, true);
142     m_propoutputcfg4.EnableWindow(true);
143
144     m_propsysreg1.MoveWindow(&rect1, true);
145
146     int nNewPos = m_nScrollPos;
147     int Scrolldel = nNewPos - m_nScrollPos;
148     m_propsysreg1.ScrollWindow(0, Scrolldel);
149     m_nScrollPos += Scrolldel;
150
151     SCROLLINFO si;
152     si.cbSize = sizeof(SCROLLINFO);
153     si.fMask = SIF_ALL;
154     si.nMin = 0;
155     si.nMax = m_nPropHeight;//你滑动画面的高度
156     si.nPage = m_nFrameheight;  //这个是你显示画面的高度
157     si.nPos = 0;//这个是滑块的位置  初始化的时候是0 以后会根据你的操作变动
158 //    GetDlgItem(IDC_STATIC_PROP)->SetScrollInfo(SB_VERT, &si);
159 //    m_propsysreg1.SetScrollInfo(SB_VERT, &si);
160
161     m_prop_scrollbar1.SetScrollInfo(&si, true);
162
163 //    m_prop_scrollbar1.SetScrollRange(1, 100);
164 //    m_prop_scrollbar1.SetScrollPos(20);
165     return TRUE;  // return TRUE unless you set the focus to a control
166                   // 异常: OCX 属性页应返回 FALSE
167 }
168
169 void CDialogSysRegSet::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
170 {
171     // TODO: 在此添加消息处理程序代码和/或调用默认值
172     int nMin, nMax;
173     pScrollBar->GetScrollRange(&nMin, &nMax);  //取得滚动条范围
174     int TempPos = pScrollBar->GetScrollPos();
175     CString s1;
176 //    s1.Format(_T("DialogSysReg OnVScroll %d %d %d"), nSBCode, nPos,TempPos);
177 //    SysLog(s1);
178     switch (nSBCode)
179     {
180     case SB_THUMBPOSITION://拖动滑块
181     case SB_THUMBTRACK:
182         pScrollBar->SetScrollPos(nPos);
183         TempPos = nPos;
184         break;
185     case SB_LINEUP://点击上边/左边的箭头
186         if (TempPos > 1)
187         {
188             TempPos--;
189         }
190         pScrollBar->SetScrollPos(TempPos);
191         break;
192     case SB_LINEDOWN://点击下边/右边的箭头
193         if (TempPos < nMax)
194         {
195             TempPos++;
196         }
197         pScrollBar->SetScrollPos(TempPos);
198
199         break;
200         
201     case SB_PAGEUP:   // 如果向上/左滚动一页
202         if (TempPos >10) TempPos -= 10;
203         pScrollBar->SetScrollPos(TempPos);
204         break;
205         
206     case SB_PAGEDOWN:    // 如果向下/右滚动一页
207         if (TempPos < nMax - 10) TempPos += 10;
208         pScrollBar->SetScrollPos(TempPos);
209         break;
210     }
211     int nNewPos = -TempPos;
212     int Scrolldel = nNewPos - m_nScrollPos;
213 //    s1.Format(_T("DialogSysReg Scroll %d %d %d"), m_nScrollPos, nNewPos, Scrolldel);
214 //    SysLog(s1);
215
216     m_propsysreg1.ScrollWindow(0, Scrolldel);
217     m_nScrollPos += Scrolldel;
218
219 //    m_propsysreg1.ScrollWindow(0, -TempPos);
220
221     CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
222 }
223
224
225 BOOL CDialogSysRegSet::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
226 {
227     // TODO: 在此添加消息处理程序代码和/或调用默认值
228 /*
229     int nNewPos=m_nScrollPos;
230     if (zDelta < 0) 
231     {
232         if (-m_nScrollPos < m_nPropHeight -m_nFrameheight - 30)
233             nNewPos = m_nScrollPos - 30;
234         else
235             nNewPos = - (m_nPropHeight - m_nFrameheight);
236     }
237     else if (zDelta > 0)
238     {
239         if (-m_nScrollPos > 30)
240             nNewPos = m_nScrollPos + 30;
241         else
242             nNewPos = 0;
243     }
244     else
245     {
246     }
247     int Scrolldel = nNewPos - m_nScrollPos;
248     m_propsysreg1.ScrollWindow(0, Scrolldel);
249     m_nScrollPos += Scrolldel;
250     m_prop_scrollbar1.SetScrollPos(-m_nScrollPos);
251 */
252     return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);
253
254 }
255
256
257 void CDialogSysRegSet::OnLbnSelchangeListSel1()
258 {
259     // TODO: 在此添加控件通知处理程序代码
260     CString s1;
261     int j = m_listSel1.GetCurSel();
262     s1.Format(_T("LbnSelChange %d"),j);
263     SysLog(s1);
264     m_PropPages[m_nCurProp]->ShowWindow(SW_HIDE);
265
266     m_PropPages[j]->ShowWindow(SW_SHOW);
267     m_PropPages[j]->MoveWindow(&rect1, true);
268     m_PropPages[j]->EnableWindow(true);
269 /*
270     switch (j)
271     {
272     case 0:
273         m_propmodecfg1.ShowWindow(SW_SHOW);
274         m_propmodecfg1.MoveWindow(&rect1, true);
275         break;
276     case 1:
277         m_propmemcfg1.ShowWindow(SW_SHOW);
278         m_propmodecfg1.MoveWindow(&rect1, true);
279         break;
280     case 2:
281         //m_propmodecfg1.ShowWindow(SW_SHOW);
282         break;
283     case 3:
284         //m_propmodecfg1.ShowWindow(SW_SHOW);
285         break;
286     case 4:
287         m_propcommcfg1.ShowWindow(SW_SHOW);
288         m_propmodecfg1.MoveWindow(&rect1, true);
289         break;
290     case 5:
291         m_propcommcfg2.ShowWindow(SW_SHOW);
292         m_propmodecfg1.MoveWindow(&rect1, true);
293         break;
294     case 6:
295         m_propinputcfg1.ShowWindow(SW_SHOW);
296         break;
297     case 7:
298         m_propinputcfg2.ShowWindow(SW_SHOW);
299         break;
300     case 8:
301         m_propinputcfg3.ShowWindow(SW_SHOW);
302         break;
303     case 9:
304         m_propinputcfg4.ShowWindow(SW_SHOW);
305         break;
306     case 10:
307         m_propoutputcfg1.ShowWindow(SW_SHOW);
308         break;
309     case 11:
310         m_propoutputcfg2.ShowWindow(SW_SHOW);
311         break;
312     case 12:
313         m_propoutputcfg3.ShowWindow(SW_SHOW);
314         break;
315     case 13:
316         m_propoutputcfg4.ShowWindow(SW_SHOW);
317         break;
318
319     case 14:
320         m_propcommcfg3.ShowWindow(SW_SHOW);
321         break;
322     default:
323         break;
324     }
325 */
326     m_nCurProp = j;
327 }
328