Skocz do zawartości
jericho666

Problem Z Wykorzystaniem Funkcji Onidle

Rekomendowane odpowiedzi

Srodowisko to visual studio 2005

 

Aplikacja to okno dialogowe, w ktorym chce wykorzystać możliwości funkcji OnIdle, na początek jakis prosty licznik który bedzie sobie liczył podczas bezczynnosci programu.

Problem pojawia się przy wywoływaniu przez funkcje OnIdle funkcji składowej klasy dialogu.

 

kod funkcji OnIdle w głównej klasie aplikacji :

BOOL CIdleTestDialogApp::OnIdle(LONG lCount)

{

BOOL bRtn=CWinApp::OnIdle(lCount);

CIdleTestDialogDlg* wsk;

wsk=(CIdleTestDialogDlg*)m_pMainWnd;

wsk->LicznikIdle(); // <- to funkcja z klasy dialogu

return bRtn;

}

 

przy takim wywołaniu funckji LicznikIdle(), odpowiadającej za liczenie program sie kompiluje ale nie działa

Oprócz tej wersji próbowałem tworzyć własny wskaźnik do okna dialogowego

 

// fragment kodu inicjujacego okno dialogowe

CIdleTestDialogDlg dlg;

m_pMainWnd = &dlg; // <- wskaznik standardowy

wsk2=&dlg; // <- moj dodatkowy wskaznik (klasa wskaznika ta sama co moje okno dialogowe)

 

przy odwoływaniu sie przez ten drugi wskażnik program tez sie kompiluje ale nie działa

podejrzewam ze prawidlowo takie rzeczy robi sie to jakos za pomocą wskaznika m_pMainWnd ale nie wiem w jaki sposob :-|

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a prześledziłeś debugerem czy m_pMainWnd ma jakąś rozsądna wartość? Czy Twoja aplikacjaApp nie ma wskaźnika bezpośrednio na klasę oknaDlg?

 

Aha już widzę.. zatem dialoga tworzysz statycznie... Prześledź debugerem gdzie wchodzi wsk->LicznikIdle(); jesli wsk będzie różne od NULLa i od głupich wartości typu 0f0f0f efefef etc..

 

Zamiast się ropzpisywać wystarczy zrzutować wskaźnik w locie

((CIdleTestDialogDlg*) m_pMainWnd)->LicznikIdle();

albo skorzystać z bardziej higienicznego (dynamic_cast<CIdleTestDialogDlg*>m_pMainWnd)->LicznikIdle();

 

ps. debuger najlepszym przyjacielem programisty :wink:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

fukcja OnIdle działa jak trzeba gdy skorzystam zamiast z Dialogu z SDI lub MDI

 

Natomiast w aplikacji dialogowej przesledziłem debugerem wskażniki pokazujące na ten dialog i mają jednakową i raczej sensowną wartość, a gdy break point ustawie w ciele funkcji OnIdle to program sie nie zatrzymuje a więc wynika ze ta funkcja wogole nie jest uruchamiana, próbowałem znalezc cos w opcjach bo być może nie jest to domyślnie włączane w projekcji dialogu ale za bardzo nic nie znalazłem

 

Byc może jest to jakies ograniczenie dialogu

 

A i odpowiedzieć wczesniej nie mogłem bo to był program pomocniczy do pracy mgr ( obrona i takie tam :D)

 

 

EDIT:

 

Nie daje mi spokoju i powalczyłem teraz jeszcze toche z tym i wyszło że to przez modalne wywoływanie okna lecz niestety gdy wywołam okno w skosób niemodalny aplikacja sie automatycznie zamyka

probowałem jeszcze otworzyć nowy projekt SDI powywalać z stamtąd wszystkie doki itp. i umiescić okno dialogowe i efekt był taki sam jak w przypadku projektu z zastosowanie samego dialogu czyli jak okno było modalne to głowna klasa aplikacji jest blokowana a jeżeli niemodalne to aplikacja sie poprostu kończyła odrazu po uruchomieniu

Edytowane przez jericho666

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...