Nie można odczytac wartości zwracanej przez funkcję
Ostatnio zmodyfikowano 2021-03-08 17:31
slyys72 Temat założony przez niniejszego użytkownika |
Nie można odczytac wartości zwracanej przez funkcję » 2021-03-08 16:43:26 Nauka WINAPI c.d. Napisałem kod który wyświetla okno aplikacji, losuje liczbę od 1 do 6 i umieszcza ją w oknie komunikatu. Użytkownik ma wybrać czy losuje kolejna liczbe czy kończy program. Stworzyłem osobna funkcje losującą Losuj() , która faktycznie losuje, konwertuje komunikat i kiedy zwraca go do WinMain to nic się nie przypisuje do zmiennej wywołującej te funkcję ??? DLACZEGO ??? #define WIN32_LEAN_AND_MEAN #include <windows.h> #include<cstdlib> #include<ctime> #include<string>
using namespace std;
LPCTSTR NazwaKlasy = TEXT( "Okno Aplikacji" ); MSG Komunikat; LRESULT CALLBACK ObslugaZdarzen( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); LPCWSTR Losuj(); LPCWSTR komunikatpokonwersji;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE HprevInstance, LPSTR plCmdLine, int nCmdShow ) { WNDCLASSEX wc; wc.cbSize = sizeof( WNDCLASSEX ); wc.style = 0; wc.lpfnWndProc = ObslugaZdarzen; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_SIZEALL ); wc.hbrBackground =( HBRUSH )( COLOR_BTNTEXT ); wc.lpszMenuName = NULL; wc.lpszClassName = NazwaKlasy; wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); if( !RegisterClassEx( & wc ) ) { MessageBox( NULL, TEXT( "Wysoka komisja odmawia rejestracji tego okna!" ), TEXT( "Niestety..." ), MB_ICONEXCLAMATION | MB_OK ); return 1; } HWND h_glowneokno; h_glowneokno = CreateWindowEx( WS_EX_WINDOWEDGE, NazwaKlasy, TEXT( "Pierwsze okno" ), WS_OVERLAPPEDWINDOW, 100, 50, 1150, 600, NULL, NULL, hInstance, NULL ); if( h_glowneokno == NULL ) { MessageBox( NULL, TEXT( "Okno odmowilo przyjscia na swiat :(" ), TEXT( "Blad" ), MB_ICONEXCLAMATION ); return 1; } ShowWindow( h_glowneokno, nCmdShow ); UpdateWindow( h_glowneokno ); srand( time( nullptr ) ); komunikatpokonwersji = Losuj(); int decyzja = MessageBox( NULL, komunikatpokonwersji, TEXT( "Losowanie liczb" ), MB_YESNO | MB_ICONEXCLAMATION ); while( decyzja == IDYES ) { komunikatpokonwersji = Losuj(); decyzja = MessageBox( NULL, komunikatpokonwersji, TEXT( "Losowanie liczb" ), MB_YESNO | MB_ICONEXCLAMATION ); } while( GetMessage( & Komunikat, NULL, 0, 0 ) ) { TranslateMessage( & Komunikat ); DispatchMessage( & Komunikat ); } return Komunikat.wParam; }
LRESULT CALLBACK ObslugaZdarzen( HWND h_glowneokno, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_CLOSE: DestroyWindow( h_glowneokno ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( h_glowneokno, msg, wParam, lParam ); } return 0; }
LPCWSTR Losuj() { int liczba =( rand() % 6 ) + 1; wstring strliczba = to_wstring( liczba ); wstring strtekst = L"Wylosowano : "; wstring strpytanie = L" Losujemy następną ?"; wstring strgotowykomunikat = strtekst + strliczba + strpytanie; return strgotowykomunikat.c_str(); }
|
|
pekfos |
» 2021-03-08 17:01:02 Nie możesz wracać wskaźnika, jeśli nie zapewnisz że wskazywany obiekt będzie wciąż istnieć po wyjściu z funkcji. Funkcja powinna tu zwracać std::wstring. |
|
slyys72 Temat założony przez niniejszego użytkownika |
» 2021-03-08 17:31:15 Dzięki. Wyjaśnienie pomogło . |
|
« 1 » |