ReactOS 0.4.17-dev-1183-g3b30a2a
MscFile Class Reference

#include <mscfile.h>

Collaboration diagram for MscFile:

Public Member Functions

 MscFile (PCWSTR pszFileName)
 
 ~MscFile ()
 
HRESULT CreateAndInitDOM ()
 
HRESULT CreateElement (PCWSTR wszName, IXMLDOMElement **ppElement)
 
HRESULT AppendChildToParent (IXMLDOMNode *pChild, IXMLDOMNode *pParent=NULL)
 
HRESULT CreateAndAddPINode (PCWSTR wszTarget, PCWSTR wszData)
 
HRESULT CreateAndAddCommentNode (PCWSTR wszComment)
 
HRESULT CreateAndAddAttributeNode (PCWSTR wszName, PCWSTR wszValue, IXMLDOMElement *pParent)
 
HRESULT CreateAndAddTextNode (PCWSTR wszText, IXMLDOMNode *pParent)
 
HRESULT CreateAndAddCDATANode (PCWSTR wszCDATA, IXMLDOMNode *pParent)
 
HRESULT CreateAndAddElementNode (PCWSTR wszName, IXMLDOMNode *pParent, IXMLDOMElement **ppElement=NULL)
 
HRESULT SaveWindowPlacement (CWindow *pWindow, IXMLDOMElement *pParentNode)
 
HRESULT ParseWindowPlacement (CWindow *pWindow, IXMLDOMElement *pParentElement)
 
HRESULT LoadDOM ()
 
HRESULT SaveDOM ()
 
HRESULT CheckMscFile (IXMLDOMElement **ppRootElement)
 
HRESULT GetAttribute (IXMLDOMElement *pElement, LPWSTR pszAttributeName, VARIANT *pAttributeValue)
 
HRESULT GetElement (IXMLDOMElement *pParentElement, LPWSTR pszElementName, IXMLDOMElement **ppElement)
 
VOID ReleaseNode (IXMLDOMNode *pNode)
 

Private Member Functions

HRESULT VariantFromString (PCWSTR wszValue, VARIANT &Variant)
 
LPWSTR ShowCmdToString (int nShowCmd)
 

Private Attributes

VARIANT m_varFileName
 
IXMLDOMDocument * m_pDocument
 

Detailed Description

Definition at line 17 of file mscfile.h.

Constructor & Destructor Documentation

◆ MscFile()

MscFile::MscFile ( PCWSTR  pszFileName)

Definition at line 15 of file mscfile.cpp.

16{
20}
IXMLDOMDocument * m_pDocument
Definition: mscfile.h:21
VARIANT m_varFileName
Definition: mscfile.h:20
HRESULT VariantFromString(PCWSTR wszValue, VARIANT &Variant)
Definition: mscfile.cpp:31
#define NULL
Definition: types.h:112
void WINAPI VariantInit(VARIANTARG *pVarg)
Definition: variant.c:547
WORD WORD PSZ PSZ pszFileName
Definition: vdmdbg.h:44

◆ ~MscFile()

MscFile::~MscFile ( )

Definition at line 22 of file mscfile.cpp.

23{
26}
#define SAFE_RELEASE(p)
Definition: mscfile.h:15
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:626

Member Function Documentation

◆ AppendChildToParent()

HRESULT MscFile::AppendChildToParent ( IXMLDOMNode *  pChild,
IXMLDOMNode *  pParent = NULL 
)

Definition at line 81 of file mscfile.cpp.

82{
83 HRESULT hr = S_OK;
84 IXMLDOMNode *pChildOut = NULL;
85 if (pParent == NULL)
86 CHK_HR(m_pDocument->appendChild(pChild, &pChildOut));
87 else
88 CHK_HR(pParent->appendChild(pChild, &pChildOut));
89
90CleanUp:
91 SAFE_RELEASE(pChildOut);
92 return hr;
93}
HRESULT hr
Definition: delayimp.cpp:582
FxObject * pParent
Definition: fxdpcapi.cpp:86
HRESULT appendChild([in] IXMLDOMNode *newNode, [retval, out] IXMLDOMNode **outNewNode)
#define S_OK
Definition: intsafe.h:52
#define CHK_HR(stmt)
Definition: mscfile.h:9

Referenced by CreateAndAddCDATANode(), CreateAndAddCommentNode(), CreateAndAddElementNode(), CreateAndAddPINode(), CreateAndAddTextNode(), and CMainWnd::SaveMscFile().

