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

[WinAPI] Brak rysowania tła

Ostatnio zmodyfikowano 2012-12-29 11:24
Autor Wiadomość
gylopl
Temat założony przez niniejszego użytkownika
[WinAPI] Brak rysowania tła
» 2012-12-29 11:08:32
Witam, chcialem sobie zrobic tlo w moim programie, wydaje mi sie ze wszystko zrobilem jak najbardziej ok, jednak nie chce sie wyswietlac tlo.
jednak gdy dodam zaraz po case WM_PAINT:{ messageboxa to tlo sie pojawia, chcialem po prostu zobaczyc czy wchodzi do tego case.

moglby ktos poprawic zeby dobrze kolorowalo skladnie? linie 37,73,205

C/C++
#include <windows.h>
#include <Windowsx.h>
#include <commctrl.h>
#include <wchar.h>
#include <locale.h>
#include <time.h>
#include <c:\Program Files\MySQL\MySQL Connector C 6.0.2\include\mysql.h>

//STALE
#define ID_TAB_D 0
#define ID_TAB_M 1
#define ID_DODAJ_KANARA 503
#define ID_PRZYCISK1 501
#define ID_PRZYCISK2 502
#define HRAMKA 504

//ZMIENNE POTRZEBNE DO POLACZENIA Z BAZA
MYSQL mysql;
MYSQL_RES * res;
MYSQL_ROW row;
int num_fields;
int mysql_set;
time_t ltime; //ZMIENNA W KTOREJ JEST AKTUALNY CZAS W SEKUNDACH,POTRZEBNE DO AKTUALIZACJI MYSQL

MSG msgs; //KOMUNIKATY ZAPISYWANE W ZMIENNEJ GLOBALNEJ
CHAR szClassName[] = "AntyKanar";

//UCHWYTY
HWND MainWindow; //GLOWNE OKNO
HWND hTab; //ZAKLADKI
HWND hCombo; //LISTA COMBOBOX DO PRZYSTANKOW
HWND hRamka; //RAMKA DO COMBOBOXA I BUTTONA
HWND hDodajKanara; //BUTTON DO DODAWANIA KANARA

HINSTANCE * hInst; //wskaznik na numer instancji okna glownego

//BITMAPA
HBITMAP hbmTlo;
BITMAP tlo_info;
HDC hdc, hdcBitmapy, hdcMapy;


LRESULT CALLBACK NewWndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); //FUNCKJA OBSLUGUJACA ZDARZENIA Z RAMKI
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
WNDPROC g_OldWndProc; //WSKAZNIK NA FUNKCJE WNDPROC
INT WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR lStart, INT nShow )
{
    //ZAINICJOWANIE POLACZENIA Z BAZA
    mysql_init( & mysql );
    mysql_options( & mysql, MYSQL_SET_CHARSET_NAME, "UTF8" );
    INT a;
    mysql_real_connect( & mysql, "localhost", "root", "", "kanary", 0, NULL, 0 );
   
   
   
    hInst = & hInstance;
    WNDCLASSEX wc; //KLASA OKNA
    wc.hInstance = * hInst;
    wc.lpszClassName = szClassName;
    wc.lpfnWndProc = WndProc;
    wc.style = 0;
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.hIcon = LoadIcon( 0, IDI_APPLICATION );
    wc.hIconSm = LoadIcon( 0, IDI_APPLICATION );
    wc.hCursor = LoadCursor( 0, IDC_ARROW );
    wc.lpszMenuName = 0;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground =( HBRUSH ) COLOR_BACKGROUND;
    if( !RegisterClassEx( & wc ) ) return 0; //REJESTRACJA OKNA
   
    MainWindow = CreateWindowEx( 0, szClassName, "AntyKanar Lublin", WS_OVERLAPPEDWINDOW, 20, 20, 860, 510, 0, 0, * hInst, 0 ); //TWORZENIE OKNA GLOWNEGO
   
    hbmTlo =( HBITMAP ) LoadImage( NULL, "bitmapa.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
    GetObject( hbmTlo, sizeof( tlo_info ), & tlo_info ); //j.w.
   
    //TWORZENIE ZAKLADEK "DODAWANIE KANARA|MAPA"
    typedef struct {
        UINT mask;
        #if (_WIN32_IE >= 0x0300)
        DWORD dwState;
        DWORD dwStateMask;
        #else
        UINT lpReserved1;
        UINT lpReserved2;
        #endif
        LPTSTR pszText;
        int cchTextMax;
        int iImage;
        LPARAM lParam;
    } TCITEM, * LPTCITEM;
   
    hTab = CreateWindowEx( 0, WC_TABCONTROL, 0, WS_CHILD | WS_VISIBLE | TCS_FIXEDWIDTH, 0, 0, 860, 510, MainWindow,( HMENU ) 10, * hInst, NULL );
    TabCtrl_SetItemSize( hTab, 425, 20 );
    TCITEM tci1, tci2;
    tci1.mask = TCIF_TEXT;
    tci2.mask = TCIF_TEXT;
    tci1.pszText = "Dodawanie kanara";
    tci2.pszText = "Mapa";
    tci1.cchTextMax = sizeof( "Dodawanie kanara" );
    tci2.cchTextMax = sizeof( "Mapa" );
    TabCtrl_InsertItem( hTab, ID_TAB_D, & tci1 );
    TabCtrl_InsertItem( hTab, ID_TAB_M, & tci2 );
    //KONIEC TWORZENIA ZAKLADEK
    //DODAWANIE RAMKI NA COMBOBOX I BUTTON
    hRamka = CreateWindowEx( 0, "BUTTON", "Zauważyłeś kanara? Dodaj go!", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 70, 70, 600, 70, MainWindow, NULL, * hInst, NULL );
    //KONIEC DODAWANIA RAMKI
   
    //DODAWANIE COMBOBOX
    hCombo = CreateWindowEx( 0, WC_COMBOBOX, 0, WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_VSCROLL, 30, 30, 300, 300, hRamka, 0, * hInst, 0 );
    //dodawanie opcji wyboru
    mysql_query( & mysql, "SELECT `przystanek` FROM `baza_przystankow`" );
    res = mysql_store_result( & mysql );
    num_fields = mysql_num_fields( res );
    while(( row = mysql_fetch_row( res ) ) )
    {
        for( int i = 0; i < num_fields; i++ )
        {
            //KONWERTOWANIE CHAR TO WCHAR ABY WYSWIETLALO POLSKIE ZNAKI DLA UNICODE UTF8
            const WCHAR * przystanek_wchar;
            // required size
            int nChars = MultiByteToWideChar( CP_UTF8, 0, row[ i ], - 1, NULL, 0 );
            // allocate it
            przystanek_wchar = new WCHAR[ nChars ];
            MultiByteToWideChar( CP_UTF8, 0, row[ i ], - 1,( LPWSTR ) przystanek_wchar, nChars );
            // use it....
            SendMessageW( hCombo, CB_ADDSTRING, 0,( LPARAM ) przystanek_wchar );
            // delete it
            delete[] przystanek_wchar;
        }
    }
    //KONIEC DODAWANIA COMBOBOX'A
   
    //DODAWANIE BUTTONA DO DODAWANIA KANARA
    hDodajKanara = CreateWindowEx( 0, "BUTTON", "Dodaj Kanara!", WS_CHILD | WS_VISIBLE, 360, 25, 100, 30, hRamka,( HMENU ) ID_DODAJ_KANARA, * hInst, NULL );
    //PODMIENIAM PROCEDURE OBSLUGI OKNA DLA RAMKI
    g_OldWndProc =( WNDPROC ) SetWindowLong( hRamka, GWL_WNDPROC,( LONG ) NewWndProc );
   
    ShowWindow( MainWindow, nShow );
    while( GetMessage( & msgs, 0, 0, 0 ) )
    {
        TranslateMessage( & msgs );
        DispatchMessage( & msgs );
    }
    return msgs.wParam;
}

//FUNKCJA OBSLUGUJACA ZDARZENIA W RAMCE
LRESULT CALLBACK NewWndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_COMMAND:
        {
            switch( wParam )
            {
            case ID_DODAJ_KANARA:
                {
                    int numer = ComboBox_GetCurSel( hCombo );
                    char * numer_char = new char;
                    itoa( numer + 1, numer_char, 10 );
                    if( numer == - 1 ) {
                        MessageBox( hwnd, "Nie wybrałeś przystanku", "Błąd", MB_ICONINFORMATION );
                    } else {
                        time( & ltime );
                        char * czas = new char;
                        itoa( ltime, czas, 10 );
                        char zapytanie[ 100 ] = "UPDATE `baza_przystankow` SET `status` = '1',`godzina` = '";
                        LPSTR zapytanie1 = "' WHERE id = '";
                        LPSTR zapytanie2 = "'";
                        lstrcat( zapytanie, czas );
                        lstrcat( zapytanie, zapytanie1 );
                        lstrcat( zapytanie, numer_char );
                        lstrcat( zapytanie, zapytanie2 );
                        MessageBox( hwnd, zapytanie, numer_char, MB_ICONINFORMATION );
                        mysql_query( & mysql, zapytanie );
                        delete czas;
                        delete zapytanie;
                        delete czas;
                    }
                    delete numer_char;
                   
                }
                break;
            case ID_PRZYCISK2:
                MessageBox( hwnd, "Wcisnąłeś przycisk 2", "Test", MB_ICONINFORMATION );
                break;
                default:
                return DefWindowProc( hwnd, msg, wParam, lParam );
            }
        }
        break;
    }
   
    return CallWindowProc( g_OldWndProc, hwnd, msg, wParam, lParam );
}

