mazda313 Temat założony przez niniejszego użytkownika |
[winapi] przesyłanie wypełnienia comboboxa przez klase? » 2017-05-23 15:57:59 Witam, Mam problem w tworzeniu mojego programu, który powinien pobierać dane z pliku .txt, a następnie wpisywać je do comboboxa, Tak wygląda mój kod: #include <windows.h> #include <iostream> #include <fstream>
LPSTR NazwaKlasy = "Klasa Okienka"; MSG Komunikat; HWND g_hPrzycisk;
using namespace std;
class odczyt { private: int number_of_lines = 0; public: int read_file( const char * file_name, const char * name_box ) { string dane; ifstream plik; plik.open( file_name ); while( getline( plik, dane ) ) ++number_of_lines; string * tablica = new string[ number_of_lines ]; plik.close(); plik.open( file_name ); for( int i = 0; i < number_of_lines; i++ ) { getline( plik, dane ); tablica[ i ] = dane; }; plik.close(); for( int a = 0; a < 10; a++ ) { const TCHAR * ComboBoxItems[ 50 ]; ComboBoxItems[ a ] = tablica[ a ]; SendMessage( hCombo, CB_ADDSTRING, 0,( LPARAM ) ComboBoxItems[ a ] ); } } };
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASSEX wc; wc.cbSize = sizeof( WNDCLASSEX ); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); wc.lpszMenuName = NULL; wc.lpszClassName = NazwaKlasy; wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); if( !RegisterClassEx( & wc ) ) { MessageBox( NULL, "Error!", "Niestety...", MB_ICONEXCLAMATION | MB_OK ); return 1; } HWND hwnd; hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Excel Test", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 640, NULL, NULL, hInstance, NULL ); HWND hCombo = CreateWindowEx( WS_EX_CLIENTEDGE, "COMBOBOX", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | CBS_DROPDOWN, 55, 55, 150, 200, hwnd, NULL, hInstance, NULL ); odczyt plik1; plik1.read_file( "tekst.txt", "hCombo" ); if( hwnd == NULL ) { MessageBox( NULL, "Error!", "...", MB_ICONEXCLAMATION ); return 1; } ShowWindow( hwnd, nCmdShow ); UpdateWindow( hwnd ); while( GetMessage( & Komunikat, NULL, 0, 0 ) ) { TranslateMessage( & Komunikat ); DispatchMessage( & Komunikat ); } return Komunikat.wParam; }
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_CLOSE: DestroyWindow( hwnd ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, msg, wParam, lParam ); } return 0; }
Póki co na testach w konsoli wszystko działało dobrze, problem zaczął się gdy chciałem przekonwertować tablicę string -> const TCHAR* (znalazłem informację że tak będzie mi łatwiej wysyłać dane do comboboxa). Jest to błąd: [Error] cannot convert 'std::string {aka std::basic_string<char>}' to 'const TCHAR* {aka const char*}' in assignment . Z nim jakoś jeszcze sobie poradzę, ale gdyby ktoś mógł mi wytłumaczyć to w łatwy sposób byłby wdzięczny. Kolejnym poważniejszym(jak dla mnie) błędem jest linijka SendMessage( hCombo, CB_ADDSTRING, 0,( LPARAM ) ComboBoxItems[ a ] ); W tym miejscu wywala mi błąd [Error] 'hCombo' was not declared in this scope. I nie mam pojęcia czy lepiej tworzyć mi comboboxa w klasie, czy może już w głównym programie. |