miadko Temat założony przez niniejszego użytkownika |
» 2013-01-02 22:02:27 Bo chciałem zrobić program, w którym znajduje się okienko dialogowe, gdzie można wybrać i język programu, i kolor okna. Procedura mojego okna to (do przycisku OK): case ID_BUTTON1: { HWND hCombo = GetDlgItem( hwnd, ID_COMBOBOX1 ); HWND h2Combo = GetDlgItem( hwnd, ID_COMBOBOX2 ); int combo = ComboBox_GetCurSel( hCombo ); int combox = ComboBox_GetCurSel( h2Combo ); if( combo == 0 ) { if( combox == 0 ) EndDialog( hwnd, 700 ); else if( combox == 1 ) EndDialog( hwnd, 701 ); else if( combox == 2 ) EndDialog( hwnd, 702 ); else if( combox == 3 ) EndDialog( hwnd, 703 ); else if( combox == 4 ) EndDialog( hwnd, 704 ); else if( combox == 5 ) EndDialog( hwnd, 705 ); } else if( combo == 1 ) { if( combox == 0 ) EndDialog( hwnd, 900 ); else if( combox == 1 ) EndDialog( hwnd, 901 ); else if( combox == 2 ) EndDialog( hwnd, 902 ); else if( combox == 3 ) EndDialog( hwnd, 903 ); else if( combox == 4 ) EndDialog( hwnd, 904 ); else if( combox == 5 ) EndDialog( hwnd, 905 ); } }; break; Wszystko było już podeklarowane, plik zasobów jest zrobiony. Pod WIN MAIN w funkcji LRESULT CALLBACK napisałem: case WM_PAINT: { if( ret == 0 || ret == 700 || ret == 900 ) standard( hWnd, Ps, hDC ); else if( ret == 701 || ret == 901 ) czerwony( hWnd, Ps, hDC ); } break;
Funkcja standard to: void standard( HWND hWnd, PAINTSTRUCT Ps, HDC hdC ) { hdC = BeginPaint( hWnd, & Ps ); HBRUSH Pedzel1, Pudelko2; HPEN Olowek1, Piornik2; Pedzel1 = CreateSolidBrush( 0xA6EEA2 ); Olowek1 = CreatePen( PS_SOLID, 1, 0x000000 ); Pudelko2 =( HBRUSH ) SelectObject( hdC, Pedzel1 ); Piornik2 =( HPEN ) SelectObject( hdC, Olowek1 ); Rectangle( hdC, - 1, - 1, 431, 500 ); HBRUSH Pedzel4, Pudelko4; HPEN Olowek4, Piornik4; Pedzel4 = CreateSolidBrush( 0x56DF4F ); Olowek4 = CreatePen( PS_SOLID, 1, 0x000000 ); Pudelko4 =( HBRUSH ) SelectObject( hdC, Pedzel4 ); Piornik4 =( HPEN ) SelectObject( hdC, Olowek4 ); Rectangle( hdC, 431, - 1, 800, 500 ); HBRUSH Pedzel3, Pudelko3; HPEN Olowek3, Piornik3; Pedzel3 = CreateSolidBrush( 0xF0F0F0 ); Olowek3 = CreatePen( PS_SOLID, 1, 0x000000 ); Pudelko3 =( HBRUSH ) SelectObject( hdC, Pedzel3 ); Piornik3 =( HPEN ) SelectObject( hdC, Olowek3 ); Rectangle( hdC, 137, 250, 287, 400 ); HBRUSH PedzelZiel, Pudelko; HPEN OlowekCzerw, Piornik; PedzelZiel = CreateSolidBrush( 0x27AE20 ); OlowekCzerw = CreatePen( PS_SOLID, 1, 0x000000 ); Pudelko =( HBRUSH ) SelectObject( hdC, PedzelZiel ); Piornik =( HPEN ) SelectObject( hdC, OlowekCzerw ); Rectangle( hdC, 30, 30, 195, 225 ); SelectObject( hdC, Pudelko ); SelectObject( hdC, Piornik ); DeleteObject( OlowekCzerw ); DeleteObject( PedzelZiel ); HBRUSH PedzelNieb, Pudelko1; HPEN OlowekCzarny, Piornik1; PedzelNieb = CreateSolidBrush( 0x27AE20 ); OlowekCzarny = CreatePen( PS_SOLID, 1, 0x000000 ); Pudelko1 =( HBRUSH ) SelectObject( hdC, PedzelNieb ); Piornik1 =( HPEN ) SelectObject( hdC, OlowekCzarny ); Rectangle( hdC, 230, 30, 395, 225 ); POINT stary; MoveToEx( hdC, 187, 250, & stary ); LineTo( hdC, 187, 400 ); MoveToEx( hdC, 237, 250, & stary ); LineTo( hdC, 237, 400 ); MoveToEx( hdC, 137, 250, & stary ); LineTo( hdC, 137, 400 ); MoveToEx( hdC, 287, 250, & stary ); LineTo( hdC, 287, 400 ); MoveToEx( hdC, 288, 251, & stary ); LineTo( hdC, 288, 401 ); MoveToEx( hdC, 289, 252, & stary ); LineTo( hdC, 289, 402 ); MoveToEx( hdC, 137, 250, & stary ); LineTo( hdC, 287, 250 ); MoveToEx( hdC, 137, 300, & stary ); LineTo( hdC, 287, 300 ); MoveToEx( hdC, 137, 350, & stary ); LineTo( hdC, 287, 350 ); MoveToEx( hdC, 137, 400, & stary ); LineTo( hdC, 288, 400 ); MoveToEx( hdC, 138, 401, & stary ); LineTo( hdC, 289, 401 ); MoveToEx( hdC, 139, 402, & stary ); LineTo( hdC, 290, 402 ); MoveToEx( hdC, 430, 25, & stary ); LineTo( hdC, 430, 425 ); MoveToEx( hdC, 430, 416, & stary ); LineTo( hdC, 730, 416 ); MoveToEx( hdC, 430, 415, & stary ); LineTo( hdC, 730, 415 ); MoveToEx( hdC, 430, 32, & stary ); LineTo( hdC, 730, 32 ); MoveToEx( hdC, 430, 33, & stary ); LineTo( hdC, 730, 33 ); MoveToEx( hdC, 31, 225, & stary ); LineTo( hdC, 196, 225 ); MoveToEx( hdC, 32, 226, & stary ); LineTo( hdC, 197, 226 ); MoveToEx( hdC, 231, 225, & stary ); LineTo( hdC, 396, 225 ); MoveToEx( hdC, 232, 226, & stary ); LineTo( hdC, 397, 226 ); MoveToEx( hdC, 195, 31, & stary ); LineTo( hdC, 195, 226 ); MoveToEx( hdC, 196, 32, & stary ); LineTo( hdC, 196, 227 ); MoveToEx( hdC, 395, 31, & stary ); LineTo( hdC, 395, 226 ); MoveToEx( hdC, 396, 32, & stary ); LineTo( hdC, 396, 227 ); EndPaint( hWnd, & Ps ); EndPaint( hWnd, & Ps ); }
a funkcja czerwony to: void czerwony( HWND hWnd, PAINTSTRUCT Ps, HDC hdC ) { hdC = BeginPaint( hWnd, & Ps ); HBRUSH Pedzel1, Pudelko2; HPEN Olowek1, Piornik2; Pedzel1 = CreateSolidBrush( 0x7282F3 ); Olowek1 = CreatePen( PS_SOLID, 1, 0x000000 ); Pudelko2 =( HBRUSH ) SelectObject( hdC, Pedzel1 ); Piornik2 =( HPEN ) SelectObject( hdC, Olowek1 ); Rectangle( hdC, - 1, - 1, 431, 500 ); HBRUSH Pedzel4, Pudelko4; HPEN Olowek4, Piornik4; Pedzel4 = CreateSolidBrush( 0x241CED ); Olowek4 = CreatePen( PS_SOLID, 1, 0x000000 ); Pudelko4 =( HBRUSH ) SelectObject( hdC, Pedzel4 ); Piornik4 =( HPEN ) SelectObject( hdC, Olowek4 ); Rectangle( hdC, 431, - 1, 800, 500 ); HBRUSH Pedzel3, Pudelko3; HPEN Olowek3, Piornik3; Pedzel3 = CreateSolidBrush( 0xF0F0F0 ); Olowek3 = CreatePen( PS_SOLID, 1, 0x000000 ); Pudelko3 =( HBRUSH ) SelectObject( hdC, Pedzel3 ); Piornik3 =( HPEN ) SelectObject( hdC, Olowek3 ); Rectangle( hdC, 137, 250, 287, 400 ); HBRUSH PedzelZiel, Pudelko; HPEN OlowekCzerw, Piornik; PedzelZiel = CreateSolidBrush( 0x241CED ); OlowekCzerw = CreatePen( PS_SOLID, 1, 0x000000 ); Pudelko =( HBRUSH ) SelectObject( hdC, PedzelZiel ); Piornik =( HPEN ) SelectObject( hdC, OlowekCzerw ); Rectangle( hdC, 30, 30, 195, 225 ); SelectObject( hdC, Pudelko ); SelectObject( hdC, Piornik ); DeleteObject( OlowekCzerw ); DeleteObject( PedzelZiel ); HBRUSH PedzelNieb, Pudelko1; HPEN OlowekCzarny, Piornik1; PedzelNieb = CreateSolidBrush( 0x241CED ); OlowekCzarny = CreatePen( PS_SOLID, 1, 0x000000 ); Pudelko1 =( HBRUSH ) SelectObject( hdC, PedzelNieb ); Piornik1 =( HPEN ) SelectObject( hdC, OlowekCzarny ); Rectangle( hdC, 230, 30, 395, 225 ); POINT stary; MoveToEx( hdC, 187, 250, & stary ); LineTo( hdC, 187, 400 ); MoveToEx( hdC, 237, 250, & stary ); LineTo( hdC, 237, 400 ); MoveToEx( hdC, 137, 250, & stary ); LineTo( hdC, 137, 400 ); MoveToEx( hdC, 287, 250, & stary ); LineTo( hdC, 287, 400 ); MoveToEx( hdC, 288, 251, & stary ); LineTo( hdC, 288, 401 ); MoveToEx( hdC, 289, 252, & stary ); LineTo( hdC, 289, 402 ); MoveToEx( hdC, 137, 250, & stary ); LineTo( hdC, 287, 250 ); MoveToEx( hdC, 137, 300, & stary ); LineTo( hdC, 287, 300 ); MoveToEx( hdC, 137, 350, & stary ); LineTo( hdC, 287, 350 ); MoveToEx( hdC, 137, 400, & stary ); LineTo( hdC, 288, 400 ); MoveToEx( hdC, 138, 401, & stary ); LineTo( hdC, 289, 401 ); MoveToEx( hdC, 139, 402, & stary ); LineTo( hdC, 290, 402 ); MoveToEx( hdC, 430, 25, & stary ); LineTo( hdC, 430, 425 ); MoveToEx( hdC, 430, 416, & stary ); LineTo( hdC, 730, 416 ); MoveToEx( hdC, 430, 415, & stary ); LineTo( hdC, 730, 415 ); MoveToEx( hdC, 430, 32, & stary ); LineTo( hdC, 730, 32 ); MoveToEx( hdC, 430, 33, & stary ); LineTo( hdC, 730, 33 ); MoveToEx( hdC, 31, 225, & stary ); LineTo( hdC, 196, 225 ); MoveToEx( hdC, 32, 226, & stary ); LineTo( hdC, 197, 226 ); MoveToEx( hdC, 231, 225, & stary ); LineTo( hdC, 396, 225 ); MoveToEx( hdC, 232, 226, & stary ); LineTo( hdC, 397, 226 ); MoveToEx( hdC, 195, 31, & stary ); LineTo( hdC, 195, 226 ); MoveToEx( hdC, 196, 32, & stary ); LineTo( hdC, 196, 227 ); MoveToEx( hdC, 395, 31, & stary ); LineTo( hdC, 395, 226 ); MoveToEx( hdC, 396, 32, & stary ); LineTo( hdC, 396, 227 ); EndPaint( hWnd, & Ps ); } Problem mam jednak taki, że kiedy okienko zwróci 701 lub 901, nie robi się czerwono... i nie mogę własnie dojść co robię źle. Dlatego spytałem się o funkcję czyszczącą, bo może moje pierwotne malowidła wadzą, ale jak stwierdziłeś, że zamaluj czymkolwiek, to spróbowałem zamalować to co narysowałem w funkcji standard tym co narysowałem w funkcji czerwony. combo odnosi się do comboboxa z wyborem języka, a combox do wyboru kolorku. Sprawdziłem na innym okienku, do którego wkleiłem od razu do WM_PAINT procedurę na malowanie w odcieniach zielonych i procedurę na malowanie na czerwono i one normalnie działają, tak jak to zrobiłem coś niedostyka... Z góry dzięki za podpowiedź, gdzie popełniam błąd. |