C++ wndproc в классе

195
29 декабря 2018, 07:00

Делаю обертку вокруг winapi окна, нужно затащить wndproc в класс а он статический. Вобщем WindowProc не работает почемуто.. pwnd null

#pragma once
#include "windows.h"
class Window {
protected:
  HWND hwnd;
public:
LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
  switch (message)
  {
  default:
    return DefWindowProc(hwnd, message, wParam, lParam);
  }
  return 0;
}
static LRESULT CALLBACK internal_WndProc(HWND hWnd, UINT message, WPARAM 
  wParam, LPARAM lParam) {
  Window* pWnd;
  if (message == WM_NCCREATE)
  {
    LPCREATESTRUCT cs = reinterpret_cast<LPCREATESTRUCT>(lParam);
    pWnd = reinterpret_cast<Window*>(cs->lpCreateParams);
    SetLastError(0);
    if (!SetWindowLongPtr(hWnd, GWL_USERDATA, reinterpret_cast<LONG_PTR> 
    (pWnd)))
    {
      int i = 1;
    }
  }
  else
  {
    pWnd = reinterpret_cast<Window*>(GetWindowLongPtr(hWnd, GWL_USERDATA));
  }
  if (pWnd)
  {
    return pWnd->WindowProc(message, wParam, lParam);
  }
  else
  {
    return DefWindowProc(hWnd, message, wParam, lParam);
  }
}
Window() {
WNDCLASSW windowClass;
windowClass.style = CS_DBLCLKS | CS_PARENTDC;
windowClass.lpfnWndProc = &internal_WndProc;
windowClass.cbClsExtra = 0;
windowClass.cbWndExtra = 0;
windowClass.hInstance = GetModuleHandle(NULL);
windowClass.hIcon = NULL;
windowClass.hCursor = LoadCursor(NULL, (LPTSTR)IDC_IBEAM);
windowClass.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(255, 255, 255));
windowClass.lpszMenuName = NULL;
windowClass.lpszClassName = L"MainWindowClass";
RegisterClassW(&windowClass);
this->hwnd = CreateWindowW(L"MainWindowClass", L"Window", (
  WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX),
  GetSystemMetrics(SM_CXSCREEN) / 2 - 400,
  GetSystemMetrics(SM_CYSCREEN) / 2 - 300, 800, 600, 0, 0, GetModuleHandle(NULL), 0);
ShowWindow(hwnd, 1);
UpdateWindow(hwnd);
}
};
READ ALSO
Netbeans (C/C++) + Базы данных. Как подключить любую СУБД?

Netbeans (C/C++) + Базы данных. Как подключить любую СУБД?

Нужно подключить любую СУБД к проекту Netbeans (C++, MinGW)Провёл день в попытках подключить MySQL, так и не найдя нигде инструкции или документации

180
Почему у функции scanf_s в Visual Studio при использовании &ldquo;%s&rdquo; прекращается работа в языке Си

Почему у функции scanf_s в Visual Studio при использовании “%s” прекращается работа в языке Си

Почему у функции scanf_s в Visual Studio 2013 при использовании "%s" прекращается работа в языке Си

198
Считывание информации из файла С++

Считывание информации из файла С++

пишу программу, необходимо считывать информацию из txt файла и записывать информацию в стрктуру

227