0029169: Configuration - fix compilation with undefined UNICODE on Windows
[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 #include <windows.h>
16
17 #include <WNT_WClass.hxx>
18
19 #include <TCollection_ExtendedString.hxx>
20 #include <WNT_ClassDefinitionError.hxx>
21 #include <WNT_Window.hxx>
22
23 #if defined(_WIN32) && !defined(OCCT_UWP)
24
25 IMPLEMENT_STANDARD_RTTIEXT(WNT_WClass, Standard_Transient)
26
27 //=======================================================================
28 //function : WNT_WClass
29 //purpose  :
30 //=======================================================================
31 WNT_WClass::WNT_WClass (const TCollection_AsciiString& theClassName,
32                         const Standard_Address theWndProc,
33                         const unsigned int theStyle,
34                         const Standard_Integer theClassExtra,
35                         const Standard_Integer theWindowExtra,
36                         const Aspect_Handle theCursor,
37                         const Aspect_Handle theIcon,
38                         const TCollection_AsciiString& theMenuName)
39 : myClassName (theClassName),
40   myAppInstance (GetModuleHandleW (NULL)),
41   myWndProc (NULL)
42 {
43   const TCollection_ExtendedString aClassNameW (theClassName);
44   const TCollection_ExtendedString aMenuNameW  (theMenuName);
45   WNDCLASSW aWinClass;
46   aWinClass.style         = (UINT)theStyle;
47   aWinClass.lpfnWndProc   = theWndProc != NULL ? (WNDPROC )theWndProc : DefWindowProcW;
48   aWinClass.cbClsExtra    = theClassExtra;
49   aWinClass.cbWndExtra    = theWindowExtra;
50   aWinClass.hInstance     = (HINSTANCE )myAppInstance;
51   aWinClass.hIcon         = theIcon   != NULL ? (HICON   )theIcon   : LoadIcon   (NULL, IDI_APPLICATION);
52   aWinClass.hCursor       = theCursor != NULL ? (HCURSOR )theCursor : LoadCursor (NULL, IDC_NO);
53   aWinClass.hbrBackground = 0;
54   aWinClass.lpszMenuName  = !aMenuNameW.IsEmpty() ? aMenuNameW.ToWideString() : NULL;
55   aWinClass.lpszClassName = aClassNameW.ToWideString();
56   if (!RegisterClassW (&aWinClass))
57   {
58     myClassName.Clear();
59     throw WNT_ClassDefinitionError("Unable to register window class");
60   }
61   myWndProc = (Standard_Address )aWinClass.lpfnWndProc;
62 }
63
64 //=======================================================================
65 //function : ~WNT_WClass
66 //purpose  :
67 //=======================================================================
68 WNT_WClass::~WNT_WClass()
69 {
70   if (!myClassName.IsEmpty())
71   {
72     const TCollection_ExtendedString aClassNameW (myClassName);
73     UnregisterClassW (aClassNameW.ToWideString(), (HINSTANCE )myAppInstance);
74   }
75 }
76
77 #endif // _WIN32