◆ CheckMscFile()

HRESULT MscFile::CheckMscFile ( IXMLDOMElement **  ppRootElement)

Definition at line 427 of file mscfile.cpp.

428{
429 IXMLDOMElement *pRootElement = NULL;
430 BSTR rootName = NULL;
432 HRESULT hr = S_OK;
433
434 *ppRootElement = NULL;
435
437
438 hr = m_pDocument->get_documentElement(&pRootElement);
439 if (FAILED(hr))
440 goto done;
441
442 hr = pRootElement->get_baseName(&rootName);
443 if (FAILED(hr))
444 goto done;
445
446 if (_wcsicmp(rootName, L"MMC_ConsoleFile"))
447 {
448 hr = S_FALSE;
449 goto done;
450 }
451
452 hr = GetAttribute(pRootElement, (LPWSTR)L"ConsoleVersion", &version);
453 if (FAILED(hr))
454 goto done;
455
456 if (V_VT(&version) == VT_NULL)
457 {
458 hr = S_FALSE;
459 goto done;
460 }
461
462 if (wcscmp(V_BSTR(&version), L"2.0") &&
463 wcscmp(V_BSTR(&version), L"3.0"))
464 {
465 hr = S_FALSE;
466 goto done;
467 }
468
469 *ppRootElement = pRootElement;
470
471done:
473
474 if (rootName)
475 SysFreeString(rootName);
476
477 if ((hr != S_OK) && pRootElement != NULL)
478 pRootElement->Release();
479
480 return hr;
481}
HRESULT GetAttribute(IXMLDOMElement *pElement, LPWSTR pszAttributeName, VARIANT *pAttributeValue)
Definition: mscfile.cpp:484
OLECHAR * BSTR
Definition: compat.h:2293
@ VT_NULL
Definition: compat.h:2296
static const WCHAR version[]
Definition: asmname.c:66
_ACRTIMP int __cdecl _wcsicmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:164
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
#define L(x)
Definition: resources.c:13
ULONG Release()
#define FAILED(hr)
Definition: intsafe.h:51
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:273
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
uint16_t * LPWSTR
Definition: typedefs.h:56
#define S_FALSE
Definition: winerror.h:3451

Referenced by CMainWnd::LoadMscFile().

◆ CreateAndAddAttributeNode()

HRESULT MscFile::CreateAndAddAttributeNode ( PCWSTR  wszName,
PCWSTR  wszValue,
IXMLDOMElement *  pParent 
)

Definition at line 137 of file mscfile.cpp.

138{
139 HRESULT hr = S_OK;
140 IXMLDOMAttribute *pAttribute = NULL;
141 IXMLDOMAttribute *pAttributeOut = NULL; // Out param that is not used
142
143 BSTR bstrName = NULL;
144 VARIANT varValue;
145 VariantInit(&varValue);
146
147 bstrName = SysAllocString(wszName);
148 CHK_ALLOC(bstrName);
149 CHK_HR(VariantFromString(wszValue, varValue));
150
151 CHK_HR(m_pDocument->createAttribute(bstrName, &pAttribute));
152 CHK_HR(pAttribute->put_value(varValue));
153 CHK_HR(pParent->setAttributeNode(pAttribute, &pAttributeOut));
154
155CleanUp:
156 SAFE_RELEASE(pAttribute);
157 SAFE_RELEASE(pAttributeOut);
158 SysFreeString(bstrName);
159 VariantClear(&varValue);
160 return hr;
161}
HRESULT createAttribute([in] BSTR p, [retval, out] IXMLDOMAttribute **attribute)
#define CHK_ALLOC(p)
Definition: mscfile.h:12
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:240

Referenced by CMainWnd::SaveMscFile(), CSnapin::SaveNode(), CConsoleWnd::SaveView(), and SaveWindowPlacement().

◆ CreateAndAddCDATANode()

HRESULT MscFile::CreateAndAddCDATANode ( PCWSTR  wszCDATA,
IXMLDOMNode *  pParent 
)

Definition at line 184 of file mscfile.cpp.

