Не до конца создается окно
Как видно на картинке Окно программы создается но отсутствуют кнопки закрыть/свернуть и оно зависло. Используется WINAPI. Изначально все работало и окно создавалось но мне нужно это вынести в отдельный класс и тогда оно перестало работать хотя код по факту тотже.
Код: main.cpp
#include "Linker.h"
#include "Windowed.h"
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)
{
Windowed *wind = new Windowed(hInstance, L"ClassName");
wind->CreateWin(L"title", 100, 50, 1200, 800);
ShowWindow(wind->descriptor, nCmdShow);
UpdateWindow(wind->descriptor);
while (wind->msg.message != WM_QUIT)
{
if (PeekMessage(&wind->msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&wind->msg);
DispatchMessage(&wind->msg);
}
}
return 0;
}
Код: Windowed.h
#pragma once
#include "Linker.h"
class Windowed
{
public:
Windowed(HINSTANCE, LPCWSTR);
static LRESULT _stdcall WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
WNDCLASS windowClass = { 0 };
HWND descriptor;
HINSTANCE hInstance;
MSG msg = {};
void CreateWin(LPCWSTR, int, int, int, int);
};
Код: Windowed.cpp
#include "Windowed.h"
Windowed::Windowed(HINSTANCE hInstance, LPCWSTR className)
{
this->hInstance = hInstance;
this->windowClass.lpfnWndProc = this->WindowProc;
this->windowClass.hInstance = hInstance;
this->windowClass.lpszClassName = className;
RegisterClass(&this->windowClass);
}
LRESULT Windowed::WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
void Windowed::CreateWin(LPCWSTR title, int x, int y, int w, int h)
{
this->descriptor = CreateWindow(
this->windowClass.lpszClassName,
title,
WS_OVERLAPPED,
x, y, w, h,
nullptr, nullptr,
this->hInstance,
nullptr);
}
В linker.h просто подключена windows.h
Ответы (1 шт):
Автор решения: Albion Muz
→ Ссылка
Как говорил @こきん "Замените this->WindowProc, на Windowed::WindowProc, и ещё WS_OVERLAPPEDWINDOW вместо WS_OVERLAPPED" и это помогло. Да благословит его Бьёрн Страуструп.
