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

[winapi] przesyłanie wypełnienia comboboxa przez klase?

Ostatnio zmodyfikowano 2017-05-23 19:19
Autor Wiadomość
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:
C/C++
#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 )
{
   
   
    // WYPEŁNIANIE STRUKTURY
    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 );
   
    // REJESTROWANIE KLASY OKNA
    if( !RegisterClassEx( & wc ) )
    {
        MessageBox( NULL, "Error!", "Niestety...",
        MB_ICONEXCLAMATION | MB_OK );
        return 1;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////// 
    // TWORZENIE OKNA
    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 ); // Pokaż okienko...
    UpdateWindow( hwnd );
   
    // Pętla komunikatów
    while( GetMessage( & Komunikat, NULL, 0, 0 ) )
    {
        TranslateMessage( & Komunikat );
        DispatchMessage( & Komunikat );
    }
    return Komunikat.wParam;
}

// OBSŁUGA ZDARZEŃ
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.


P-161471
karambaHZP
» 2017-05-23 19:19:57
Skorzystaj z metody c_str() do wyciągnięcia cstringa ze stringa.
P-161481
« 1 »
  Strona 1 z 1