185{
186 HRESULT hr = S_OK;
187 IXMLDOMCDATASection *pCDATA = NULL;
188
189 BSTR bstrCDATA = SysAllocString(wszCDATA);
190 CHK_ALLOC(bstrCDATA);
191
192 CHK_HR(m_pDocument->createCDATASection(bstrCDATA, &pCDATA));
194
195CleanUp:
196 SAFE_RELEASE(pCDATA);
197 SysFreeString(bstrCDATA);
198 return hr;
199}
HRESULT AppendChildToParent(IXMLDOMNode *pChild, IXMLDOMNode *pParent=NULL)
Definition: mscfile.cpp:81
HRESULT createCDATASection([in] BSTR p, [retval, out] IXMLDOMCDATASection **cdata)

◆ CreateAndAddCommentNode()

HRESULT MscFile::CreateAndAddCommentNode ( PCWSTR  wszComment)

Definition at line 118 of file mscfile.cpp.

119{
120 HRESULT hr = S_OK;
121 IXMLDOMComment *pComment = NULL;
122
123 BSTR bstrComment = SysAllocString(wszComment);
124 CHK_ALLOC(bstrComment);
125
126 CHK_HR(m_pDocument->createComment(bstrComment, &pComment));
128
129CleanUp:
130 SAFE_RELEASE(pComment);
131 SysFreeString(bstrComment);
132 return hr;
133}
HRESULT createComment([in] BSTR p, [retval, out] IXMLDOMComment **comment)

◆ CreateAndAddElementNode()

HRESULT MscFile::CreateAndAddElementNode ( PCWSTR  wszName,
IXMLDOMNode *  pParent,
IXMLDOMElement **  ppElement = NULL 
)

Definition at line 204 of file mscfile.cpp.

205{
206 HRESULT hr = S_OK;
207 IXMLDOMElement* pElement = NULL;
208
209 CHK_HR(CreateElement(wszName, &pElement));
211
212CleanUp:
213 if (ppElement)
214 *ppElement = pElement; // Caller is repsonsible to release this element.
215 else
216 SAFE_RELEASE(pElement); // Caller is not interested on this element, so release it.
217
218 return hr;
219}
HRESULT CreateElement(PCWSTR wszName, IXMLDOMElement **ppElement)
Definition: mscfile.cpp:65

Referenced by CMainWnd::SaveMscFile(), CSnapin::SaveNode(), CConsoleWnd::SaveView(), and SaveWindowPlacement().

◆ CreateAndAddPINode()

HRESULT MscFile::CreateAndAddPINode ( PCWSTR  wszTarget,
PCWSTR  wszData 
)

Definition at line 97 of file mscfile.cpp.

98{
99 HRESULT hr = S_OK;
101
102 BSTR bstrTarget = SysAllocString(wszTarget);
103 BSTR bstrData = SysAllocString(wszData);
104 CHK_ALLOC(bstrTarget && bstrData);
105
106 CHK_HR(m_pDocument->createProcessingInstruction(bstrTarget, bstrData, &pPI));
108
109CleanUp:
110 SAFE_RELEASE(pPI);
111 SysFreeString(bstrTarget);
112 SysFreeString(bstrData);
113 return hr;
114}
HRESULT createProcessingInstruction([in] BSTR target, [in] BSTR data, [retval, out] IXMLDOMProcessingInstruction **pi)

Referenced by CMainWnd::SaveMscFile().

◆ CreateAndAddTextNode()

HRESULT MscFile::CreateAndAddTextNode ( PCWSTR  wszText,
IXMLDOMNode *  pParent 
)

Definition at line 165 of file mscfile.cpp.

166{
167 HRESULT hr = S_OK;
169
170 BSTR bstrText = SysAllocString(wszText);
171 CHK_ALLOC(bstrText);
172
175
176CleanUp:
178 SysFreeString(bstrText);
179 return hr;
180}
HRESULT createTextNode([in] BSTR p, [retval, out] IXMLDOMText **text)
LPCSTR pText
Definition: txtscale.cpp:79

Referenced by CMainWnd::SaveMscFile().

◆ CreateAndInitDOM()

HRESULT MscFile::CreateAndInitDOM ( )

Definition at line 46 of file mscfile.cpp.

