1 // Copyright (c) 1996-1999 Matra Datavision
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
4 // This file is part of Open CASCADE Technology software library.
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.
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
17 #include <WNT_WClass.hxx>
19 #include <TCollection_ExtendedString.hxx>
20 #include <WNT_ClassDefinitionError.hxx>
21 #include <WNT_Window.hxx>
23 #if defined(_WIN32) && !defined(OCCT_UWP)
25 IMPLEMENT_STANDARD_RTTIEXT(WNT_WClass, Standard_Transient)
27 //=======================================================================
28 //function : WNT_WClass
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)),
43 const TCollection_ExtendedString aClassNameW (theClassName);
44 const TCollection_ExtendedString aMenuNameW (theMenuName);
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))
59 throw WNT_ClassDefinitionError("Unable to register window class");
61 myWndProc = (Standard_Address )aWinClass.lpfnWndProc;
64 //=======================================================================
65 //function : ~WNT_WClass
67 //=======================================================================
68 WNT_WClass::~WNT_WClass()
70 if (!myClassName.IsEmpty())
72 const TCollection_ExtendedString aClassNameW (myClassName);
73 UnregisterClassW (aClassNameW.ToWideString(), (HINSTANCE )myAppInstance);