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.
19 #include <WNT_WClass.hxx>
21 #include <TCollection_ExtendedString.hxx>
22 #include <WNT_ClassDefinitionError.hxx>
23 #include <WNT_Window.hxx>
25 #if defined(_WIN32) && !defined(OCCT_UWP)
27 IMPLEMENT_STANDARD_RTTIEXT(WNT_WClass, Standard_Transient)
29 //=======================================================================
30 //function : WNT_WClass
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)),
45 const TCollection_ExtendedString aClassNameW (theClassName);
46 const TCollection_ExtendedString aMenuNameW (theMenuName);
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))
61 throw WNT_ClassDefinitionError("Unable to register window class");
63 myWndProc = (Standard_Address )aWinClass.lpfnWndProc;
66 //=======================================================================
67 //function : ~WNT_WClass
69 //=======================================================================
70 WNT_WClass::~WNT_WClass()
72 if (!myClassName.IsEmpty())
74 const TCollection_ExtendedString aClassNameW (myClassName);
75 UnregisterClassW (aClassNameW.ToWideString(), (HINSTANCE )myAppInstance);