0030675: Visualization - remove redundant proxy classes in hierarchy of PrsMgr_Presen...
[occt.git] / src / WNT / WNT_WClass.cxx
1 // Copyright (c) 1996-1999 Matra Datavision
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
3 //
4 // This file is part of Open CASCADE Technology software library.
5 //
6 // This library is free software; you can redistribute it and/or modify it under
7 // the terms of the GNU Lesser General Public License version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
11 //
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
14
15 #if defined(_WIN32)
16   #include <windows.h>
17 #endif
18
19 #include <WNT_WClass.hxx>
20
21 #include <TCollection_ExtendedString.hxx>
22 #include <WNT_ClassDefinitionError.hxx>
23 #include <WNT_Window.hxx>
24
25 #if defined(_WIN32) && !defined(OCCT_UWP)
26
27 IMPLEMENT_STANDARD_RTTIEXT(WNT_WClass, Standard_Transient)
28
29 //=======================================================================
30 //function : WNT_WClass
31 //purpose  :
32 //=======================================================================
33 WNT_WClass::WNT_WClass (const TCollection_AsciiString& theClassName,
34                         const Standard_Address theWndProc,
35                         const unsigned int theStyle,
36                         const Standard_Integer theClassExtra,
37                         const Standard_Integer theWindowExtra,
38                         const Aspect_Handle theCursor,
39                         const Aspect_Handle theIcon,
40                         const TCollection_AsciiString& theMenuName)
41 : myClassName (theClassName),
42   myAppInstance (GetModuleHandleW (NULL)),
43   myWndProc (NULL)
44 {
45   const TCollection_ExtendedString aClassNameW (theClassName);
46   const TCollection_ExtendedString aMenuNameW  (theMenuName);
47   WNDCLASSW aWinClass;
48   aWinClass.style         = (UINT)theStyle;
49   aWinClass.lpfnWndProc   = theWndProc != NULL ? (WNDPROC )theWndProc : DefWindowProcW;
50   aWinClass.cbClsExtra    = theClassExtra;
51   aWinClass.cbWndExtra    = theWindowExtra;
52   aWinClass.hInstance     = (HINSTANCE )myAppInstance;
53   aWinClass.hIcon         = theIcon   != NULL ? (HICON   )theIcon   : LoadIcon   (NULL, IDI_APPLICATION);
54   aWinClass.hCursor       = theCursor != NULL ? (HCURSOR )theCursor : LoadCursor (NULL, IDC_NO);
55   aWinClass.hbrBackground = 0;
56   aWinClass.lpszMenuName  = !aMenuNameW.IsEmpty() ? aMenuNameW.ToWideString() : NULL;
57   aWinClass.lpszClassName = aClassNameW.ToWideString();
58   if (!RegisterClassW (&aWinClass))
59   {
60     myClassName.Clear();
61     throw WNT_ClassDefinitionError("Unable to register window class");
62   }
63   myWndProc = (Standard_Address )aWinClass.lpfnWndProc;
64 }
65
66 //=======================================================================
67 //function : ~WNT_WClass
68 //purpose  :
69 //=======================================================================
70 WNT_WClass::~WNT_WClass()
71 {
72   if (!myClassName.IsEmpty())
73   {
74     const TCollection_ExtendedString aClassNameW (myClassName);
75     UnregisterClassW (aClassNameW.ToWideString(), (HINSTANCE )myAppInstance);
76   }
77 }
78
79 #endif // _WIN32