Jak ze zmiennej lokalnej zrobić zmienną globalna?

0

Jak ze zmiennej lokalnej zrobić zmienną globalna?

0

?????????? hmmmm o ile wiem to się nie da :) najlepiej utwórz zmienną globalną i do niej przypisz wartość zmiennej lokalnej.

0

Zaznaczasz, wycinasz, wklejasz poza wszystkimi funkcjami, czyli w zasiegu globalnym i już :P. Nie można inaczej "przenieść" zmiennej ;)

0

Ale jak mam tak:

int stan;

funkcja()
{
stan=1;
}

funkcja2()
{
if(stan==1)//i tu nie działa
{
//rób coś tam
}
}
0
#include <iostream>

using namespace std;
int zm;
void fun(){zm=1;}
void fun2(){if(zm==1)cout<<"tekst"<<endl;}
int main()
{
fun();
fun2();

system("pause");
}

Cos takiego u mnie poszło na DevCpp

0
#include <iostream>

using namespace std;
int zm;
void fun(){zm=1;}
void fun2(){if(zm==1)cout<<"tekst"<<endl;}
int main()
{
fun();
fun2();

system("pause");
}

Cos takiego u mnie poszło na DevCpp

hmmm...a jak to przerobić pod CASE?

0

Ja chce tak pod WinAPI:


int stan;

//wchodzimy w funkcje komunikatów

case WM_COMMAND:
    ID2=LOWORD(wParam);
    kom=HIWORD(wParam);

        if(IsDlgButtonChecked(hWnd,200)==1)
		{
		stan=1; //nadaje wartość zmiennej
		}
break;

case WM_PAINT:

		hdc = BeginPaint(hWnd,&ps);
		memDC = CreateCompatibleDC(hdc);
		if(stan==0)//i tu nie działa
		{
				SelectObject(memDC, hBit1);
		}
		if(stan==1)//i tu nie działa
		{
				SelectObject(memDC, hBit2);
		}
		BitBlt(hdc, 155, 60, 20, 20, memDC, 0,0,SRCCOPY);
		EndPaint(hWnd,&ps);
		DeleteDC(memDC);
break;

Nie wiem czy dobrze opisałem ale jak by co to pytaj. Jest mi to bardzo potrzebne z góry dzięki.

0

Cóż, chyba widzę problem: czy zmienna jest zdeklarowana wewnątrz procedury okna? Przy każdym wywołaniu przez system procedury okna zmienne w niej zdefiniowane przyjmują wartość nieokreśloną /przypadkową/. Spowodowane jest to tym, że pamięć dla tych zmiennych jest alokowana na stosie. Proponuję tego typu dane przechowywać w WndExtra /pamięć dodatkowa okna, którą definiuje się podczas wypełniania struktury WNDCLASS(EX)/. Odczyt czy zapis przy pomocy SetWindowLong/GetWindowLong.

0

Czyli jak to będzie wyglądać możesz pokazać na kodzie w tedy najlepiej się naucze... ;)

0

Przy wywołaniu RegisterClassEx (RegisterClass) w strukturze WNDCLASSEX (WNDCLASS) musisz w polu cbWndExtra wpisac 4 (sizeof(void*)) a odczytujesz i zapisujesz do tego pola wskaznik za pomocą GetWindowLong/SetWindowLong (drugi parametr to DLGWINDOWEXTRA.)

0

Po co sobie tak zycie komplikowac? Napisz przed zmienna "static" i po problemie. :)

0

Przy wywołaniu RegisterClassEx (RegisterClass) w strukturze WNDCLASSEX (WNDCLASS) musisz w polu cbWndExtra wpisac 4 (sizeof(void*)) a odczytujesz i zapisujesz do tego pola wskaznik za pomocą GetWindowLong/SetWindowLong (drugi parametr to DLGWINDOWEXTRA.)

Możesz pokazać to na kodzie :) ? I jeszcze pytanie czy zadziała to na VC++6.0, bo to co podałeś nie działa mi, albo coś źle robie :-/

0

Po co kod, przeciez wszystko jest dokladnie napisane, jak to trzeba zrobic.
Mozesz tez kazde okienko umiescic w jakies klasie dziedziczacej np z CWindow, ktorej definiujesz obluge komunikatow w statycznej funkcji. Ja wlasnie tak robie i jest to IMO dobre rozwiazanie. Jedyne co wtedy robisz to przy CreateWindow (CreateDialogParam/DialogBoxParam) podajesz w lpParam wskaznik this. A nastepnie odczytujesz go w komunikacie WM_CREATE (WM_INITDIALOG) w strukturze CREATESTRUCT i przesylasz do lokalnej zmiennej statycznej. Jest to bardzo pomocne, gdy prowadzisz projekt, gdzie jest wiele okienek.

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