Home | History | Annotate | Download | only in Windows
      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 length = GetTextLength();
    118   if (length == 0)
    119     return (::GetLastError() == ERROR_SUCCESS);
    120   length = GetText(s.GetBuffer(length), length + 1);
    121   s.ReleaseBuffer();
    122   if (length == 0)
    123     return (::GetLastError() != ERROR_SUCCESS);
    124   return true;
    125 }
    126 
    127 #ifndef _UNICODE
    128 bool CWindow::GetText(UString &s)
    129 {
    130   if (g_IsNT)
    131   {
    132     s.Empty();
    133     int length = GetWindowTextLengthW(_window);
    134     if (length == 0)
    135       return (::GetLastError() == ERROR_SUCCESS);
    136     length = GetWindowTextW(_window, s.GetBuffer(length), length + 1);
    137     s.ReleaseBuffer();
    138     if (length == 0)
    139       return (::GetLastError() == ERROR_SUCCESS);
    140     return true;
    141   }
    142   CSysString sysString;
    143   bool result = GetText(sysString);
    144   s = GetUnicodeString(sysString);
    145   return result;
    146 }
    147 #endif
    148 
    149 
    150 /*
    151 bool CWindow::ModifyStyleBase(int styleOffset,
    152   DWORD remove, DWORD add, UINT flags)
    153 {
    154   DWORD style = GetWindowLong(styleOffset);
    155   DWORD newStyle = (style & ~remove) | add;
    156   if (style == newStyle)
    157     return false; // it is not good
    158 
    159   SetWindowLong(styleOffset, newStyle);
    160   if (flags != 0)
    161   {
    162     ::SetWindowPos(_window, NULL, 0, 0, 0, 0,
    163       SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | flags);
    164   }
    165   return TRUE;
    166 }
    167 */
    168 
    169 }
    170