case WM_ERASEBKGND: {
RECT rc;
hdc = (HDC)wParam;
GetClientRect(hwnd, &rc);
SetMapMode(hdc, MM_ANISOTROPIC);
SetWindowExtEx(hdc, 100, 100, NULL);
SetViewportExtEx(hdc, rc.right, rc.bottom, NULL);
FillRect(hdc, &rc, CreateSolidBrush(this->background));
return 1L;
}
Что происходит когда return 1L?
Мой метод который обновляет background не работает если заменить return 1L; на break;
bool Window::SetBackground(COLORREF background) {
this->background = background;
InvalidateRect(this->hwnd, NULL, TRUE);
return true;
}
Что такое 1L? в чем разница между return 1L; и break;?
Разница между 1L и break действительно существует, но в вашем случае важнее что происходит после break. Поскольку обработчик WM_ERASEBKGND может возвращать либо FALSE, либо TRUE (что в случае С/С++ означает либо 0, либо ненулевое значение), то очевидно, что после break у вас стоит return 0.
Конкретно return 1L сообщает системе, что ваш обработчик это сообщение обработал (стер фон) и система стирать ничего не должна. Если вы ставите break (то есть выполняете return 0), то вы говорите системе, что ваш обработчик не стал обрабатывать это сообщение, и его должна обработать система (другими словами, стереть все сама - при этом, вероятно, удалив результат вашего обработчика).
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости