Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.desktop/windows/native/libawt/windows/ComCtl32Util.cpp
41153 views
1
/*
2
* Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
#include "awt.h"
27
#include "ComCtl32Util.h"
28
29
ComCtl32Util::ComCtl32Util() {
30
m_bToolTipControlInitialized = FALSE;
31
}
32
33
ComCtl32Util::~ComCtl32Util() {
34
}
35
36
void ComCtl32Util::InitLibraries() {
37
INITCOMMONCONTROLSEX iccex;
38
memset(&iccex, 0, sizeof(INITCOMMONCONTROLSEX));
39
iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
40
iccex.dwICC = ICC_TAB_CLASSES;
41
m_bToolTipControlInitialized = ::InitCommonControlsEx(&iccex);
42
}
43
44
WNDPROC ComCtl32Util::SubclassHWND(HWND hwnd, WNDPROC _WindowProc) {
45
if (IS_WINXP) {
46
const SUBCLASSPROC p = SharedWindowProc; // let compiler check type of SharedWindowProc
47
::SetWindowSubclass(hwnd, p, (UINT_PTR)_WindowProc, NULL); // _WindowProc is used as subclass ID
48
return NULL;
49
} else {
50
return (WNDPROC)::SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)_WindowProc);
51
}
52
}
53
54
void ComCtl32Util::UnsubclassHWND(HWND hwnd, WNDPROC _WindowProc, WNDPROC _DefWindowProc) {
55
if (IS_WINXP) {
56
const SUBCLASSPROC p = SharedWindowProc; // let compiler check type of SharedWindowProc
57
::RemoveWindowSubclass(hwnd, p, (UINT_PTR)_WindowProc); // _WindowProc is used as subclass ID
58
} else {
59
::SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)_DefWindowProc);
60
}
61
}
62
63
LRESULT ComCtl32Util::DefWindowProc(WNDPROC _DefWindowProc, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
64
if (IS_WINXP) {
65
return ::DefSubclassProc(hwnd, msg, wParam, lParam);
66
} else if (_DefWindowProc != NULL) {
67
return ::CallWindowProc(_DefWindowProc, hwnd, msg, wParam, lParam);
68
} else {
69
return ::DefWindowProc(hwnd, msg, wParam, lParam);
70
}
71
}
72
73
LRESULT ComCtl32Util::SharedWindowProc(HWND hwnd, UINT msg,
74
WPARAM wParam, LPARAM lParam,
75
UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
76
{
77
TRY;
78
79
WNDPROC _WindowProc = (WNDPROC)uIdSubclass;
80
return ::CallWindowProc(_WindowProc, hwnd, msg, wParam, lParam);
81
82
CATCH_BAD_ALLOC_RET(0);
83
}
84
85