WinApi wyświetlanie zmiennej w EditBoxie

0

Witam, nie jestem w stanie sobie poradzić z wyświetlaniem wylosowanej liczby w EditBoxie. robię to tak:

 
int losowana = rand()%100+1;
... // troche kodu
case WM_COMMAND:
            if((HWND)lParam == hPrzycisk)
           {
            SetWindowText(hEdit,(LPCSTR) losowana); // rzutuję wylosowaną liczbę na wymagany typ const char *
            break;
            }
... // reszta kodu

program się kompiluje, ale po kliknięciu na button wysypuję się "Wystąpił problem z aplikacja... bla bla"
druga sprawa jest taka, że nie mogę ustawić ziarna. po napisaniu

srand(time(0)); 

dostaje "error: expected constructor, destructor, or type conversion before '(' token"
pierwszy raz się z takim czymś spotykam. proszę o jakąkolwiek pomoc.

0
SetWindowText(hEdit,(LPCSTR) losowana); // rzutuję wylosowaną liczbę na wymagany typ const char *

Utopia... musisz zamienić swoją wylosowaną liczbę na ciąg znaków funkcją sprintf lub (niestandardową) itoa.

Ta linia, którą mi podałeś, jest działająca, choć bezpieczniej byłoby zrobić jeszcze rzutowanie na unsigned:

srand((unsigned)time(0));

Błąd wskazywać może, że umieściłeś funkcję nie tam, gdzie trzeba lub coś podobnego - powinieneś pokazać okolice tej linii.

0

dziękuję za tak szybką odpowiedź.
ad 1. mógłbyś rzucić jakimś kawałkiem kodu jak użyć atoi()?
ad 2. srand() daję zaraz pod includami na początku programu wygląda to tak:

 #include <stdlib.h>
#include <time.h>
#include <string>
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
srand(time(0));
int losowana = rand()%100+1;
std::string g_strKlasaOkna = "asfgasg";
HWND hOkno;
HWND hPrzycisk;
HWND hEdit;
LRESULT CALLBACK WindowEventProc (HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
...
}
0

Albo tak:

int losowana = rand()%100+1;
char buforek[16];

wsprintf(buforek, "%lu", losowana);
SetWindowText(hEdit, buforek);

albo skorzystaj z funkcji SetDlgItemInt(), zamiast uchwytu edita, będziesz musiał wykorzystać jego ID

0

dzięki bartek twój kod działa świetnie mógłbyś mi tylko jeszcze powiedzieć jak działa wsprintf? przeczytałem na msdn, ale nadal nie mam pojęcia do czego służy

%lu 

tak czy siak pierwszy problem rozwiązany

drugi prawie też, post mnbvcX dał mi do myślenia i zmieniłem miejsce położenia srand i wtedy się skompilowało, ale przestało wykonywać swoją prace(nadal losowało jedną i tę samą liczbę)
srand() pisałem nad

SetWindowText(hText, buforek); 

na początku main i pod

 LRESULT CALLBACK WindowEventProc (HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam )
{

i nadal losuje jedną liczbę.

poradziłem sobie z problemem dla innych pokoleń szukających rozwiązania podobnego problemu zamieszczam kawałek kodu z losowaniem liczby

 case WM_COMMAND:
            if((HWND)lParam == hPrzycisk)
           {
               srand(static_cast<int>(time(NULL)));
               unsigned int losowana = rand()%100+1;
               char buforek[16];

            wsprintf(buforek, "%lu", losowana);
            SetWindowText(hText, buforek);
            break; 

losowane wyniki nie są zadowalające po każdym naciśnięciu buttona liczba zwiększa się o 5 - 6, ale główny problem rozwiązany i temat można zamknąć

0

bo za kazdym razem inicjalizujesz generator przez srand(), srand wrzuc tylko na starcie programu :)

0

Ja jeszcze od siebie: mówiłem, że srand-a wstawiłeś nie tam, gdzie trzeba. Trzeba go wsadzić tam, gdzie będzie wywoływany kod, najlepiej na początku. W takim razie wybór pada na początek procedury WinMain.

0

ha! dzięki, wrzuciłem srand() na początek main() i działa :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1