QuakeGod
2023-10-23 4cda72771765720a6a8721bd8844945c2403afe6
提交 | 用户 | 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
418cb3 10
Q 11 #include <atlbase.h>
12 #include <msxml6.h>
13
14 #pragma comment(lib, "msxml6.lib")
15
16 MHash gsd1;
17
18
65f713 19 // CDialogSysRegSet 对话框
Q 20
21 IMPLEMENT_DYNAMIC(CDialogSysRegSet, CDialogEx)
22
23 CDialogSysRegSet::CDialogSysRegSet(CWnd* pParent /*=nullptr*/)
24     : CDialogEx(IDD_DIALOG_SYSREG_SET, pParent)
25 {
418cb3 26     
65f713 27 }
Q 28
29 CDialogSysRegSet::~CDialogSysRegSet()
30 {
31 }
32
33 void CDialogSysRegSet::DoDataExchange(CDataExchange* pDX)
34 {
35     CDialogEx::DoDataExchange(pDX);
36     DDX_Control(pDX, IDC_SCROLLBAR1, m_prop_scrollbar1);
37     DDX_Control(pDX, IDC_LIST_SEL1, m_listSel1);
38 }
39
40
41 BEGIN_MESSAGE_MAP(CDialogSysRegSet, CDialogEx)
42     ON_WM_VSCROLL()
43     ON_WM_MOUSEWHEEL()
44     ON_LBN_SELCHANGE(IDC_LIST_SEL1, &CDialogSysRegSet::OnLbnSelchangeListSel1)
45 END_MESSAGE_MAP()
46
47
48 // CDialogSysRegSet 消息处理程序
49
418cb3 50 int CDialogSysRegSet::LoadDeviceDescriptionFile()
Q 51 {
52     // TODO: 在此处添加实现代码.
53     gsd1.LoadFromFile(_T("FP0Ext.cfg"));
54     CString s1;
55
56     s1 = gsd1["configs"]["output1"];
57
58     SysLog(s1);
59
60     s1 = MyCfg1["dafd"]["sdfdf"];
61
62     return 0;
63 }
64
65f713 65 int CDialogSysRegSet::AddPropPage(CString sName, CDialogEx & rDlg)
Q 66 {
67     // TODO: 在此处添加实现代码.
68     m_listSel1.AddString(sName);
69     if (rDlg.GetSafeHwnd() == NULL ) { }
70
71     m_PropPages[m_nTotalProp] = &rDlg;
72     m_nTotalProp++;
73     return 0;
74 }
75
418cb3 76 int CDialogSysRegSet::testXmlParser()
Q 77 {
78     // TODO: 在此处添加实现代码.
79     CString s1;
80     using namespace  std;
81
82     // TODO:  在此添加额外的初始化
83     CoInitialize(NULL);
84     //定义DOM模型中的文档对象
85     CComPtr<IXMLDOMDocument> spXmldoc;
86     //初始化库对象
87     HRESULT hr = spXmldoc.CoCreateInstance(CLSID_DOMDocument60);
88     s1.Format(_T("Create Instance Hr = %d "), hr);
89     SysLog(s1);
90     if (SUCCEEDED(hr))
91     {
92         //读取 xml 文件
93         char *pPath = "config1.xml";
94         CComBSTR Path = CComBSTR(pPath);
95         //将XML文件导入内存中的文档对象
96         VARIANT_BOOL success;
97         hr = spXmldoc->load(CComVariant(Path), &success);
98         s1.Format(_T("Load File Hr = %d "), hr);
99         SysLog(s1);
100         CComPtr<IXMLDOMNodeList> spChildren;
101
102         spXmldoc->get_childNodes(&spChildren);
103
104         int i = 0;
105         long numChildren = 0;
106         spChildren->get_length(&numChildren);
107         s1.Format(_T("num of Children  = %d "), numChildren);
108         SysLog(s1);
109         for (int i = 0; i < numChildren; i++) {
110             CComPtr<IXMLDOMNode> spNode;
111             CComBSTR NodeName;
112             spChildren->get_item(i, &spNode);
113             spNode->get_nodeName(&NodeName);
114             CComPtr<IXMLDOMNodeList> spChildren2;
115             spNode->get_childNodes(&spChildren2);
116             long numChildren2 = 0;
117             spChildren2->get_length(&numChildren2);
118
119             CString s2;
120             s2 = NodeName;
121             s1.Format(_T("Root node %d name = %s num of Child %d "), i, s2, numChildren2);
122             SysLog(s1);
123         }
124
125         //    spXmldoc        
126
127         //    spXmldoc->Release();
128         //    spXmldoc.Release();
129     }
130     return 0;
131 }
132
65f713 133 BOOL CDialogSysRegSet::OnInitDialog()
Q 134 {
135     CDialogEx::OnInitDialog();
136
418cb3 137     testXmlParser();
Q 138     LoadDeviceDescriptionFile();
139
65f713 140
Q 141     m_listSel1.GetCount();
142     AddPropPage(_T("工作模式设置1"), m_propmodecfg1);
143     AddPropPage(_T("内存分配1"), m_propmemcfg1);
144     AddPropPage(_T("保持/非保持11"), m_propmodecfg1);
145     AddPropPage(_T("保持/非保持21"), m_propmodecfg1);
146     AddPropPage(_T("232通信端口设置1"), m_propcommcfg1);
147     AddPropPage(_T("485通信端口设置1"), m_propcommcfg2);
148     AddPropPage(_T("输入时间常数设置1"), m_propinputcfg1);
149     AddPropPage(_T("输入时间常数设置2"), m_propinputcfg2);
150     AddPropPage(_T("输入时间常数设置3"), m_propinputcfg3);
151     AddPropPage(_T("输入时间常数设置4"), m_propinputcfg4);
152     AddPropPage(_T("输出保持时间设置1"), m_propoutputcfg1);
153     AddPropPage(_T("输出保持时间设置2"), m_propoutputcfg2);
154     AddPropPage(_T("输入时间常数设置3"), m_propoutputcfg3);
155     AddPropPage(_T("输出保持时间设置4"), m_propoutputcfg4);
156     AddPropPage(_T("485通信端口设置2"), m_propcommcfg3);
157     AddPropPage(_T("内置SPI端口设置1"), m_propmodecfg1);
158     AddPropPage(_T("外置扩展SPI端口设置1"), m_propmodecfg1);
159
160     //GetDlgItem(IDC_STATIC_PROP)->
161
162     GetDlgItem(IDC_STATIC_PROP)->GetClientRect(&rect1);
163     m_nFrameheight = rect1.bottom - rect1.top;
164     GetDlgItem(IDC_STATIC_PROP)->ClientToScreen(&rect1);
165     this->ScreenToClient(&rect1);
166
167     m_propsysreg1.Create(IDD_PROP_SYSREG1, this);
168     m_propsysreg1.EnableWindow(true);
169     m_propsysreg1.GetClientRect(&rect0);
170     m_nPropHeight = rect0.bottom - rect0.top;
171 //    m_propsysreg1.ShowWindow(SW_SHOW);
172
173     m_propmodecfg1.Create(IDD_PROP_MODE_CFG1, this);
174     m_propmodecfg1.EnableWindow(true);
175     m_propmodecfg1.MoveWindow(&rect1, true);
176     m_propmodecfg1.ShowWindow(SW_SHOW);
177
178     m_propmemcfg1.Create(IDD_PROP_MEM_CFG, this);
179     m_propmemcfg1.MoveWindow(&rect1, true);
180     m_propmemcfg1.EnableWindow(true);
181
182
183     m_propcommcfg1.Create(IDD_PROP_COMM_CFG, this);
184     m_propcommcfg1.MoveWindow(&rect1, true);
185     m_propcommcfg1.EnableWindow(true);
186
187     m_propcommcfg2.Create(IDD_PROP_COMM_CFG, this);
188     m_propcommcfg2.MoveWindow(&rect1, true);
189     m_propcommcfg2.EnableWindow(true);
190
191     m_propcommcfg3.Create(IDD_PROP_COMM_CFG, this);
192     m_propcommcfg3.MoveWindow(&rect1, true);
193     m_propcommcfg3.EnableWindow(true);
194
195     m_propinputcfg1.Create(IDD_PROP_INPUT_CFG, this);
196     m_propinputcfg1.MoveWindow(&rect1, true);
197     m_propinputcfg1.EnableWindow(true);
198
199     m_propinputcfg2.Create(IDD_PROP_INPUT_CFG, this);
200     m_propinputcfg2.MoveWindow(&rect1, true);
201     m_propinputcfg2.EnableWindow(true);
202
203     m_propinputcfg3.Create(IDD_PROP_INPUT_CFG, this);
204     m_propinputcfg3.MoveWindow(&rect1, true);
205     m_propinputcfg3.EnableWindow(true);
206
207     m_propinputcfg4.Create(IDD_PROP_INPUT_CFG, this);
208     m_propinputcfg4.MoveWindow(&rect1, true);
209     m_propinputcfg4.EnableWindow(true);
210
211     m_propoutputcfg1.Create(IDD_PROP_OUTPUT_SET, this);
212     m_propoutputcfg1.MoveWindow(&rect1, true);
213     m_propoutputcfg1.EnableWindow(true);
214
215     m_propoutputcfg2.Create(IDD_PROP_OUTPUT_SET, this);
216     m_propoutputcfg2.MoveWindow(&rect1, true);
217     m_propoutputcfg2.EnableWindow(true);
218
219     m_propoutputcfg3.Create(IDD_PROP_OUTPUT_SET, this);
220     m_propoutputcfg3.MoveWindow(&rect1, true);
221     m_propoutputcfg3.EnableWindow(true);
222
223     m_propoutputcfg4.Create(IDD_PROP_OUTPUT_SET, this);
224     m_propoutputcfg4.MoveWindow(&rect1, true);
225     m_propoutputcfg4.EnableWindow(true);
226
227     m_propsysreg1.MoveWindow(&rect1, true);
228
229     int nNewPos = m_nScrollPos;
230     int Scrolldel = nNewPos - m_nScrollPos;
231     m_propsysreg1.ScrollWindow(0, Scrolldel);
232     m_nScrollPos += Scrolldel;
233
234     SCROLLINFO si;
235     si.cbSize = sizeof(SCROLLINFO);
236     si.fMask = SIF_ALL;
237     si.nMin = 0;
238     si.nMax = m_nPropHeight;//你滑动画面的高度
239     si.nPage = m_nFrameheight;  //这个是你显示画面的高度
240     si.nPos = 0;//这个是滑块的位置  初始化的时候是0 以后会根据你的操作变动
241 //    GetDlgItem(IDC_STATIC_PROP)->SetScrollInfo(SB_VERT, &si);
242 //    m_propsysreg1.SetScrollInfo(SB_VERT, &si);
243
244     m_prop_scrollbar1.SetScrollInfo(&si, true);
245
246 //    m_prop_scrollbar1.SetScrollRange(1, 100);
247 //    m_prop_scrollbar1.SetScrollPos(20);
248     return TRUE;  // return TRUE unless you set the focus to a control
249                   // 异常: OCX 属性页应返回 FALSE
250 }
251
252 void CDialogSysRegSet::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
253 {
254     // TODO: 在此添加消息处理程序代码和/或调用默认值
255     int nMin, nMax;
256     pScrollBar->GetScrollRange(&nMin, &nMax);  //取得滚动条范围
257     int TempPos = pScrollBar->GetScrollPos();
258     CString s1;
259 //    s1.Format(_T("DialogSysReg OnVScroll %d %d %d"), nSBCode, nPos,TempPos);
260 //    SysLog(s1);
261     switch (nSBCode)
262     {
263     case SB_THUMBPOSITION://拖动滑块
264     case SB_THUMBTRACK:
265         pScrollBar->SetScrollPos(nPos);
266         TempPos = nPos;
267         break;
268     case SB_LINEUP://点击上边/左边的箭头
269         if (TempPos > 1)
270         {
271             TempPos--;
272         }
273         pScrollBar->SetScrollPos(TempPos);
274         break;
275     case SB_LINEDOWN://点击下边/右边的箭头
276         if (TempPos < nMax)
277         {
278             TempPos++;
279         }
280         pScrollBar->SetScrollPos(TempPos);
281
282         break;
283         
284     case SB_PAGEUP:   // 如果向上/左滚动一页
285         if (TempPos >10) TempPos -= 10;
286         pScrollBar->SetScrollPos(TempPos);
287         break;
288         
289     case SB_PAGEDOWN:    // 如果向下/右滚动一页
290         if (TempPos < nMax - 10) TempPos += 10;
291         pScrollBar->SetScrollPos(TempPos);
292         break;
293     }
294     int nNewPos = -TempPos;
295     int Scrolldel = nNewPos - m_nScrollPos;
296 //    s1.Format(_T("DialogSysReg Scroll %d %d %d"), m_nScrollPos, nNewPos, Scrolldel);
297 //    SysLog(s1);
298
299     m_propsysreg1.ScrollWindow(0, Scrolldel);
300     m_nScrollPos += Scrolldel;
301
302 //    m_propsysreg1.ScrollWindow(0, -TempPos);
303
304     CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
305 }
306
307
308 BOOL CDialogSysRegSet::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
309 {
310     // TODO: 在此添加消息处理程序代码和/或调用默认值
311 /*
312     int nNewPos=m_nScrollPos;
313     if (zDelta < 0) 
314     {
315         if (-m_nScrollPos < m_nPropHeight -m_nFrameheight - 30)
316             nNewPos = m_nScrollPos - 30;
317         else
318             nNewPos = - (m_nPropHeight - m_nFrameheight);
319     }
320     else if (zDelta > 0)
321     {
322         if (-m_nScrollPos > 30)
323             nNewPos = m_nScrollPos + 30;
324         else
325             nNewPos = 0;
326     }
327     else
328     {
329     }
330     int Scrolldel = nNewPos - m_nScrollPos;
331     m_propsysreg1.ScrollWindow(0, Scrolldel);
332     m_nScrollPos += Scrolldel;
333     m_prop_scrollbar1.SetScrollPos(-m_nScrollPos);
334 */
335     return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);
336
337 }
338
339
340 void CDialogSysRegSet::OnLbnSelchangeListSel1()
341 {
342     // TODO: 在此添加控件通知处理程序代码
343     CString s1;
344     int j = m_listSel1.GetCurSel();
345     s1.Format(_T("LbnSelChange %d"),j);
346     SysLog(s1);
347     m_PropPages[m_nCurProp]->ShowWindow(SW_HIDE);
348
349     m_PropPages[j]->ShowWindow(SW_SHOW);
350     m_PropPages[j]->MoveWindow(&rect1, true);
351     m_PropPages[j]->EnableWindow(true);
352 /*
353     switch (j)
354     {
355     case 0:
356         m_propmodecfg1.ShowWindow(SW_SHOW);
357         m_propmodecfg1.MoveWindow(&rect1, true);
358         break;
359     case 1:
360         m_propmemcfg1.ShowWindow(SW_SHOW);
361         m_propmodecfg1.MoveWindow(&rect1, true);
362         break;
363     case 2:
364         //m_propmodecfg1.ShowWindow(SW_SHOW);
365         break;
366     case 3:
367         //m_propmodecfg1.ShowWindow(SW_SHOW);
368         break;
369     case 4:
370         m_propcommcfg1.ShowWindow(SW_SHOW);
371         m_propmodecfg1.MoveWindow(&rect1, true);
372         break;
373     case 5:
374         m_propcommcfg2.ShowWindow(SW_SHOW);
375         m_propmodecfg1.MoveWindow(&rect1, true);
376         break;
377     case 6:
378         m_propinputcfg1.ShowWindow(SW_SHOW);
379         break;
380     case 7:
381         m_propinputcfg2.ShowWindow(SW_SHOW);
382         break;
383     case 8:
384         m_propinputcfg3.ShowWindow(SW_SHOW);
385         break;
386     case 9:
387         m_propinputcfg4.ShowWindow(SW_SHOW);
388         break;
389     case 10:
390         m_propoutputcfg1.ShowWindow(SW_SHOW);
391         break;
392     case 11:
393         m_propoutputcfg2.ShowWindow(SW_SHOW);
394         break;
395     case 12:
396         m_propoutputcfg3.ShowWindow(SW_SHOW);
397         break;
398     case 13:
399         m_propoutputcfg4.ShowWindow(SW_SHOW);
400         break;
401
402     case 14:
403         m_propcommcfg3.ShowWindow(SW_SHOW);
404         break;
405     default:
406         break;
407     }
408 */
409     m_nCurProp = j;
410 }