aboutsummaryrefslogtreecommitdiff
path: root/CPP/Windows/Window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/Windows/Window.cpp')
-rw-r--r--CPP/Windows/Window.cpp179
1 files changed, 179 insertions, 0 deletions
diff --git a/CPP/Windows/Window.cpp b/CPP/Windows/Window.cpp
new file mode 100644
index 0000000..32af4aa
--- /dev/null
+++ b/CPP/Windows/Window.cpp
@@ -0,0 +1,179 @@
1// Windows/Window.cpp
2
3#include "StdAfx.h"
4
5#ifndef _UNICODE
6#include "../Common/StringConvert.h"
7#endif
8#include "Window.h"
9
10#ifndef _UNICODE
11extern bool g_IsNT;
12#endif
13
14namespace NWindows {
15
16#ifndef _UNICODE
17ATOM MyRegisterClass(CONST WNDCLASSW *wndClass)
18{
19 if (g_IsNT)
20 return RegisterClassW(wndClass);
21 WNDCLASSA wndClassA;
22 wndClassA.style = wndClass->style;
23 wndClassA.lpfnWndProc = wndClass->lpfnWndProc;
24 wndClassA.cbClsExtra = wndClass->cbClsExtra;
25 wndClassA.cbWndExtra = wndClass->cbWndExtra;
26 wndClassA.hInstance = wndClass->hInstance;
27 wndClassA.hIcon = wndClass->hIcon;
28 wndClassA.hCursor = wndClass->hCursor;
29 wndClassA.hbrBackground = wndClass->hbrBackground;
30 AString menuName;
31 AString className;
32 if (IS_INTRESOURCE(wndClass->lpszMenuName))
33 wndClassA.lpszMenuName = (LPCSTR)wndClass->lpszMenuName;
34 else
35 {
36 menuName = GetSystemString(wndClass->lpszMenuName);
37 wndClassA.lpszMenuName = menuName;
38 }
39 if (IS_INTRESOURCE(wndClass->lpszClassName))
40 wndClassA.lpszClassName = (LPCSTR)wndClass->lpszClassName;
41 else
42 {
43 className = GetSystemString(wndClass->lpszClassName);
44 wndClassA.lpszClassName = className;
45 }
46 return RegisterClassA(&wndClassA);
47}
48
49bool CWindow::Create(LPCWSTR className,
50 LPCWSTR windowName, DWORD style,
51 int x, int y, int width, int height,
52 HWND parentWindow, HMENU idOrHMenu,
53 HINSTANCE instance, LPVOID createParam)
54{
55 if (g_IsNT)
56 {
57 _window = ::CreateWindowW(className, windowName,
58 style, x, y, width, height, parentWindow,
59 idOrHMenu, instance, createParam);
60 return (_window != NULL);
61 }
62 return Create(GetSystemString(className), GetSystemString(windowName),
63 style, x, y, width, height, parentWindow,
64 idOrHMenu, instance, createParam);
65}
66
67bool CWindow::CreateEx(DWORD exStyle, LPCWSTR className,
68 LPCWSTR windowName, DWORD style,
69 int x, int y, int width, int height,
70 HWND parentWindow, HMENU idOrHMenu,
71 HINSTANCE instance, LPVOID createParam)
72{
73 if (g_IsNT)
74 {
75 _window = ::CreateWindowExW(exStyle, className, windowName,
76 style, x, y, width, height, parentWindow,
77 idOrHMenu, instance, createParam);
78 return (_window != NULL);
79 }
80 AString classNameA;
81 LPCSTR classNameP;
82 if (IS_INTRESOURCE(className))
83 classNameP = (LPCSTR)className;
84 else
85 {
86 classNameA = GetSystemString(className);
87 classNameP = classNameA;
88 }
89 AString windowNameA;
90 LPCSTR windowNameP;
91 if (IS_INTRESOURCE(windowName))
92 windowNameP = (LPCSTR)windowName;
93 else
94 {
95 windowNameA = GetSystemString(windowName);
96 windowNameP = windowNameA;
97 }
98 return CreateEx(exStyle, classNameP, windowNameP,
99 style, x, y, width, height, parentWindow,
100 idOrHMenu, instance, createParam);
101}
102
103#endif
104
105#ifndef _UNICODE
106bool MySetWindowText(HWND wnd, LPCWSTR s)
107{
108 if (g_IsNT)
109 return BOOLToBool(::SetWindowTextW(wnd, s));
110 return BOOLToBool(::SetWindowTextA(wnd, UnicodeStringToMultiByte(s)));
111}
112#endif
113
114bool CWindow::GetText(CSysString &s)
115{
116 s.Empty();
117 unsigned len = (unsigned)GetTextLength();
118 if (len == 0)
119 return (::GetLastError() == ERROR_SUCCESS);
120 TCHAR *p = s.GetBuf(len);
121 {
122 unsigned len2 = (unsigned)GetText(p, (int)(len + 1));
123 if (len > len2)
124 len = len2;
125 }
126 s.ReleaseBuf_CalcLen(len);
127 if (len == 0)
128 return (::GetLastError() == ERROR_SUCCESS);
129 return true;
130}
131
132#ifndef _UNICODE
133bool CWindow::GetText(UString &s)
134{
135 if (g_IsNT)
136 {
137 s.Empty();
138 unsigned len = (unsigned)GetWindowTextLengthW(_window);
139 if (len == 0)
140 return (::GetLastError() == ERROR_SUCCESS);
141 wchar_t *p = s.GetBuf(len);
142 {
143 unsigned len2 = (unsigned)GetWindowTextW(_window, p, (int)(len + 1));
144 if (len > len2)
145 len = len2;
146 }
147 s.ReleaseBuf_CalcLen(len);
148 if (len == 0)
149 return (::GetLastError() == ERROR_SUCCESS);
150 return true;
151 }
152 CSysString sysString;
153 bool result = GetText(sysString);
154 MultiByteToUnicodeString2(s, sysString);
155 return result;
156}
157#endif
158
159
160/*
161bool CWindow::ModifyStyleBase(int styleOffset,
162 DWORD remove, DWORD add, UINT flags)
163{
164 DWORD style = GetWindowLong(styleOffset);
165 DWORD newStyle = (style & ~remove) | add;
166 if (style == newStyle)
167 return false; // it is not good
168
169 SetWindowLong(styleOffset, newStyle);
170 if (flags != 0)
171 {
172 ::SetWindowPos(_window, NULL, 0, 0, 0, 0,
173 SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | flags);
174 }
175 return TRUE;
176}
177*/
178
179}