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.
linie 37,73,205
#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( <ime );
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;
}