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