Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];

Вниз

2 окна - отлов событий на втором окне   Найти похожие ветки 

 
Velocity   (2003-01-14 12:30) [0]

Народ, помогите плиз, вопрос туповат - но сам не могу разобраться. В общем создаю средствами винапи окно, назначаю ему обработчик событий мышиных и т.д. Потом создаю 2 окно (поверх 1-го и меньше размерами) - и не могу отловить допустим клик мышкой над этим вторым окном. Пытался влепить на это второе окно и отдельный обработчик (не работает) и назначить уже имеющийся - ну в общем полный бред получается, окно не реагирует ни на что. Может есть у кого простенький примерчик? Знаю, вопрос смешной да и уже кажется обсуждался - но найти никак не могу. Помогите, очень надо.


 
Cobalt   (2003-01-14 12:49) [1]

Код в Студио!
>поверх 1-го и меньше размерами
? StayOnTop?
Конечно надо назначить второй обработчик. А КЛАСС ты для него зарегестрировал?


 
Velocity   (2003-01-14 16:46) [2]

>Cobalt
Класс окна зарегистрировал, там ставится один параметр - адрес обработчика. ставлю на отдельную процедуру (как для главного окна, похожая). не работает. второе окно кидаю с флагом WS_EX_TOPMOST - это то что надо?

Вообще лучше всего примерчик. Народ ну у кого есть? Подкиньте


 
Cobalt   (2003-01-14 21:12) [3]

Лучше, все-таки, свой примерчик выложи - тебе объяснят на пальцах, где у тебя ошибки.


 
Diamond Cat   (2003-01-15 03:08) [4]

попробуй его setactivewindow , если я правильно помню , то WS_EX_TOPMOST это положить поверх всех но не активировать


 
Velocity   (2003-01-16 16:12) [5]

Ок, код - так код. Вот он, болезный...

program OpenGLViewer;
uses Windows, Messages, OpenGL;

{$R cursors.res}

var
wClass:TWndClass;
Window,SetupWindow:HWND;
hInstance:HINST;
PixelFormat:GLUINT;
pfd:TPIXELFORMATDESCRIPTOR;
DC:HDC;
RC:HGLRC;
msg:TMsg;
x_pos,y_pos,rotate_x_pos,rotate_y_pos,scale_y_variable:Integer;
State:TState;
aCursors:HCURSOR;

function WinProc(hWnd,msg,wParam,lParam:LongInt):Integer;stdcall;
begin
result:=DefWindowProc(hWnd,msg,wParam,lParam);

if ((msg=WM_KEYDOWN) and (wParam=VK_ESCAPE)) or (msg=WM_DESTROY) then begin
wglDeleteContext(RC);
Halt;
end;
if msg=WM_RBUTTONDOWN then begin
ShowWindow(SetupWindow,SW_SHOW);
SetActiveWindow(SetupWindow);
SetFocus(SetupWindow);
end;
end;

function SetupWinProc(hWnd,msg,wParam,lParam:LongInt):Integer;stdcall;
begin
result:=DefWindowProc(hWnd,msg,wParam,lParam);
if msg=WM_RBUTTONDOWN then begin
ShowWindow(SetupWindow,SW_HIDE);
end;
end;

//------------------------------------------------------

begin
hInstance:=GetModuleHandle(nil);
ZeroMemory(@wClass,SizeOf(wClass));
with wClass do begin
lpfnWndProc:=@WinProc;
style:=CS_HREDRAW or CS_VREDRAW or CS_OWNDC;
hbrBackground:=COLOR_BTNFACE;
lpszClassName:="GL_Engine";
hInstance:=hInstance;
hCursor:=LoadCursor(0,IDC_ARROW);
hIcon:=0;
end;
if RegisterClass(wClass)=0 then begin
MessageBox(0,"Сбой регистрации класса окна","Ошибка",MB_ICONERROR);
Halt;
end;
Window:=CreateWindowEx(0,"GL_Engine","OpenGL-Viewer",WS_POPUP or WS_VISIBLE,0,0,
GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),
0,0,hInstance,nil);
if Window=0 then begin
MessageBox(0,"Сбой при создании окна","Ошибка",MB_ICONERROR);
Halt;
end;
//создаём второе окно
ZeroMemory(@wClass,SizeOf(wClass));
with wClass do begin
lpfnWndProc:=@SetupWinProc;
style:=CS_HREDRAW or CS_VREDRAW;
hbrBackground:=COLOR_WINDOW;
lpszClassName:="Setup";
hCursor:=LoadCursor(0,IDC_ARROW);
hIcon:=0;
end;
if RegisterClass(wClass)=0 then begin
MessageBox(0,"Сбой регистрации класса окна","Ошибка",MB_ICONERROR);
Halt;
end;
SetupWindow:=CreateWindowEx(WS_EX_TOPMOST,"Setup","Setup",WS_POPUP or WS_SYSMENU or WS_CAPTION,100,100,
320,240,Window,0,0,nil);

UpdateWindow(Window);

while GetMessage(Msg,Window,0,0)=true do begin
TranslateMessage(msg);
DispatchMessage(msg);
end;

end.

конечно многое (лишнее) порезано.



 
Velocity   (2003-01-16 18:44) [6]

апну, мож кто подскажет...


 
Cobalt   (2003-01-16 19:07) [7]

Может, проблема с OpenGL?
И, еще - попробуй result:=DefWindowProc(hWnd,msg,wParam,lParam); ставить в конце обработчика... (типа, традиция)


 
Velocity   (2003-01-17 18:48) [8]

гм. такого не пробовал. сенькс, попробую, может и будет результат.


 
Nick_N_A   (2003-01-18 05:34) [9]

Ой-Ой-Ой сколько кода!

Самый эффективный способ отлова далее:

programm ...
Uses ... ... , Windows;

Var Msg: tagMsg;

Begin
Application.Initialize;
Form1:=TForm1.Create;
Form2:=TForm2.Create;
...
Form1.Show;
while Form1.Visible do Begin
GetMessage(Msg,0,0,0);
// здесь вы получаете абсолютно все сообщения, касающиеся
// Application к которому привязаны Form-ы VCL
Case Msg.msg of


end;

TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.


 
Velocity   (2003-01-20 05:32) [10]

Перенос DefWindowProc видимого result"а не дал...
>Nick_N_A
Огроменное спасибо! Может и заработает наконец-то.


 
Nick_N_A   (2003-01-21 06:46) [11]

Коды сообщений в модуле Messages
WM_MOUSEMOVE
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
WM_RBUTTONDOWN
WM_RBUTTONUP
почитай на них хелп делфи
т.е. Case Msg.Msg of WM_LBUTTONUP:do_some ; end;
см также TWMMouse,



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
14-30075
DX_com
2003-02-21 18:34
2003.03.10
Фиг знает....


14-30072
Vass
2003-02-21 15:17
2003.03.10
Как Читать виндовую адресную книгу из дельфи 3


1-29791
kat
2003-02-26 14:37
2003.03.10
Освобождение памяти


1-29882
NightPrivat
2003-02-26 08:16
2003.03.10
Как связать дельфу и WinRar


14-30018
Amit
2003-02-24 10:03
2003.03.10
It s cool! Верно...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский