Ĺadny brzuch
jak w winapi oprócz pierwszego okna stworzyć durugie, czy trzea cały kod powtórzyć?
jak w winapi oprócz pierwszego okna stworzyć durugie, czy trzea cały kod powtórzyć?
Dać drugie CreateWindow ? :rolleyes:
Zalezy co masz na mysli. Jesli chcesz zrobic okno jak to Twoje glowne, z obsluga komunikatow itp. /a po co okno bez tego, nie?/ to musisz wypelnic rekord TWndClass, zarejestrowac kolejna klase i utworzyc nowe okno przez Createwindow.
Sama funkcja zwraca tylko uchwyt do pustego okna, wiec Antrykot po co Ci gole okno, z ktorego nie mozesz odbierac komunikatow? Tak sie tworzy kontrolki.
Od kiedy w Winapi jest jakies TWndClass? Wcale nie musi rejestrowac nowej klasy:|, moze skorzystac rownie dobrze z tej co juz ma...
Ja bym radził stworzyć okno dialogowe - DialogBox();
Zalezy co masz na mysli. Jesli chcesz zrobic okno jak to Twoje glowne, z obsluga komunikatow itp. /a po co okno bez tego, nie?/ to musisz wypelnic rekord TWndClass, zarejestrowac kolejna klase i utworzyc nowe okno przez Createwindow.
Sama funkcja zwraca tylko uchwyt do pustego okna, wiec Antrykot po co Ci gole okno, z ktorego nie mozesz odbierac komunikatow? Tak sie tworzy kontrolki.
Jestes tego pewien :> ?
Jesli zarejestrujesz sobie klase (mowa to o czystym winapi, a nie VCL, jak sadze :P), to zamiast tworzyc jednego okna, mozesz sobie zrobic ich 10.
Program oczywiscie musi miec pompe komunikatow (msg pomp) i kolejke komunikatow dla tej klasy okna, ale to chyba jest oczywiste.
Użytkownik Antrykot edytował ten post 27 lipiec 2006, 19:29
Od kiedy w Winapi jest jakies TWndClass? Wcale nie musi rejestrowac nowej klasy:|, moze skorzystac rownie dobrze z tej co juz ma... Delphi 7 Personal, plik Windows.pas linie nr. 18 955 oraz 18 984. Nie ma? <_<
Jestes tego pewien :> ?
Jesli zarejestrujesz sobie klase (mowa to o czystym winapi, a nie VCL, jak sadze :P ), to zamiast tworzyc jednego okna, mozesz sobie zrobic ich 10.
Program oczywiscie musi miec pompe komunikatow (msg pomp) i kolejke komunikatow dla tej klasy okna, ale to chyba jest oczywiste. Tak, jestem pewien. Oczywiscie na jednej klasie mozesz zrobic te 10 okien, ale pozniej w jednej funkcji obslugi komunikatow wypadalo by chyba jakos rozpoznawac od ktorego okna pochdzi komunikat zeby wiedziec w ktorym masz zareagowac. Nie prosciej zrobic 10 klas okien i 10 funkcji obslugi?
jak dobrze rozumiem jeżeli sama funckja CreateWindow Wystarczy to lepiej do małych programów jej używać, bo po co rejestrować i pisać, skoro tych kontrolek bedzie mało, i tylko inne ID dam. Co inego jak program będzie troszkę rozbudowany, to zmienia postać rzeczy, wtedy nalepiej każde w osobnym pliku, i tutaj takie pytanie, co robić aby otworzyć takie drugie okno?
Delphi 7 Personal, plik Windows.pas linie nr. 18 955 oraz 18 984. Nie ma? <_<
Tak, jestem pewien. Oczywiscie na jednej klasie mozesz zrobic te 10 okien, ale pozniej w jednej funkcji obslugi komunikatow wypadalo by chyba jakos rozpoznawac od ktorego okna pochdzi komunikat zeby wiedziec w ktorym masz zareagowac. Nie prosciej zrobic 10 klas okien i 10 funkcji obslugi?
A moze od razu dwadziescia funkcji obslugi na jedno oknko :>
Pisales kiedys cos w WinAPI ?
Przecierz standardnowy CALLBACK ma postac WndProc(HWND,UINT,WPARAM,LPARAM);
Wiec dostajesz hwnd Konkretnego okna, wiec reakcja bedzie wlasnie dla tego okna.
Oczywiscie caly czas mowimy o takich samych oknach.
Jezeli zarejestrowales sobie klase Baton, to mozesz stworzyc n takich samych batonow, i nic nie nie pomyli.
Po prostu createwindow, a potem ofcors Showwindow.
A moze od razu dwadziescia funkcji obslugi na jedno oknko :>
Pisales kiedys cos w WinAPI ?
Przecierz standardnowy CALLBACK ma postac WndProc(HWND,UINT,WPARAM,LPARAM);
Wiec dostajesz hwnd Konkretnego okna, wiec reakcja bedzie wlasnie dla tego okna.
Oczywiscie caly czas mowimy o takich samych oknach.
Jezeli zarejestrowales sobie klase Baton, to mozesz stworzyc n takich samych batonow, i nic nie nie pomyli.
Po prostu createwindow, a potem ofcors Showwindow. Tak, pisalem w winapi, przewaznie wtyczki do swojego softu, albo elementy programu niedostepne w VCL badz tez zbytnio obciazajace exe. Nie bede sie rozwodzil, ale moim zdaniem wygodniej i klarowniej jest zrobic sobie do kazdego okna wlasna funkcje.
A ja nie mowie o takich samych oknach, bo zwykle nie robie 20 identycznych okien /pomijajac MDI/ tylko konkretne okno od czegos.
Mysle praktycznie. B)
No oczywiscie, ze roznych okienk nie mozna obslugiwac tym samym callbackiem (tzn da sie, ale po co :P), ale frodo pytal chyba o takie same okna.
Użytkownik Antrykot edytował ten post 27 lipiec 2006, 22:24
frodo
fordo :D
Dam kod przeanalizujesz go sobie sam:
//informacje==================================================================== //przykład do tworzenia 2 okienek dla Sed Dzu... //============================================================================== //dolączone pliki=============================================================== #include <windows.h> //============================================================================== //deklaracje funkcji============================================================ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK WindowProcedure1 (HWND, UINT, WPARAM, LPARAM); //============================================================================== //zmienne globalne============================================================== char szClassName[ ] = "nameofclass1"; char szClassName1 [ ] = "nameofclass2"; char szAppName [ ] = "Jestem okno nr 1"; char szAppName1 [ ] = "Jestem okno nr 2, ha jestem większe"; HWND hwnd, hwnd1, hButton; HINSTANCE hInstance; int SizeX = 200, SizeY = 200; int SizeX2 = 400, SizeY2 = 400; RECT rcDesk; //============================================================================== //program - główna funkcja====================================================== int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { MSG messages; WNDCLASSEX wincl; GetWindowRect(GetDesktopWindow(), &rcDesk); wincl.hInstance = hInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH) CreateSolidBrush(RGB(255, 00, 255));; if (!RegisterClassEx (&wincl)) return 0; wincl.lpszClassName = szClassName1; wincl.lpfnWndProc = WindowProcedure1; wincl.hbrBackground = (HBRUSH) CreateSolidBrush(RGB(255, 255, 00)); if (!RegisterClassEx (&wincl)) return 0; hwnd = CreateWindowEx ( 0, szClassName, szAppName, WS_OVERLAPPEDWINDOW ^ WS_SIZEBOX ^ WS_MAXIMIZEBOX, (rcDesk.right - SizeX) / 2, (rcDesk.bottom - SizeY) / 2, SizeX, SizeY, NULL, NULL, hInstance, NULL ); hwnd1 = CreateWindowEx ( 0, szClassName1, szAppName1, WS_OVERLAPPEDWINDOW ^ WS_SIZEBOX ^ WS_MAXIMIZEBOX, (rcDesk.right - SizeX2) / 2, (rcDesk.bottom - SizeY2) / 2, SizeX2, SizeY2, NULL, NULL, hInstance, NULL ); ShowWindow(hwnd, SW_SHOW); while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } return messages.wParam; } //============================================================================== //procedura okienkowa nr 1====================================================== LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: hButton = CreateWindow("button", "nie klikaj", WS_CHILD | WS_VISIBLE, 10, 10, 100, 20, hwnd, (HMENU) 100, hInstance, 0); break; case WM_COMMAND: switch(wParam) { case 100: ShowWindow(hwnd1, SW_SHOW); break; } break; case WM_CLOSE: if (MessageBox (hwnd, "Czy na pewno zamknąć program?", szAppName, MB_YESNO | MB_ICONQUESTION) == IDYES) { SendMessage(hwnd, WM_DESTROY, 0, 0); } break; case WM_DESTROY: PostQuitMessage (0); break; default: return DefWindowProc (hwnd, message, wParam, lParam); } return 0; } //============================================================================== //procedura okienkowa dla okna nr 2============================================= LRESULT CALLBACK WindowProcedure1 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: break; case WM_CLOSE: if (MessageBox(hwnd, "Czy na pewno chcesz mnie zamknąć?", "EEE", MB_YESNO | MB_ICONQUESTION) == IDYES) { ShowWindow(hwnd, SW_HIDE); } break; break; default: return DefWindowProc (hwnd, message, wParam, lParam); } return 0; } //============================================================================== //koniec========================================================================
Napisał mi to kiedyś Codeguy z winapi.org, i ogólnie polecam tą stronkę jeśli chodzi o API
Czyli w sumie to co ja napisalem; 2 klasy i 2 callback'i.
Czysto, schludnie i wygodnie. B)
http://forum.ks-eksp...showtopic=88762
zaraz ktoś przeniesie, ale....
Czyli w sumie to co ja napisalem; 2 klasy i 2 callback'i.
Czysto, schludnie i wygodnie. B)
Ale rozumiesz roznice, pomiedzy _takie same_, a _rozne_ ?
I co wlasciwie pojazuje ten kod powyzej ?
Przecierz to zwykly hello world w okienku, tyle ze ma 2 okienka.
Użytkownik Antrykot edytował ten post 28 lipiec 2006, 11:39
No chyba oto chodziło... o dwa okna?
Ale rozumiesz roznice, pomiedzy _takie same_, a _rozne_ ?
I co wlasciwie pojazuje ten kod powyzej ?
Przecierz to zwykly hello world w okienku, tyle ze ma 2 okienka. Tak, rozumiem te roznice. Przeciez nie bedzie nikt tu podawal swoich rozbudowanych kodow, tylko po to, zebys Ty widzial ze te okna sa na pewno rozne. Chodzi o sama idee.
Co pokazuje? Ano jak zrobic 2 okienka. To co w temacie.
PS.
Zmien zobie wartosci paru zmiennych i okna beda rozne...
Delphi 7 Personal, plik Windows.pas linie nr. 18 955 oraz 18 984. Nie ma? dry.gif
Nie wiem, nie korzystam z tego. Poza tym w msdn chyba sa najdokladniejsze informacje, a msdn mowi na to: There are no search results to display. Interpretuj to jak chcesz :P.
Za pomoca jednej klasy i jednego callbacka mozna zrobic naprawde rozne okna. Wystarczy sprawdzac uchwyt ktory dostajemy, zrobi nam sie balagan ale nie jest to niemozliwe. Jeden callback jest switny np. do obslugi przyciskow, edit boxow i innych kontrolek. Wydaje mi sie, ze okna rozmowy w komunikatorach tez spokojnie moga wszystkie korzystac z jednego..... :P.
btw, rozne klasy wcale nie oznaczaja roznych callbackow.
Nie wiem, nie korzystam z tego. Poza tym w msdn chyba sa najdokladniejsze informacje, a msdn mowi na to: There are no search results to display. Interpretuj to jak chcesz :P.
Za pomoca jednej klasy i jednego callbacka mozna zrobic naprawde rozne okna. Wystarczy sprawdzac uchwyt ktory dostajemy, zrobi nam sie balagan ale nie jest to niemozliwe. Jeden callback jest switny np. do obslugi przyciskow, edit boxow i innych kontrolek. Wydaje mi sie, ze okna rozmowy w komunikatorach tez spokojnie moga wszystkie korzystac z jednego..... :P.
btw, rozne klasy wcale nie oznaczaja roznych callbackow.
No napisalem sobie jakiś czas temu obiektowego wrapperka do winapi, i miałem tam też obsługe wszystkich okien w jednym callbacku, ale to było bardziej rozbudowane. Trzeba sobie zrobić managerka eventów, do okna przez SetWindowLong zapisać wskaźnik do obiektu klasy okna (klasy w rozumieniu c++, nie WNDCLASS), a potem przez wskaźnik na metode klasy wywoływać je. Działało to całkiem nieźle.
Podobnie robią biblioteki jak VCL, MFC, i inne.
zresztą nie ważne. Już wszystko tu zostało chyba powiedziane :P
Nie wiem, nie korzystam z tego. Poza tym w msdn chyba sa najdokladniejsze informacje, a msdn mowi na to: There are no search results to display. Interpretuj to jak chcesz :P .(...) Nie wiesz zapewne, ze w pascalu obowiazuje niepisana zasada ze nazwy typow danych zaczynaja sie od literki 'T', w c/c++ tego nie ma, wiec moze poszukaj WNDCLASS albo WNDCLASSA. Chcesz, to Ci wysle ten fragmencik w pliku windows.pas, bo caly to ma ponad 1 MB.
Ja nie mowie ze nie mozna robic 20 okien na jednym callbacku, po prostu wygodniej jest miec to rozdzielone, najlepiej tez osobne pliki dla kazdego okna, po prostu latwiej sie poruszac po kodzie, nie masz takiego balaganu.
Jak kto woli, dla mnie najlepszym wyjsciem jest rozdzielanie tego.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
jak w winapi oprócz pierwszego okna stworzyć durugie, czy trzea cały kod powtórzyć?
Dać drugie CreateWindow ? :rolleyes:
Zalezy co masz na mysli. Jesli chcesz zrobic okno jak to Twoje glowne, z obsluga komunikatow itp. /a po co okno bez tego, nie?/ to musisz wypelnic rekord TWndClass, zarejestrowac kolejna klase i utworzyc nowe okno przez Createwindow.
Sama funkcja zwraca tylko uchwyt do pustego okna, wiec Antrykot po co Ci gole okno, z ktorego nie mozesz odbierac komunikatow? Tak sie tworzy kontrolki.
Od kiedy w Winapi jest jakies TWndClass? Wcale nie musi rejestrowac nowej klasy:|, moze skorzystac rownie dobrze z tej co juz ma...
Ja bym radził stworzyć okno dialogowe - DialogBox();
Zalezy co masz na mysli. Jesli chcesz zrobic okno jak to Twoje glowne, z obsluga komunikatow itp. /a po co okno bez tego, nie?/ to musisz wypelnic rekord TWndClass, zarejestrowac kolejna klase i utworzyc nowe okno przez Createwindow.
Sama funkcja zwraca tylko uchwyt do pustego okna, wiec Antrykot po co Ci gole okno, z ktorego nie mozesz odbierac komunikatow? Tak sie tworzy kontrolki.
Jestes tego pewien :> ?
Jesli zarejestrujesz sobie klase (mowa to o czystym winapi, a nie VCL, jak sadze :P), to zamiast tworzyc jednego okna, mozesz sobie zrobic ich 10.
Program oczywiscie musi miec pompe komunikatow (msg pomp) i kolejke komunikatow dla tej klasy okna, ale to chyba jest oczywiste.
Użytkownik Antrykot edytował ten post 27 lipiec 2006, 19:29
Od kiedy w Winapi jest jakies TWndClass? Wcale nie musi rejestrowac nowej klasy:|, moze skorzystac rownie dobrze z tej co juz ma... Delphi 7 Personal, plik Windows.pas linie nr. 18 955 oraz 18 984. Nie ma? <_<
Jestes tego pewien :> ?
Jesli zarejestrujesz sobie klase (mowa to o czystym winapi, a nie VCL, jak sadze :P ), to zamiast tworzyc jednego okna, mozesz sobie zrobic ich 10.
Program oczywiscie musi miec pompe komunikatow (msg pomp) i kolejke komunikatow dla tej klasy okna, ale to chyba jest oczywiste. Tak, jestem pewien. Oczywiscie na jednej klasie mozesz zrobic te 10 okien, ale pozniej w jednej funkcji obslugi komunikatow wypadalo by chyba jakos rozpoznawac od ktorego okna pochdzi komunikat zeby wiedziec w ktorym masz zareagowac. Nie prosciej zrobic 10 klas okien i 10 funkcji obslugi?
jak dobrze rozumiem jeżeli sama funckja CreateWindow Wystarczy to lepiej do małych programów jej używać, bo po co rejestrować i pisać, skoro tych kontrolek bedzie mało, i tylko inne ID dam. Co inego jak program będzie troszkę rozbudowany, to zmienia postać rzeczy, wtedy nalepiej każde w osobnym pliku, i tutaj takie pytanie, co robić aby otworzyć takie drugie okno?
Delphi 7 Personal, plik Windows.pas linie nr. 18 955 oraz 18 984. Nie ma? <_<
Tak, jestem pewien. Oczywiscie na jednej klasie mozesz zrobic te 10 okien, ale pozniej w jednej funkcji obslugi komunikatow wypadalo by chyba jakos rozpoznawac od ktorego okna pochdzi komunikat zeby wiedziec w ktorym masz zareagowac. Nie prosciej zrobic 10 klas okien i 10 funkcji obslugi?
A moze od razu dwadziescia funkcji obslugi na jedno oknko :>
Pisales kiedys cos w WinAPI ?
Przecierz standardnowy CALLBACK ma postac WndProc(HWND,UINT,WPARAM,LPARAM);
Wiec dostajesz hwnd Konkretnego okna, wiec reakcja bedzie wlasnie dla tego okna.
Oczywiscie caly czas mowimy o takich samych oknach.
Jezeli zarejestrowales sobie klase Baton, to mozesz stworzyc n takich samych batonow, i nic nie nie pomyli.
Po prostu createwindow, a potem ofcors Showwindow.
A moze od razu dwadziescia funkcji obslugi na jedno oknko :>
Pisales kiedys cos w WinAPI ?
Przecierz standardnowy CALLBACK ma postac WndProc(HWND,UINT,WPARAM,LPARAM);
Wiec dostajesz hwnd Konkretnego okna, wiec reakcja bedzie wlasnie dla tego okna.
Oczywiscie caly czas mowimy o takich samych oknach.
Jezeli zarejestrowales sobie klase Baton, to mozesz stworzyc n takich samych batonow, i nic nie nie pomyli.
Po prostu createwindow, a potem ofcors Showwindow. Tak, pisalem w winapi, przewaznie wtyczki do swojego softu, albo elementy programu niedostepne w VCL badz tez zbytnio obciazajace exe. Nie bede sie rozwodzil, ale moim zdaniem wygodniej i klarowniej jest zrobic sobie do kazdego okna wlasna funkcje.
A ja nie mowie o takich samych oknach, bo zwykle nie robie 20 identycznych okien /pomijajac MDI/ tylko konkretne okno od czegos.
Mysle praktycznie. B)
No oczywiscie, ze roznych okienk nie mozna obslugiwac tym samym callbackiem (tzn da sie, ale po co :P), ale frodo pytal chyba o takie same okna.
Użytkownik Antrykot edytował ten post 27 lipiec 2006, 22:24
frodo
fordo :D
Dam kod przeanalizujesz go sobie sam:
//informacje==================================================================== //przykład do tworzenia 2 okienek dla Sed Dzu... //============================================================================== //dolączone pliki=============================================================== #include <windows.h> //============================================================================== //deklaracje funkcji============================================================ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK WindowProcedure1 (HWND, UINT, WPARAM, LPARAM); //============================================================================== //zmienne globalne============================================================== char szClassName[ ] = "nameofclass1"; char szClassName1 [ ] = "nameofclass2"; char szAppName [ ] = "Jestem okno nr 1"; char szAppName1 [ ] = "Jestem okno nr 2, ha jestem większe"; HWND hwnd, hwnd1, hButton; HINSTANCE hInstance; int SizeX = 200, SizeY = 200; int SizeX2 = 400, SizeY2 = 400; RECT rcDesk; //============================================================================== //program - główna funkcja====================================================== int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { MSG messages; WNDCLASSEX wincl; GetWindowRect(GetDesktopWindow(), &rcDesk); wincl.hInstance = hInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH) CreateSolidBrush(RGB(255, 00, 255));; if (!RegisterClassEx (&wincl)) return 0; wincl.lpszClassName = szClassName1; wincl.lpfnWndProc = WindowProcedure1; wincl.hbrBackground = (HBRUSH) CreateSolidBrush(RGB(255, 255, 00)); if (!RegisterClassEx (&wincl)) return 0; hwnd = CreateWindowEx ( 0, szClassName, szAppName, WS_OVERLAPPEDWINDOW ^ WS_SIZEBOX ^ WS_MAXIMIZEBOX, (rcDesk.right - SizeX) / 2, (rcDesk.bottom - SizeY) / 2, SizeX, SizeY, NULL, NULL, hInstance, NULL ); hwnd1 = CreateWindowEx ( 0, szClassName1, szAppName1, WS_OVERLAPPEDWINDOW ^ WS_SIZEBOX ^ WS_MAXIMIZEBOX, (rcDesk.right - SizeX2) / 2, (rcDesk.bottom - SizeY2) / 2, SizeX2, SizeY2, NULL, NULL, hInstance, NULL ); ShowWindow(hwnd, SW_SHOW); while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } return messages.wParam; } //============================================================================== //procedura okienkowa nr 1====================================================== LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: hButton = CreateWindow("button", "nie klikaj", WS_CHILD | WS_VISIBLE, 10, 10, 100, 20, hwnd, (HMENU) 100, hInstance, 0); break; case WM_COMMAND: switch(wParam) { case 100: ShowWindow(hwnd1, SW_SHOW); break; } break; case WM_CLOSE: if (MessageBox (hwnd, "Czy na pewno zamknąć program?", szAppName, MB_YESNO | MB_ICONQUESTION) == IDYES) { SendMessage(hwnd, WM_DESTROY, 0, 0); } break; case WM_DESTROY: PostQuitMessage (0); break; default: return DefWindowProc (hwnd, message, wParam, lParam); } return 0; } //============================================================================== //procedura okienkowa dla okna nr 2============================================= LRESULT CALLBACK WindowProcedure1 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: break; case WM_CLOSE: if (MessageBox(hwnd, "Czy na pewno chcesz mnie zamknąć?", "EEE", MB_YESNO | MB_ICONQUESTION) == IDYES) { ShowWindow(hwnd, SW_HIDE); } break; break; default: return DefWindowProc (hwnd, message, wParam, lParam); } return 0; } //============================================================================== //koniec========================================================================
Napisał mi to kiedyś Codeguy z winapi.org, i ogólnie polecam tą stronkę jeśli chodzi o API
Czyli w sumie to co ja napisalem; 2 klasy i 2 callback'i.
Czysto, schludnie i wygodnie. B)
http://forum.ks-eksp...showtopic=88762
zaraz ktoś przeniesie, ale....
Czyli w sumie to co ja napisalem; 2 klasy i 2 callback'i.
Czysto, schludnie i wygodnie. B)
Ale rozumiesz roznice, pomiedzy _takie same_, a _rozne_ ?
I co wlasciwie pojazuje ten kod powyzej ?
Przecierz to zwykly hello world w okienku, tyle ze ma 2 okienka.
Użytkownik Antrykot edytował ten post 28 lipiec 2006, 11:39
No chyba oto chodziło... o dwa okna?
Ale rozumiesz roznice, pomiedzy _takie same_, a _rozne_ ?
I co wlasciwie pojazuje ten kod powyzej ?
Przecierz to zwykly hello world w okienku, tyle ze ma 2 okienka. Tak, rozumiem te roznice. Przeciez nie bedzie nikt tu podawal swoich rozbudowanych kodow, tylko po to, zebys Ty widzial ze te okna sa na pewno rozne. Chodzi o sama idee.
Co pokazuje? Ano jak zrobic 2 okienka. To co w temacie.
PS.
Zmien zobie wartosci paru zmiennych i okna beda rozne...
Delphi 7 Personal, plik Windows.pas linie nr. 18 955 oraz 18 984. Nie ma? dry.gif
Nie wiem, nie korzystam z tego. Poza tym w msdn chyba sa najdokladniejsze informacje, a msdn mowi na to: There are no search results to display. Interpretuj to jak chcesz :P.
Za pomoca jednej klasy i jednego callbacka mozna zrobic naprawde rozne okna. Wystarczy sprawdzac uchwyt ktory dostajemy, zrobi nam sie balagan ale nie jest to niemozliwe. Jeden callback jest switny np. do obslugi przyciskow, edit boxow i innych kontrolek. Wydaje mi sie, ze okna rozmowy w komunikatorach tez spokojnie moga wszystkie korzystac z jednego..... :P.
btw, rozne klasy wcale nie oznaczaja roznych callbackow.
Nie wiem, nie korzystam z tego. Poza tym w msdn chyba sa najdokladniejsze informacje, a msdn mowi na to: There are no search results to display. Interpretuj to jak chcesz :P.
Za pomoca jednej klasy i jednego callbacka mozna zrobic naprawde rozne okna. Wystarczy sprawdzac uchwyt ktory dostajemy, zrobi nam sie balagan ale nie jest to niemozliwe. Jeden callback jest switny np. do obslugi przyciskow, edit boxow i innych kontrolek. Wydaje mi sie, ze okna rozmowy w komunikatorach tez spokojnie moga wszystkie korzystac z jednego..... :P.
btw, rozne klasy wcale nie oznaczaja roznych callbackow.
No napisalem sobie jakiś czas temu obiektowego wrapperka do winapi, i miałem tam też obsługe wszystkich okien w jednym callbacku, ale to było bardziej rozbudowane. Trzeba sobie zrobić managerka eventów, do okna przez SetWindowLong zapisać wskaźnik do obiektu klasy okna (klasy w rozumieniu c++, nie WNDCLASS), a potem przez wskaźnik na metode klasy wywoływać je. Działało to całkiem nieźle.
Podobnie robią biblioteki jak VCL, MFC, i inne.
zresztą nie ważne. Już wszystko tu zostało chyba powiedziane :P
Nie wiem, nie korzystam z tego. Poza tym w msdn chyba sa najdokladniejsze informacje, a msdn mowi na to: There are no search results to display. Interpretuj to jak chcesz :P .(...) Nie wiesz zapewne, ze w pascalu obowiazuje niepisana zasada ze nazwy typow danych zaczynaja sie od literki 'T', w c/c++ tego nie ma, wiec moze poszukaj WNDCLASS albo WNDCLASSA. Chcesz, to Ci wysle ten fragmencik w pliku windows.pas, bo caly to ma ponad 1 MB.
Ja nie mowie ze nie mozna robic 20 okien na jednym callbacku, po prostu wygodniej jest miec to rozdzielone, najlepiej tez osobne pliki dla kazdego okna, po prostu latwiej sie poruszac po kodzie, nie masz takiego balaganu.
Jak kto woli, dla mnie najlepszym wyjsciem jest rozdzielanie tego.