2010-06-04 12 views
7

Mam instrukcję obsługi OnMove w mojej klasie dialogowej, która wykonuje pewne rzeczy z obiektami kontrolnymi (np. CButton). Stwierdzam, że ten program obsługi jest wywoływany przed wywołaniem okna dialogowego OnInitDialog, a więc gdy próbuję wywołać metody na kontrolkach podrzędnych, otrzymuję ASSERTS w debugowaniu, ponieważ formanty jeszcze nie istnieją ... są one tworzone w OnInitDialog .Jak stwierdzić, czy zostało utworzone/zainicjowane okno dialogowe MFC?

Są dwie rzeczy, które chciałbym, aby móc sprawdzić:

  1. Jak mogę powiedzieć dialog został zainicjowany?
  2. Jak mogę sprawdzić, czy pojedyncze okno obiektu kontrolnego CWnd zostało utworzone?

W obu przypadkach szukam członków klasy lub wyników wywołania metody, których można użyć.

Odpowiedz

7
  1. Ustaw flagę w OnInitDialog

  2. Użyj swojej dialogowego m_hWnd:

    if (::IsWindow(m_Ctrl.m_hWnd)) { 
        ... 
    } 
    
+0

Nie chcę napisać kod niestandardowy, więc 2 brzmi korzystne. Czy są inni członkowie, których mógłbym przetestować? –

+3

GetSafeHwnd(), ale to tylko opakowanie wokół :: IsWindow(). Pod względem zorientowania na obiekt uważam, że jest ładniejszy niż ręczne odpowiadanie na uchwyt - podoba mi się kontrola "niskiego poziomu" kontroli osobiście. – Roel

+1

'GetSafeHwnd()' nie jest opakowaniem wokół 'IsWindow()' - jest opakowaniem wokół 'm_hWnd' - niestandardowym C++ do testowania, czy' this' ma wartość null, i zwraca 'm_hWnd' lub' null'. 'm_hWnd' może mieć wartość inną niż null, ale nie być oknem (tak jak uchwyt pliku może nie być pusty, ale plik powinien być zamknięty) – Mordachai

Powiązane problemy