Jak obejść się bez zmiennych globalnych

0

Witam, dzisiaj pierwszy raz chciałem zrobić program korzystając z MFC używając visual studio.
Mam klasę która ma 3 zmienne typu std:string i drugą klasę która ma 2 zmienne typu int. Obiekty obu kls tworzę w funkcji winMain przed pętlą komunikatow:

klasaA obj;
klasaB obj2;
    while (GetMessage(&msg, nullptr, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

Następnie chciałbym umożliwić modyfikacje tych obiektów za pomocą przycisków i innych kontrolek. Problem w tym że moje obiekty nie będą widoczne w funkcjach do obsługiwania okna. Przykładowo obsługa naciśnięcia klawisza jest zrobiona w taki sposób jak poniżej. Nie mogę rozszerzyć listy argumentów tej funkcji więc jak przekazać tam cokolwiek z funkcji main bez używania zmiennej globalnej?

// Message handler for about box.

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
		else if (LOWORD(wParam) == IDOK2)
		{
			//tutaj mój kod
		}
        break;
    }
    return (INT_PTR)FALSE;
}

Wyczytałem że istnieje coś takiego jak SetWindowLong() oraz GetWindowLong() co umożliwiło by mi przypisywanie wskaźników do danych okien i z pomocą tego mógł bym przekazywać obiekty ale wydaje mi się że to nie jest poprawne rozwiązanie problemu.

Z góry dziękuję za pomoc,
Pozdrawiam

0

uzyj kompozycji (w sensie tworz obiekty ktore Ci sa potrzebne w klasie)

bedziesz mogl uzywac bezposrednio w tej funkcji bez przekazywania argumentu

0
fasadin napisał(a):

uzyj kompozycji (w sensie tworz obiekty ktore Ci sa potrzebne w klasie)

bedziesz mogl uzywac bezposrednio w tej funkcji bez przekazywania argumentu

Ale te funkcje to nie są moje funkcje żebym nagle mógł z nich zrobić membery mojej klasy. To są funkcje które są wywoływane przez mechanizm win32 i jak z nich zrobię membery jakiejś klasy to po pierwsze nawet nie wiem gdzie miałbym stworzyć instancję takiego obiektu i w jaki sposób ten mechanizm by miał dalej działać.

Ps. przepraszam za zły tag. To jest projekt apikacji z użyciem win32 a nie MFC

0

Zamiast tracić czas i siły na wrapper WinAPI polecam zaprzyjaźnić się z jakimś Qt czy /wxWidgets ;)

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