| // Windows/Window.cpp | |
| #include "StdAfx.h" | |
| #ifndef _UNICODE | |
| #include "../Common/StringConvert.h" | |
| #endif | |
| #include "Window.h" | |
| #ifndef _UNICODE | |
| extern bool g_IsNT; | |
| #endif | |
| namespace NWindows { | |
| #ifndef _UNICODE | |
| ATOM MyRegisterClass(CONST WNDCLASSW *wndClass) | |
| { | |
| if (g_IsNT) | |
| return RegisterClassW(wndClass); | |
| WNDCLASSA wndClassA; | |
| wndClassA.style = wndClass->style; | |
| wndClassA.lpfnWndProc = wndClass->lpfnWndProc; | |
| wndClassA.cbClsExtra = wndClass->cbClsExtra; | |
| wndClassA.cbWndExtra = wndClass->cbWndExtra; | |
| wndClassA.hInstance = wndClass->hInstance; | |
| wndClassA.hIcon = wndClass->hIcon; | |
| wndClassA.hCursor = wndClass->hCursor; | |
| wndClassA.hbrBackground = wndClass->hbrBackground; | |
| AString menuName; | |
| AString className; | |
| if (IS_INTRESOURCE(wndClass->lpszMenuName)) | |
| wndClassA.lpszMenuName = (LPCSTR)wndClass->lpszMenuName; | |
| else | |
| { | |
| menuName = GetSystemString(wndClass->lpszMenuName); | |
| wndClassA.lpszMenuName = menuName; | |
| } | |
| if (IS_INTRESOURCE(wndClass->lpszClassName)) | |
| wndClassA.lpszClassName = (LPCSTR)wndClass->lpszClassName; | |
| else | |
| { | |
| className = GetSystemString(wndClass->lpszClassName); | |
| wndClassA.lpszClassName = className; | |
| } | |
| return RegisterClassA(&wndClassA); | |
| } | |
| bool CWindow::Create(LPCWSTR className, | |
| LPCWSTR windowName, DWORD style, | |
| int x, int y, int width, int height, | |
| HWND parentWindow, HMENU idOrHMenu, | |
| HINSTANCE instance, LPVOID createParam) | |
| { | |
| if (g_IsNT) | |
| { | |
| _window = ::CreateWindowW(className, windowName, | |
| style, x, y, width, height, parentWindow, | |
| idOrHMenu, instance, createParam); | |
| return (_window != NULL); | |
| } | |
| return Create(GetSystemString(className), GetSystemString(windowName), | |
| style, x, y, width, height, parentWindow, | |
| idOrHMenu, instance, createParam); | |
| } | |
| bool CWindow::CreateEx(DWORD exStyle, LPCWSTR className, | |
| LPCWSTR windowName, DWORD style, | |
| int x, int y, int width, int height, | |
| HWND parentWindow, HMENU idOrHMenu, | |
| HINSTANCE instance, LPVOID createParam) | |
| { | |
| if (g_IsNT) | |
| { | |
| _window = ::CreateWindowExW(exStyle, className, windowName, | |
| style, x, y, width, height, parentWindow, | |
| idOrHMenu, instance, createParam); | |
| return (_window != NULL); | |
| } | |
| AString classNameA; | |
| LPCSTR classNameP; | |
| if (IS_INTRESOURCE(className)) | |
| classNameP = (LPCSTR)className; | |
| else | |
| { | |
| classNameA = GetSystemString(className); | |
| classNameP = classNameA; | |
| } | |
| AString windowNameA; | |
| LPCSTR windowNameP; | |
| if (IS_INTRESOURCE(windowName)) | |
| windowNameP = (LPCSTR)windowName; | |
| else | |
| { | |
| windowNameA = GetSystemString(windowName); | |
| windowNameP = windowNameA; | |
| } | |
| return CreateEx(exStyle, classNameP, windowNameP, | |
| style, x, y, width, height, parentWindow, | |
| idOrHMenu, instance, createParam); | |
| } | |
| #endif | |
| #ifndef _UNICODE | |
| bool MySetWindowText(HWND wnd, LPCWSTR s) | |
| { | |
| if (g_IsNT) | |
| return BOOLToBool(::SetWindowTextW(wnd, s)); | |
| return BOOLToBool(::SetWindowTextA(wnd, UnicodeStringToMultiByte(s))); | |
| } | |
| #endif | |
| bool CWindow::GetText(CSysString &s) | |
| { | |
| s.Empty(); | |
| int length = GetTextLength(); | |
| if (length == 0) | |
| return (::GetLastError() == ERROR_SUCCESS); | |
| length = GetText(s.GetBuffer(length), length + 1); | |
| s.ReleaseBuffer(); | |
| if (length == 0) | |
| return (::GetLastError() != ERROR_SUCCESS); | |
| return true; | |
| } | |
| #ifndef _UNICODE | |
| bool CWindow::GetText(UString &s) | |
| { | |
| if (g_IsNT) | |
| { | |
| s.Empty(); | |
| int length = GetWindowTextLengthW(_window); | |
| if (length == 0) | |
| return (::GetLastError() == ERROR_SUCCESS); | |
| length = GetWindowTextW(_window, s.GetBuffer(length), length + 1); | |
| s.ReleaseBuffer(); | |
| if (length == 0) | |
| return (::GetLastError() == ERROR_SUCCESS); | |
| return true; | |
| } | |
| CSysString sysString; | |
| bool result = GetText(sysString); | |
| s = GetUnicodeString(sysString); | |
| return result; | |
| } | |
| #endif | |
| /* | |
| bool CWindow::ModifyStyleBase(int styleOffset, | |
| DWORD remove, DWORD add, UINT flags) | |
| { | |
| DWORD style = GetWindowLong(styleOffset); | |
| DWORD newStyle = (style & ~remove) | add; | |
| if (style == newStyle) | |
| return false; // it is not good | |
| SetWindowLong(styleOffset, newStyle); | |
| if (flags != 0) | |
| { | |
| ::SetWindowPos(_window, NULL, 0, 0, 0, 0, | |
| SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | flags); | |
| } | |
| return TRUE; | |
| } | |
| */ | |
| } |