Hipochondryk Temat założony przez niniejszego użytkownika |
[WinApi] Wygaszacz ekranu, WM_TIMER » 2014-06-24 10:35:58 Witam, mam taką funkcję do obsługi wygaszacza : LONG WINAPI ScreenSaverProc( HWND okno, UINT komunikat, WPARAM wParam, LPARAM lParam ) { HDC kon; switch( komunikat ) { case WM_CREATE: GetCfgPath(); GetConfig(); SetTimer( okno, 100, 500, NULL ); break; case WM_TIMER: { if( WM_PAINT ) { HFONT hFont, hFont1, hFont2, hFont3, hFont4, hFont5, hFont6; hFont = CreateFont( text1.getsize(), 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); hFont1 = CreateFont( text2.getsize(), 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); hFont2 = CreateFont( text3.getsize(), 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); hFont3 = CreateFont( text4.getsize(), 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); hFont4 = CreateFont( text5.getsize(), 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); hFont5 = CreateFont( 20, 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); hFont6 = CreateFont( 15, 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); kon = GetDC( okno ); string timeinfo; time_t czas; struct tm * ptr; time( & czas ); ptr = localtime( & czas ); timeinfo = intToStr( ptr->tm_hour ); timeinfo += ":"; timeinfo += intToStr( ptr->tm_min ); timeinfo += ":"; timeinfo += intToStr( ptr->tm_sec ); kon = BeginPaint( okno, & ps ); SetTextColor( kon, RGB( text1.fontcolorR, text1.fontcolorG, text1.fontcolorB ) ); SetBkColor( kon, RGB( text1.BfontcolorR, text1.BfontcolorG, text1.BfontcolorB ) ); SelectObject( kon, hFont ); TextOut( kon, 25, 25, text1.info.c_str(), text1.info.length() ); SetTextColor( kon, RGB( text2.fontcolorR, text2.fontcolorG, text2.fontcolorB ) ); SetBkColor( kon, RGB( text2.BfontcolorR, text2.BfontcolorG, text2.BfontcolorB ) ); SelectObject( kon, hFont1 ); TextOut( kon, 25, 125, text2.info.c_str(), text2.info.length() ); SetTextColor( kon, RGB( text3.fontcolorR, text3.fontcolorG, text3.fontcolorB ) ); SetBkColor( kon, RGB( text3.BfontcolorR, text3.BfontcolorG, text3.BfontcolorB ) ); SelectObject( kon, hFont2 ); TextOut( kon, 25, 250, text3.info.c_str(), text3.info.length() ); SetTextColor( kon, RGB( text4.fontcolorR, text4.fontcolorG, text4.fontcolorB ) ); SetBkColor( kon, RGB( text4.BfontcolorR, text4.BfontcolorG, text4.BfontcolorB ) ); SelectObject( kon, hFont3 ); TextOut( kon, 25, 375, text4.info.c_str(), text4.info.length() ); SetTextColor( kon, RGB( text5.fontcolorR, text5.fontcolorG, text5.fontcolorB ) ); SetBkColor( kon, RGB( text5.BfontcolorR, text5.BfontcolorG, text5.BfontcolorB ) ); SelectObject( kon, hFont4 ); TextOut( kon, 25, 500, text5.info.c_str(), text5.info.length() ); SetTextColor( kon, RGB( 200, 10, 10 ) ); SetBkColor( kon, RGB( 0, 0, 0 ) ); SelectObject( kon, hFont5 ); TextOut( kon, 700, 575, timeinfo.c_str(), timeinfo.length() ); SetTextColor( kon, RGB( 50, 50, 50 ) ); SetBkColor( kon, RGB( 0, 0, 0 ) ); SelectObject( kon, hFont6 ); TextOut( kon, 550, 580, "© by Artur Lisowski 2014", 24 ); ReleaseDC( okno, kon ); EndPaint( okno, & ps ); DeleteObject( hFont ); DeleteObject( hFont1 ); DeleteObject( hFont2 ); DeleteObject( hFont3 ); DeleteObject( hFont4 ); DeleteObject( hFont5 ); DeleteObject( hFont6 ); } break; } case WM_DESTROY: KillTimer( okno, 100 ); break; } return DefScreenSaverProc( okno, komunikat, wParam, lParam ); }
I problem mam taki , że timer nie generuje mi komunikatów WM_TIMER związku z czym nie jest nic wyświetlane na oknie, a potrzebuję odświeżania w celu wyświetlania aktualnej godziny. Jeśli pominę komunikat WM_TIMER i zajmę się tylko WM_PAINT to wtedy tekst jest wyswietlany ale nie odświeżany. Gdzie popełniłem błąd? Z góry dziękuję za pomoc. |
|
maly |
» 2014-06-24 11:47:12 |
|
Hipochondryk Temat założony przez niniejszego użytkownika |
» 2014-06-24 12:57:44 zmodyfikowałem kod LONG WINAPI ScreenSaverProc( HWND okno, UINT komunikat, WPARAM wParam, LPARAM lParam ) { HDC kon; string timeinfo = "12:00"; time_t czas; struct tm * ptr; switch( komunikat ) { case WM_CREATE: GetCfgPath(); GetConfig(); if( SetTimer( okno, 100, 500, NULL ) == 0 ) MessageBox( okno, "Nie można utworzyć timera!", "Kurde", MB_ICONSTOP ); break; case WM_TIMER: { switch( wParam ) { case 100: { time( & czas ); ptr = localtime( & czas ); timeinfo = intToStr( ptr->tm_hour ); timeinfo += ":"; timeinfo += intToStr( ptr->tm_min ); timeinfo += ":"; timeinfo += intToStr( ptr->tm_sec ); break; } } } case WM_PAINT: { HFONT hFont, hFont1, hFont2, hFont3, hFont4, hFont5, hFont6; hFont = CreateFont( text1.getsize(), 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); hFont1 = CreateFont( text2.getsize(), 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); hFont2 = CreateFont( text3.getsize(), 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); hFont3 = CreateFont( text4.getsize(), 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); hFont4 = CreateFont( text5.getsize(), 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); hFont5 = CreateFont( 20, 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); hFont6 = CreateFont( 15, 0, 0, 10, 0, 0, 0, 0, EASTEUROPE_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 0 ); kon = BeginPaint( okno, & ps ); SetTextColor( kon, RGB( text1.fontcolorR, text1.fontcolorG, text1.fontcolorB ) ); SetBkColor( kon, RGB( text1.BfontcolorR, text1.BfontcolorG, text1.BfontcolorB ) ); SelectObject( kon, hFont ); TextOut( kon, 25, 25, text1.info.c_str(), text1.info.length() ); SetTextColor( kon, RGB( text2.fontcolorR, text2.fontcolorG, text2.fontcolorB ) ); SetBkColor( kon, RGB( text2.BfontcolorR, text2.BfontcolorG, text2.BfontcolorB ) ); SelectObject( kon, hFont1 ); TextOut( kon, 25, 125, text2.info.c_str(), text2.info.length() ); SetTextColor( kon, RGB( text3.fontcolorR, text3.fontcolorG, text3.fontcolorB ) ); SetBkColor( kon, RGB( text3.BfontcolorR, text3.BfontcolorG, text3.BfontcolorB ) ); SelectObject( kon, hFont2 ); TextOut( kon, 25, 250, text3.info.c_str(), text3.info.length() ); SetTextColor( kon, RGB( text4.fontcolorR, text4.fontcolorG, text4.fontcolorB ) ); SetBkColor( kon, RGB( text4.BfontcolorR, text4.BfontcolorG, text4.BfontcolorB ) ); SelectObject( kon, hFont3 ); TextOut( kon, 25, 375, text4.info.c_str(), text4.info.length() ); SetTextColor( kon, RGB( text5.fontcolorR, text5.fontcolorG, text5.fontcolorB ) ); SetBkColor( kon, RGB( text5.BfontcolorR, text5.BfontcolorG, text5.BfontcolorB ) ); SelectObject( kon, hFont4 ); TextOut( kon, 25, 500, text5.info.c_str(), text5.info.length() ); SetTextColor( kon, RGB( 200, 10, 10 ) ); SetBkColor( kon, RGB( 0, 0, 0 ) ); SelectObject( kon, hFont5 ); TextOut( kon, 700, 575, timeinfo.c_str(), timeinfo.length() ); SetTextColor( kon, RGB( 50, 50, 50 ) ); SetBkColor( kon, RGB( 0, 0, 0 ) ); SelectObject( kon, hFont6 ); TextOut( kon, 550, 580, "© by Artur Lisowski 2014", 24 ); EndPaint( okno, & ps ); DeleteObject( hFont ); DeleteObject( hFont1 ); DeleteObject( hFont2 ); DeleteObject( hFont3 ); DeleteObject( hFont4 ); DeleteObject( hFont5 ); DeleteObject( hFont6 ); break; } case WM_DESTROY: KillTimer( okno, 100 ); break; } return DefScreenSaverProc( okno, komunikat, wParam, lParam ); }
ale nadal godzina nie jest aktualizowana natomiast mesagebox jest wyświetlany co zadany czas. Co nadal jest nie tak ? |
|
maly |
» 2014-06-24 13:14:18 string timeinfo przy każdym zdarzeniu tworzy się na nowo. |
|
Hipochondryk Temat założony przez niniejszego użytkownika |
» 2014-06-24 13:24:10 Racja, dziękuję za pomoc, jeszcze kilka poprawek dodałem i program działa wg oczekiwań. Dziękuję Ci jeszcze raz za pomoc. Pozdrawiam. |
|
« 1 » |