47{
48 HRESULT hr = CoCreateInstance(CLSID_DOMDocument30,
49 NULL,
50 CLSCTX_INPROC_SERVER,
51 IID_IXMLDOMDocument,
52 (void**)&m_pDocument);
53 if (SUCCEEDED(hr))
54 {
55 m_pDocument->put_async(VARIANT_FALSE);
56 m_pDocument->put_validateOnParse(VARIANT_FALSE);
57 m_pDocument->put_resolveExternals(VARIANT_FALSE);
58 m_pDocument->put_preserveWhiteSpace(VARIANT_TRUE);
59 }
60 return hr;
61}
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
#define SUCCEEDED(hr)
Definition: intsafe.h:50

Referenced by CMainWnd::LoadMscFile(), and CMainWnd::SaveMscFile().

◆ CreateElement()

HRESULT MscFile::CreateElement ( PCWSTR  wszName,
IXMLDOMElement **  ppElement 
)

Definition at line 65 of file mscfile.cpp.

66{
67 HRESULT hr = S_OK;
68 *ppElement = NULL;
69
70 BSTR bstrName = SysAllocString(wszName);
71 CHK_ALLOC(bstrName);
72 CHK_HR(m_pDocument->createElement(bstrName, ppElement));
73
74CleanUp:
75 SysFreeString(bstrName);
76 return hr;
77}
HRESULT createElement([in] BSTR p, [retval, out] IXMLDOMElement **domElement)

Referenced by CreateAndAddElementNode(), and CMainWnd::SaveMscFile().

◆ GetAttribute()

HRESULT MscFile::GetAttribute ( IXMLDOMElement *  pElement,
LPWSTR  pszAttributeName,
VARIANT *  pAttributeValue 
)

Definition at line 484 of file mscfile.cpp.

488{
489 BSTR bstrAttribute = NULL;
490 HRESULT hr = S_OK;
491
492 bstrAttribute = SysAllocString(pszAttributeName);
493 if (bstrAttribute == NULL)
494 {
496 goto done;
497 }
498
499 hr = pElement->getAttribute(bstrAttribute, pAttributeValue);
500
501done:
502 if (bstrAttribute)
503 SysFreeString(bstrAttribute);
504
505 return hr;
506}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
HRESULT getAttribute([in] BSTR p, [retval, out] VARIANT *var)

Referenced by CheckMscFile(), CMainWnd::LoadMscFile(), CSnapin::ParseSnapin(), CConsoleWnd::ParseView(), CConsoleWnd::ParseViewAttributes(), and ParseWindowPlacement().

◆ GetElement()

HRESULT MscFile::GetElement ( IXMLDOMElement *  pParentElement,
LPWSTR  pszElementName,
IXMLDOMElement **  ppElement 
)

Definition at line 509 of file mscfile.cpp.

513{
514 IXMLDOMNodeList *pChildList = NULL;
515 IXMLDOMNode *nextItem;
517 BSTR NodeName = NULL;
518 HRESULT hr = S_OK;
519
520 *ppElement = NULL;
521
522 hr = pParentElement->get_childNodes(&pChildList);
523 if (FAILED(hr))
524 goto done;
525
526 for (;;)
527 {
528 hr = pChildList->nextNode(&nextItem);
529 if (hr != S_OK)
530 break;
531
532 hr = nextItem->get_nodeType(&NodeType);
533 if (hr == S_OK)
534 {
535 if (NodeType == NODE_ELEMENT)
536 {
537 NodeName = NULL;
538 hr = nextItem->get_baseName(&NodeName);
539 if (hr == S_OK)
540 {
541 if (_wcsicmp(NodeName, pszElementName) == 0)
542 {
543 *ppElement = (IXMLDOMElement *)nextItem;
544 break;
545 }
546 SysFreeString(NodeName);
547 NodeName = NULL;
548 }
549 }
550 }
551
552 nextItem->Release();
553 }
554
555done:
556 if (NodeName)
557 SysFreeString(NodeName);
558
559 if (pChildList)
560 pChildList->Release();
561
562 return hr;
563}
NodeType
Definition: Node.h:6
#define NodeType(P)
Definition: nodetype.h:51
HRESULT nextNode([retval, out] IXMLDOMNode **outNode)
enum tagDOMNodeType DOMNodeType
@ NODE_ELEMENT
Definition: msxml6.idl:113

Referenced by CMainWnd::LoadMscFile(), CMainWnd::ParseScopeTree(), CSnapin::ParseSnapin(), CMainWnd::ParseViewsElement(), and ParseWindowPlacement().

◆ LoadDOM()

HRESULT MscFile::LoadDOM ( )

Definition at line 398 of file mscfile.cpp.

