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
), то вы говорите системе, что ваш обработчик не стал обрабатывать это сообщение, и его должна обработать система (другими словами, стереть все сама - при этом, вероятно, удалив результат вашего обработчика).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Изучаю JavaВ литературе и на многих ресурсах пишется, что использование буферезированного ввода данных является наиболее эффективным, с точки...
Ребята, не могу понять, почему падает приложение, помогите разобраться В задумке: оно должно выполнять два разных сценария в зависимости...
Элемент Listview не реагирует на длительное нажатие и не вызывается контекстное меню