Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, WinAPI] Zmiana koloru czcionki

Ostatnio zmodyfikowano 2012-12-09 20:57
Autor Wiadomość
miadko
Temat założony przez niniejszego użytkownika
[C++, WinAPI] Zmiana koloru czcionki
» 2012-12-07 17:28:33
Witajcie

Chciałbym zmienic kolor czcionki wpisanego tekstu w kontrolce STATIC. Wiem, że robi się to przy pomocy SetTextColor function, ja jednak chciałbym, aby np. dopiero po naciśnięciu jakiegoś przycisku zmieniał się kolor. Wtedy musiałbym wstawić instrukcję do CASE WM_COMMAND. Ćwicząc sobie różne rzeczy ostatnio wszystkie zmiany w kontrolkach po naciśnięciu jakiegokolwiek przycisku dokonywałem przy pomocy funkcji czytających identyfikator kontrolki.

A funckja SetTextColor nie przyjmuje takiego argumentu jak identyfikator kontrolki.
Miałbym pytanie: czy istnieje alternatywna funkcja do SetTextColor (czyli tak samo zmieniająca tekst kontrolki), ale dokonującego tego przy pomocy identyfikatora kontrolki?

Czy moze coś pokręciłem i to własnie tej funkcji nalezy użyć, a za argument HDC podać coś innego z tej kontrolki ?;)

Jakby było potrzebne, to moja kontrolka to:
C/C++
HWND h2Static = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, 253, 300, 255, 137, hwnd,( HMENU ) ID_HSTATIC2, hInstance, NULL );
SetWindowText( h2Static, "Kontrolka" );

Na początku wstawiłem
#define ID_HSTATIC2 3100

Dzięki za pomoc
P-70489
Mrovqa
» 2012-12-07 19:06:30
P-70493
miadko
Temat założony przez niniejszego użytkownika
» 2012-12-07 20:44:09
Mrowqa, dziękuję bardzo za link (nawet nie wiesz jak bardzo), jednak ja go przeczytałem o raz dłużej niż nieskończoność, zwłaszcza że do niego odwołanie jest (nawet nie odwołanie a źródło podane) w kursie WINAPI na tej stronie, chyba lekcja 41, czy jakoś tak... :P
Zastosowałem się do tej strony i wszystko jest ok, bo umieściłem w:
LRESULT CALLBACK WndProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
to coś:

C/C++
case WM_CTLCOLORSTATIC:
{
    HWND h2Static = GetDlgItem( hWnd, 3100 ); EnableWindow( h2Static, TRUE );
    HWND hCtl =( HWND ) lParam;
    HDC hDC =( HDC ) wParam;
    HBRUSH g_hBrush = CreateSolidBrush( RGB( 240, 240, 240 ) );
    if( hCtl == h2Static )
    {
        SetBkMode( hDC, TRANSPARENT );
        SetTextColor( hDC, RGB( 0, 178, 178 ) );
        return( LRESULT ) g_hBrush;
    }
    return( LRESULT ) SetTextColor;
}

i z resztą kodu mojego porgramu ładnie się kompiluje i na ekranie wyświetla mi się ładny błękitnawy napisik. Jednak ja chcę na początku czarny (kasuję case WM_CTLCOLORSTATIC: ) , a dopiero po naciśnięciu przycisku błękitny, czyli po linijce:
LRESULT CALLBACK WndProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
wstawić:

C/C++
case WM_COMMAND:
{
    switch( wParam )
    {
    case ID_PRZYCISK1:
        {
            // TU PRÓBUJĘ WKLEPAĆ KOMENDĘ NA ZMIANE KOLORU
        }
    }
}; break;

i żeby do nacisnięciu kontrolki-przycisku opatrzonej identyfikatorem ID_PRZYCISK1 tekst z czarnego robił się niebieski. Spróbowałem:
1) Wkleić case WM_CTLCOLORSTATIC: do case ID_PRZYCISK1: (nie kompilowało się, po za tym to chyba zdecydowanie nie tak...
2) Stworzyć nowy switch(Msg) i do niego wkleić  WM_CTLCOLORSTATIC: w case ID_PRZYCISK1: (kompliowało się, ale przycisk nie zmieniał koloru...

Dlatego też pojawiło się moje pytanie, jaką to trzeba funkcją zrobić, żeby kolorek zmieniał się dopiero po naciśnięciu określonego w kodzie programu przycisku oraz czy coś trzeba poprzestawiać w LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) żeby osiągnąć zamierzony efekt, czy może trzeba to zrobić zupełnie inaczej, przy użyciu zupełnie innej funkcji.

Dzięki wielkie za podpowiedź :)
P-70495
miadko
Temat założony przez niniejszego użytkownika
» 2012-12-09 20:57:57
Nikt nie potrafi pomóc? :(
P-70668
« 1 »
  Strona 1 z 1