Chimera Napisano Marzec 14, 2019 Autor Zgłoś Udostępnij Napisano Marzec 14, 2019 bardzo prosze o podanie kodu na zmiane tekstu co np. 1 sek. przez TextOut(); Próbuje i mi nie wychodzi :( Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Nemo Napisano Marzec 14, 2019 Zgłoś Udostępnij Napisano Marzec 14, 2019 #define ID_TIMER 1 char szText[32]; //... case WM_CREATE: // Tutaj ustawiamy zegar aby tykal co jedna sekunde SetTimer(hWnd, ID_TIMER, 1000, NULL); // 1000 - to jest jednasekunda //... // Tutaj odbieramy komunikat co jedna sekunde i rysujemy sobie zmieniony text case WM_TIMER: if(Param==ID_TIMER) { // Tutaj sobie zmieniasz w jakis sposob swój text w zmiennej szText hdc = GetDC(hWnd); TextOut(hdc, 0, 0, szText strlen(szText)); ReleaseDC(hWnd, hdc); } //... case WM_DESTROY: // Tutaj niszczymy zegar KillTimer(hWnd, ID_TIMER); //... Inny sposob to np ustawic procedure wzrotna dla tego zegara i bedzie ona wywolywana co okreslony czas - w twoim wypadku co sekunde - i tam mzoesz robic co chcesz - ale o tym poczytaj sobie głębiej w MSDNie. Mozesz takze w komunikacie WM_TIMER tylko zmieniac text i wymuszac odmalwoanie sie okna i w komunikacie WM_PAINT tylko rysujesz napis funkcja TextOut. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Storm Napisano Marzec 14, 2019 Zgłoś Udostępnij Napisano Marzec 14, 2019 Witam! Mam pytanka nawiazujace do tematu. W win98 i Dosie bylo cos takiego jak przerwanie zegarowe generowane od timera. Z tego powodu aplikacje nie moga otrzymywac komunikatu WM_TIMER nie czesciej niz 55ms. W NT ta warosc wynosi 10ms. 1.A jak to jest w 2000/xp/2003 czy to tez jest 10ms? Bo w MSDN-ie pisza o wartosci USER_TIMER_MINIMUM: https://msdn.microsoft.com/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Timers/TimerReference/TimerFunctions/SetTimer.asp Ale ile ona wynosi?Ewentualnie jak to sprawdzic? Jesli bym chcial odmierzyc dokladnie czas w MSDN-ie znalazlem funkcje: QueryPerformanceCounter QueryPerformanceFrequency https://msdn.microsoft.com/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Timers/TimerReference/TimerFunctions/QueryPerformanceFrequency.asp 2.Czy czestotliwosc uzywana w funkcji QueryPerformanceFrequency zalezy od czestotliwosci procesora? Bo gdybym chcial przenies programik na kompa o innej czestotliwosci procka to czy bedzie jakas zmiana w tej czestotliwosci? Dzieki za wszelkie odpowiedzi! Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Nemo Napisano Marzec 14, 2019 Zgłoś Udostępnij Napisano Marzec 14, 2019 win2k i 2003 to sa NTeki wiec chyba maja tez 10ms ale nie mówie to z 100% pewnością. A co do reszty to nie wiem. Mi nawet mój "kompilatorek" VC++6 nie rozpoznaje tego USER_TIMER_MINIMUM. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Storm Napisano Marzec 14, 2019 Zgłoś Udostępnij Napisano Marzec 14, 2019 Dzieki! No wlasnie mnie tez nie. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Randal Napisano Kwiecień 2, 2019 Zgłoś Udostępnij Napisano Kwiecień 2, 2019 Najlepiej do tego wykorzystac osobny watek. Zakladasz taki watek dla obslugi zmiany tekstu w oknie (lub wielu oknach). Faszerujesz go GetTickCount-ami czy RDTSC-ami i wysterowujesz kontrolki bez zadnego bawienia sie w minimialne timery, blokowanie petli komunikatow, czy inne niepozadane zjawiska. Minus taki ze troche sie trzeba napisac, ale plus ze mozna niezle zbajerowac program wysterowujac wiele okien na rozne sposoby. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Randal Napisano Kwiecień 15, 2019 Zgłoś Udostępnij Napisano Kwiecień 15, 2019 To chyba jednak nienajlepsze rozwiazanie. Kazdy, nawet pojedynczy, i nawet najglupszy watek w stylu while(true); powoduje w systemie Win XP prawie 100% obciazenia systemu. Czemu tak jest??? Bo WM_TIMER dziala w tle lagodnie i bez hardcore, z tego wzgledu jest baaaardziej elegancki. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.