tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Window.cpp (4581B)


      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
     11 extern bool g_IsNT;
     12 #endif
     13 
     14 namespace NWindows {
     15 
     16 #ifndef _UNICODE
     17 ATOM 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 
     49 bool 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 
     67 bool 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
    106 bool 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 
    114 bool CWindow::GetText(CSysString &s)
    115 {
    116  s.Empty();
    117  int len = GetTextLength();
    118  if (len == 0)
    119    return (::GetLastError() == ERROR_SUCCESS);
    120  TCHAR *p = s.GetBuf(len);
    121  {
    122    int len2 = GetText(p, 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
    133 bool CWindow::GetText(UString &s)
    134 {
    135  if (g_IsNT)
    136  {
    137    s.Empty();
    138    int len = GetWindowTextLengthW(_window);
    139    if (len == 0)
    140      return (::GetLastError() == ERROR_SUCCESS);
    141    wchar_t *p = s.GetBuf(len);
    142    {
    143      int len2 = GetWindowTextW(_window, p, 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 /*
    161 bool 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 }