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

Nie można odczytac wartości zwracanej przez funkcję

Ostatnio zmodyfikowano 2021-03-08 17:31
Autor Wiadomość
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 ???

C/C++
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include<cstdlib>
#include<ctime>
#include<string>

using namespace std;

LPCTSTR NazwaKlasy = TEXT( "Okno Aplikacji" );
MSG Komunikat; // przechowanie komunikatow z systemu

LRESULT CALLBACK ObslugaZdarzen( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); // naglowek funkcji obslugujacej zdarzenia
LPCWSTR Losuj();
LPCWSTR komunikatpokonwersji;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE HprevInstance, LPSTR plCmdLine, int nCmdShow )
{
   
WNDCLASSEX wc; // zdefiniowanie struktury okna glownego programu
   
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 ) ) // rejestracja okna w systemie
   
{
       
MessageBox( NULL, TEXT( "Wysoka komisja odmawia rejestracji tego okna!" ), TEXT( "Niestety..." ), MB_ICONEXCLAMATION | MB_OK );
       
return 1;
   
}
   
   
HWND h_glowneokno; // uchwyt na okno glowne
   
   
h_glowneokno = CreateWindowEx( WS_EX_WINDOWEDGE, NazwaKlasy, TEXT( "Pierwsze okno" ), WS_OVERLAPPEDWINDOW,
   
100, 50, 1150, 600, NULL, NULL, hInstance, NULL ); // utworzenie okna glownego
   
if( h_glowneokno == NULL )
   
{
       
MessageBox( NULL, TEXT( "Okno odmowilo przyjscia na swiat :(" ), TEXT( "Blad" ), MB_ICONEXCLAMATION );
       
return 1;
   
}
   
   
ShowWindow( h_glowneokno, nCmdShow ); // wyswietl okno glowne
   
UpdateWindow( h_glowneokno ); // odswiez okno glowne
   
   
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 ) ) // petla przechwytujaca komunikaty z systemu
   
{
       
TranslateMessage( & Komunikat );
       
DispatchMessage( & Komunikat );
   
}
   
return Komunikat.wParam;
}

LRESULT CALLBACK ObslugaZdarzen( HWND h_glowneokno, UINT msg, WPARAM wParam, LPARAM lParam ) // funkcja obslugi zdarzen
{
   
switch( msg )
   
{
   
case WM_CLOSE: // nacisniecie x w oknie programu
       
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 ); // konwersja z int na wstring
   
wstring strtekst = L"Wylosowano :  ";
   
wstring strpytanie = L"  Losujemy następną ?";
   
wstring strgotowykomunikat = strtekst + strliczba + strpytanie;
   
return strgotowykomunikat.c_str(); // konwerscja z wstring na LPCWSTR
}
P-178257
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.
P-178259
slyys72
Temat założony przez niniejszego użytkownika
» 2021-03-08 17:31:15
Dzięki. Wyjaśnienie pomogło .
P-178260
« 1 »
  Strona 1 z 1