//FUNKCJA OBSLUGUJACA ZDARZENIA W OKNIE GLOWNYM
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPar )
{
    HDC hdc, hdcMapy; //zmienne na 2 konteksty
    PAINTSTRUCT ps;
   
    switch( msg )
    {
    case WM_PAINT: {
            hdc = BeginPaint( hwnd, & ps ); //kontekst okna uzyskujemy w momencie odrysowywania
            hdcMapy = CreateCompatibleDC( hdc ); //teraz musimy utworzyć kontekst pamięciowy dla bitmapy
            hbmTlo =( HBITMAP ) SelectObject( hdcMapy, hbmTlo );
            BitBlt( hdc, 0, 0, tlo_info.bmWidth, tlo_info.bmHeight, hdcMapy, 0, 0, SRCCOPY );
            hbmTlo =( HBITMAP ) SelectObject( hdcMapy, hbmTlo ); //z powrotem zamieniamy bitmapy w kontekście
            ReleaseDC( hwnd, hdc );
            DeleteDC( hdcMapy ); //usuwamy kontekst pamięciowy bitmapy
            EndPaint( hwnd, & ps );
            break;
        }
       
    case WM_NOTIFY:
        LPNMHDR n;
        n =( LPNMHDR ) lPar;
        if( n->code == TCN_SELCHANGE && n->hwndFrom == hTab ) // Sprawdza, czy uchwyt pochodzi od hTab
        {
            int index = TabCtrl_GetCurSel( hTab );
            switch( index ) // indeks aktualnej kontrolki
            {
            case ID_TAB_D:
                ShowWindow( hRamka, SW_SHOW );
                //ShowWindow( hRadioButton, SW_HIDE );
                break;
            case ID_TAB_M:
                ShowWindow( hRamka, SW_HIDE );
                //ShowWindow( hRadioButton, SW_SHOW );
                break;
            }
        }
        break;
    case WM_DESTROY:
        DestroyWindow( hCombo );
        PostQuitMessage( 0 );
        break;
        default:
        return DefWindowProc( hwnd, msg, wParam, lPar );
    }
    return 0;
}
P-72245
Stefan33
» 2012-12-29 11:24:21
Mam dokładnie to samo.. z dodanym MessageBoxem w WM_PAINT rysuje sie a bez nie..
P-72246
« 1 »
  Strona 1 z 1