У меня есть простое приложение Win32, которое создает кнопку. Сразу после создания кнопки я отключил ее с помощью функции EnableWindow(FALSE)
из файла <windows.h>
. Это работает нормально, когда размер кнопки больше, чем примененный текст.
Но когда размер кнопки меньше текста кнопки, клиентская область всего окна, похоже, копирует содержимое экрана.
Код, вызывающий ошибку:
#include <Windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
WNDCLASSEX wcex = { 0 };
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.lpfnWndProc = WndProc;
wcex.hInstance = hInstance;
wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
wcex.lpszClassName = L"MYWINDOWCLASS";
if (RegisterClassExW(&wcex) == 0)
return -1;
HWND hWnd = CreateWindowW(L"MYWINDOWCLASS", L"MYWINDOW", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
if (!hWnd)
return -1;
HWND buttonHWnd = CreateWindowW(L"BUTTON", L"MYWINDOW", WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
100, 100, 40, 30, hWnd, nullptr, hInstance, nullptr);
if (!buttonHWnd)
return -1;
EnableWindow(buttonHWnd, FALSE);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
MSG msg;
while (GetMessage(&msg, nullptr, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
🤔 А знаете ли вы, что...
C++11, C++14, C++17 и C++20 - это различные версии стандарта C++, каждая из которых внесла свои улучшения.
Как сказал @RemyLebeau, комментарий @OldBoy должен быть опубликован как ответ. Продвигайте комментарий @OldBoy для ответа.
Ваш код неполный по двум причинам: 1. Вы не объявили кисть для фона в вашей структуре WNDCLASSEX, поэтому вы можете не получить ожидаемый фон. 2. У вас нет обработчика для
WM_PAINT
сообщения, поэтому все, что отображается на фоне окна, не является гарантировано.