tsdima писал(а):
Ну да, если указать WS_EX_TRANSPARENTпроверил - у нас WM_ERASEBKGND приходит вообще всегда и по барабану ему какие либо флаги...
еще в коде формы стоят вот такие интересные строки
#pas
WM_ERASEBKGND:
if not Bitmap.Empty then begin
Result := true;
Rslt := 1;
end;
Galkov писал(а):
Какие есть варианты:
1) Если изменить эту постановку, то будут проблемы совместимости.
2) Можно делать хук через Set/GetWindowLong. Тогда, на какое сообщение садиться, или на оба - просто мелкие технические подробности.
3) Можно ничего не делать.
вариант 4 делать так, как в примере выше (code 13063). Именно такую реализацию можно встретить в большинстве примеров http://netcode.ru/dotnet/?lang=&katID=30&skatID=263&artID=7210
- WM_ERASEBKGND - перекрыт и не обрабатывается
- WM_PAINT используется для флипания сцены с дескрипром, созданным по Handle окна
------------ Дoбавленo в 23.40:
tsdima писал(а):
Учитывая, что большинство OpenGL программ обновляют окно 50 раз в секундуя бы еще добавил - учитывая то, в стандартном пакете делать игры невозможно и OpenGL применим для схем демонстрационного характера, то заморачивать пользователя такими тонкостями смысла нет.
Пока писал, вспомнил про QT. Там работу с OpenGL реализовали просто - завели свой констрол, в котором живет вся обсуждаемая тут кухня, а для пользователя вывели только событие onPaint, где он сразу может вставлять вызовы графического API. И никаких проблем. Нам надо делать точно так же, а не мудрить с внешними элементами и совместимостью. Т.е. предоставить один единственный элемент - OpenGLControl с точкой onDrawScene (таймер в него же встроить и не виндовый, а событийный)