399{
400 IXMLDOMParseError *pXMLErr = NULL;
401 BSTR bstrErr = NULL;
402 VARIANT_BOOL varStatus;
403 HRESULT hr = S_OK;
404
405 hr = m_pDocument->load(m_varFileName, &varStatus);
406 if (varStatus != VARIANT_TRUE)
407 {
408 // Failed to load xml, get last parsing error
409 CHK_HR(m_pDocument->get_parseError(&pXMLErr));
410 CHK_HR(pXMLErr->get_reason(&bstrErr));
411 }
412
413CleanUp:
414 SAFE_RELEASE(pXMLErr);
415 SysFreeString(bstrErr);
416
417 return hr;
418}
short VARIANT_BOOL
Definition: compat.h:2290
HRESULT load([in] VARIANT var1, [retval, out] VARIANT_BOOL *pbool)

Referenced by CMainWnd::LoadMscFile().

◆ ParseWindowPlacement()

HRESULT MscFile::ParseWindowPlacement ( CWindow *  pWindow,
IXMLDOMElement *  pParentElement 
)

Definition at line 272 of file mscfile.cpp.

273{
274 IXMLDOMElement *pWindowPlacementElement = NULL;
275 IXMLDOMNodeList *pChildList = NULL;
276 IXMLDOMNode *pNextElement;
278 BSTR NodeName = NULL;
279 VARIANT ShowCommand;
280 VARIANT NameValue;
281 WINDOWPLACEMENT wndpl;
282 HRESULT hr = S_OK;
283
284 ZeroMemory(&wndpl, sizeof(wndpl));
285 wndpl.length = sizeof(wndpl);
286 wndpl.flags = 0;
287
288 hr = GetElement(pParentElement, (LPWSTR)L"WindowPlacement", &pWindowPlacementElement);
289 if (hr != S_OK)
290 goto done;
291
292 VariantInit(&ShowCommand);
293 hr = GetAttribute(pWindowPlacementElement, (LPWSTR)L"ShowCommand", &ShowCommand);
294 if (hr != S_OK)
295 goto done;
296
297 wndpl.showCmd = ShowCmdFromString(V_BSTR(&ShowCommand));
298
299 VariantClear(&ShowCommand);
300
301 hr = pWindowPlacementElement->get_childNodes(&pChildList);
302 if (FAILED(hr))
303 goto done;
304
305 for (;;)
306 {
307 hr = pChildList->nextNode(&pNextElement);
308 if (hr == S_FALSE)
309 {
310 hr = S_OK;
311 break;
312 }
313
314 hr = pNextElement->get_nodeType(&NodeType);
315 if (hr == S_OK)
316 {
317 if (NodeType == NODE_ELEMENT)
318 {
319 NodeName = NULL;
320 hr = pNextElement->get_baseName(&NodeName);
321 if (hr == S_OK)
322 {
323 VariantInit(&NameValue);
324
325 hr = GetAttribute((IXMLDOMElement *)pNextElement, (LPWSTR)L"Name", &NameValue);
326 if (hr == S_OK)
327 {
328 if (_wcsicmp(NodeName, L"Point") == 0)
329 {
330 VARIANT PosX, PosY;
331 VariantInit(&PosX);
332 VariantInit(&PosY);
333 hr = GetAttribute((IXMLDOMElement *)pNextElement, (LPWSTR)L"X", &PosX);
334 hr = GetAttribute((IXMLDOMElement *)pNextElement, (LPWSTR)L"Y", &PosY);
335
336 if (_wcsicmp(V_BSTR(&NameValue), L"MinPosition") == 0)
337 {
338 wndpl.ptMinPosition.x = _wtol(V_BSTR(&PosX));
339 wndpl.ptMinPosition.y = _wtol(V_BSTR(&PosY));
340 }
341 else if (_wcsicmp(V_BSTR(&NameValue), L"MaxPosition") == 0)
342 {
343 wndpl.ptMaxPosition.x = _wtol(V_BSTR(&PosX));
344 wndpl.ptMaxPosition.y = _wtol(V_BSTR(&PosY));
345 }
346 VariantClear(&PosX);
347 VariantClear(&PosY);
348 }
349 else if (_wcsicmp(NodeName, L"Rectangle") == 0)
350 {
351 VARIANT PosTop, PosBottom, PosLeft, PosRight;
352 VariantInit(&PosTop);
353 VariantInit(&PosBottom);
354 VariantInit(&PosLeft);
355 VariantInit(&PosRight);
356 hr = GetAttribute((IXMLDOMElement *)pNextElement, (LPWSTR)L"Top", &PosTop);
357 hr = GetAttribute((IXMLDOMElement *)pNextElement, (LPWSTR)L"Bottom", &PosBottom);
358 hr = GetAttribute((IXMLDOMElement *)pNextElement, (LPWSTR)L"Left", &PosLeft);
359 hr = GetAttribute((IXMLDOMElement *)pNextElement, (LPWSTR)L"Right", &PosRight);
360 if (_wcsicmp(V_BSTR(&NameValue), L"NormalPosition") == 0)
361 {
362 wndpl.rcNormalPosition.top = _wtol(V_BSTR(&PosTop));
363 wndpl.rcNormalPosition.bottom = _wtol(V_BSTR(&PosBottom));
364 wndpl.rcNormalPosition.left = _wtol(V_BSTR(&PosLeft));
365 wndpl.rcNormalPosition.right = _wtol(V_BSTR(&PosRight));
366 }
367 VariantClear(&PosTop);
368 VariantClear(&PosBottom);
369 VariantClear(&PosLeft);
370 VariantClear(&PosRight);
371 }
372
373 VariantClear(&NameValue);
374 }
375
376 SysFreeString(NodeName);
377 NodeName = NULL;
378 }
379 }
380 }
381
382 pNextElement->Release();
383 }
384
385 pWindow->SetWindowPlacement(&wndpl);
386
387done:
388 if (pChildList)
389 pChildList->Release();
390
391 if (pWindowPlacementElement)
392 pWindowPlacementElement->Release();
393
394 return hr;
395}
int ShowCmdFromString(LPWSTR pszString)
Definition: misc.cpp:176
BOOL SetWindowPlacement(const WINDOWPLACEMENT *lpwndpl)
Definition: atlwin.h:1282
HRESULT GetElement(IXMLDOMElement *pParentElement, LPWSTR pszElementName, IXMLDOMElement **ppElement)
Definition: mscfile.cpp:509
_ACRTIMP __msvcrt_long __cdecl _wtol(const wchar_t *)
Definition: wcs.c:2803
#define ZeroMemory
Definition: minwinbase.h:31
long y
Definition: dcommon.idl:24
long x
Definition: dcommon.idl:24
long bottom
Definition: dcommon.idl:29
long right
Definition: dcommon.idl:29
long left
Definition: dcommon.idl:29
long top
Definition: dcommon.idl:29
POINT ptMaxPosition
Definition: winuser.h:3402
RECT rcNormalPosition
Definition: winuser.h:3403
POINT ptMinPosition
Definition: winuser.h:3401

