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

WINAPI - wczytanie tekstu z ComboBoxa do stringa

Ostatnio zmodyfikowano 2022-04-11 18:40
Autor Wiadomość
Rynko
Temat założony przez niniejszego użytkownika
WINAPI - wczytanie tekstu z ComboBoxa do stringa
» 2022-04-09 20:23:38
Witam wszystkich na forum.
Od pewnego czasu tworzę aplikację na WINAPI. Aplikację do pewnego momentu tworzyłem w środowisku CodeBlocks i kierowałem się kursem dostępnym na forum - generalnie wszystko szło gładko do momentu, kiedy musiałem z pewnych powodów przenieść tworzenie aplikacji do Visual Studio. Okazało się, że z jakiegoś powodu wiele funkcji działa tutaj inaczej i trafiłem właśnie na pierwszy problem, którego nie udało mi się rozwiązać.


Chciałbym przypisać do stringa wartość wybraną na liście rozwijalnej po kliknięciu przycisku.

W CodeBlocks wszystko działało dobrze:
C/C++
int condition_name_lenght = ComboBox_GetTextLength( hComboChooseCondition );
LPSTR current_condition_name =( LPSTR ) GlobalAlloc( GPTR, condition_name_lenght + 1 );
ComboBox_GetText( hComboChooseCondition, current_condition_name, condition_name_lenght + 1 );

//Przekazanie wartości do stringa
conditionAllData.condition_name = current_condition_name;

W Visual Studio powyższy kod jest błędny. Spróbowałem czegoś takiego:
C/C++
int programNameLenght = ComboBox_GetTextLength( hComboProgrammingModeObjectSelection );
LPTSTR currentProgramName =( LPTSTR ) GlobalAlloc( GPTR, programNameLenght + 1 );
ComboBox_GetText( hComboProgrammingModeObjectSelection, currentProgramName, programNameLenght + 1 );

//Przekazanie wartości do stringa
programAllData.program_name =( LPSTR ) currentProgramName;

GlobalFree( currentProgramName );

Jednak kiedy chce wyświetlić tekst "programAllData.program_name" to pojawia się wielkie nic. Podejrzewam, że ma to coś wspólnego z komunikatem, który pojawia się przy linijce z "ComboBox_GetText", mianowicie: "Element "currentProgramName" może mieć wartość "0" i jest kopią wartości znalezionej w elemencie "3$Is""


P-179390
pekfos
» 2022-04-11 18:40:54
Okazało się, że z jakiegoś powodu wiele funkcji działa tutaj inaczej
To konfiguracja projektu, nie środowisko. W ustawieniach projektu w Visualu jest General/Character set, ustaw "Use Multi-Byte Character Set" żeby mieć poprzednie zachowanie. Nowy kod powinien być pisany pod Unicode, dlatego to domyślne ustawienie, ale będziesz musiał przerobić dużo więcej niż tylko ten jeden kawałek.
C/C++
LPTSTR currentProgramName =( LPTSTR ) GlobalAlloc( GPTR, programNameLenght + 1 );
To jest błędne po przejściu na LPTSTR. Powinno być
C/C++
LPTSTR currentProgramName =( LPTSTR ) GlobalAlloc( GPTR,( programNameLenght + 1 ) * sizeof( TCHAR ) );
W konfiguracji Unicode LPTSTR to LPWSTR. Jeden znak zajmuje 2 bajty (na ogół). Dlatego też nie zadziała te przypisanie do program_name.
https://docs.microsoft.com/en-us/windows/win32/intl/conventions-for-function-prototypes
P-179392
« 1 »
  Strona 1 z 1