Вверх ↑
Этот топик читают: Гость
Администрация
Ответов: 15295
Рейтинг: 1519
#16: 2009-04-29 23:33:58 ЛС | профиль | цитата
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 (таймер в него же встроить и не виндовый, а событийный)
карма: 27
0
Ответов: 1304
Рейтинг: 405
#17: 2009-04-30 21:49:01 ЛС | профиль | цитата
Galkov писал(а):
А еще неплохо БЫ сделать рисование, как положено в винде - по WM_PAINT, а не "по таймеру на хэндле".

Является-ли данная схема аналагом сказанного, (как положено в винде - по WM_PAINT) или нет?

Add(MainForm,15261923,122,56)
{
Left=20
Top=105
Width=440
Height=421
Name="Form"
Point(MouseX)
Point(MouseY)
Point(Handle)
Point(onResize)
Point(onPaint)
link(onCreate,16299401:doEvent1,[])
link(onResize,16299401:doEvent2,[])
link(onPaint,6547819:doEvent1,[(173,90)(173,125)])
}
Add(GL_Main,12986311,283,70)
{
link(Handle,6219177:Var1,[(289,51)(92,51)(92,128)])
}
Add(Hub,16299401,185,70)
{
InCount=2
link(onEvent1,12986311:doInit,[])
link(onEvent2,12986311:doViewPort,[])
}
Add(SendMessage,10884884,129,140)
{
Message=11
link(Handle,6219177:Var2,[])
}
Add(Timer,9506849,80,140)
{
Interval=200
link(onTimer,10884884:doSendMessage,[])
}
Add(GetDataEx,6219177,122,119)
{
Angle=1
link(Data,15261923:Handle,[(142,128)])
}
Add(GL_Torus,9790017,227,91)
{
inRadius=0.2
outRadius=0.5
Sides=30
Rings=30
}
Add(Hub,6547819,185,119)
{
link(onEvent1,9790017:doDraw,[(216,125)(216,97)])
link(onEvent2,12986311:doFlip,[(266,132)(266,90)])
}

tsdima писал(а):
Учитывая, что большинство OpenGL программ обновляют окно 50 раз в секунду

А 60 раз в секунду ещё лучше .

карма: 3

0
Администрация
Ответов: 15295
Рейтинг: 1519
#18: 2009-04-30 21:54:58 ЛС | профиль | цитата
является
карма: 27
0
Ответов: 9906
Рейтинг: 351
#19: 2009-05-01 10:05:49 ЛС | профиль | цитата
2MAV, я бы только заметил, что не всякое сообщение винда на самом деле отправляет пользователю, хоть и делает вид что все нормально.
Как говорится "если на клетке со слоном написано ЛЕВ - не верь глазам своим"
Вот так будет более точно:
code_13096.txt

В принципе, это идеологическая разница. То, чего показано, это можно назвать вибростендом для выпускаемого изделия.
Если наше изделие прошло все аналогичные "садистские испытания", то за него можно не беспокоиться - оно будет Работать всю жизнь.
Роль такого "вибростенда" прекрасно выполняет onMouseEnter/Leave в исполнении Кладова. Мне даже это нравится.
Это подход человека привыкшего выпускать Изделия.
Существует иной подход - работает пока, вот и хорошо.
Ну я предложил, убедился что меня поняли, а дальше - делайте как хотите.
карма: 9

0
файлы: 1code_13096.txt [249B] [319]
19
Сообщение
...
Прикрепленные файлы
(файлы не залиты)