Referenced by CMainWnd::LoadMscFile().

◆ ReleaseNode()

VOID MscFile::ReleaseNode ( IXMLDOMNode *  pNode)

Definition at line 566 of file mscfile.cpp.

567{
568 if (pNode)
569 {
570 pNode->Release();
571 pNode = NULL;
572 }
573}

◆ SaveDOM()

HRESULT MscFile::SaveDOM ( )

Definition at line 421 of file mscfile.cpp.

422{
424}
HRESULT save([in] VARIANT var1)

Referenced by CMainWnd::SaveMscFile().

◆ SaveWindowPlacement()

HRESULT MscFile::SaveWindowPlacement ( CWindow *  pWindow,
IXMLDOMElement *  pParentNode 
)

Definition at line 222 of file mscfile.cpp.

223{
224 IXMLDOMElement *pWindowPlacement = NULL;
225 IXMLDOMElement *pPointElement = NULL;
226 IXMLDOMElement *pRectangleElement = NULL;
227 WINDOWPLACEMENT wndpl;
228 WCHAR szBuffer[32];
229 HRESULT hr = S_OK;
230
231 pWindow->GetWindowPlacement(&wndpl);
232
233 CHK_HR(CreateAndAddElementNode(L"WindowPlacement", pParentNode, &pWindowPlacement));
234 CHK_HR(CreateAndAddAttributeNode(L"ShowCommand", ::ShowCmdToString(wndpl.showCmd), pWindowPlacement));
235
236 CHK_HR(CreateAndAddElementNode(L"Point", pWindowPlacement, &pPointElement));
237 CHK_HR(CreateAndAddAttributeNode(L"Name", L"MinPosition", pPointElement));
238 _swprintf(szBuffer, L"%ld", wndpl.ptMinPosition.x);
239 CHK_HR(CreateAndAddAttributeNode(L"X", szBuffer, pPointElement));
240 _swprintf(szBuffer, L"%ld", wndpl.ptMinPosition.y);
241 CHK_HR(CreateAndAddAttributeNode(L"Y", szBuffer, pPointElement));
242 SAFE_RELEASE(pPointElement);
243
244 CHK_HR(CreateAndAddElementNode(L"Point", pWindowPlacement, &pPointElement));
245 CHK_HR(CreateAndAddAttributeNode(L"Name", L"MaxPosition", pPointElement));
246 _swprintf(szBuffer, L"%ld", wndpl.ptMaxPosition.x);
247 CHK_HR(CreateAndAddAttributeNode(L"X", szBuffer, pPointElement));
248 _swprintf(szBuffer, L"%ld", wndpl.ptMaxPosition.y);
249 CHK_HR(CreateAndAddAttributeNode(L"Y", szBuffer, pPointElement));
250 SAFE_RELEASE(pPointElement);
251
252 /* <Rectangle Name="NormalPosition" Top="0" Bottom="508" Left="0" Right="1186"/> */
253 CHK_HR(CreateAndAddElementNode(L"Rectangle", pWindowPlacement, &pRectangleElement));
254 CHK_HR(CreateAndAddAttributeNode(L"Name", L"NormalPosition", pRectangleElement));
255 _swprintf(szBuffer, L"%ld", wndpl.rcNormalPosition.top);
256 CHK_HR(CreateAndAddAttributeNode(L"Top", szBuffer, pRectangleElement));
257 _swprintf(szBuffer, L"%ld", wndpl.rcNormalPosition.bottom);
258 CHK_HR(CreateAndAddAttributeNode(L"Bottom", szBuffer, pRectangleElement));
259 _swprintf(szBuffer, L"%ld", wndpl.rcNormalPosition.left);
260 CHK_HR(CreateAndAddAttributeNode(L"Left", szBuffer, pRectangleElement));
261 _swprintf(szBuffer, L"%ld", wndpl.rcNormalPosition.right);
262 CHK_HR(CreateAndAddAttributeNode(L"Right", szBuffer, pRectangleElement));
263 SAFE_RELEASE(pRectangleElement);
264
265CleanUp:
266 SAFE_RELEASE(pWindowPlacement);
267
268 return hr;
269}
BOOL GetWindowPlacement(WINDOWPLACEMENT *lpwndpl) const
Definition: atlwin.h:802
LPWSTR ShowCmdToString(int nShowCmd)
HRESULT CreateAndAddAttributeNode(PCWSTR wszName, PCWSTR wszValue, IXMLDOMElement *pParent)
Definition: mscfile.cpp:137
HRESULT CreateAndAddElementNode(PCWSTR wszName, IXMLDOMNode *pParent, IXMLDOMElement **ppElement=NULL)
Definition: mscfile.cpp:204
#define _swprintf(buf, format,...)
Definition: sprintf.c:56
short WCHAR
Definition: pedump.c:58

Referenced by CMainWnd::SaveMscFile(), and CConsoleWnd::SaveView().

◆ ShowCmdToString()

LPWSTR MscFile::ShowCmdToString ( int  nShowCmd)
private

Referenced by SaveWindowPlacement().

◆ VariantFromString()

HRESULT MscFile::VariantFromString ( PCWSTR  wszValue,
VARIANT &  Variant 
)
private

Definition at line 31 of file mscfile.cpp.

32{
33 HRESULT hr = S_OK;
34 BSTR bstr = SysAllocString(wszValue);
35 CHK_ALLOC(bstr);
36
37 V_VT(&Variant) = VT_BSTR;
38 V_BSTR(&Variant) = bstr;
39
40CleanUp:
41 return hr;
42}
@ VT_BSTR
Definition: compat.h:2303

Referenced by CreateAndAddAttributeNode(), and MscFile().

Member Data Documentation

◆ m_pDocument

◆ m_varFileName

VARIANT MscFile::m_varFileName
private

Definition at line 20 of file mscfile.h.

Referenced by LoadDOM(), MscFile(), SaveDOM(), and ~MscFile().


The documentation for this class was generated from the following files: