Okienka w Visual C++

0

Zaczynam pisac w Visual C++ pewien program i zastanawia mnie jak tam dziala mechanizm okienek. Jezeli stworze aplikacje typu Single Document, to zeby utworzyc na niej np. buttony czy listy to trzeba stworzyc nowy dialog bez menu systemowego i go "przykleic" do okienka glownego. Podczas przesuwania glownego okna, ten dialog bedzie sie poruszal razem z nim i bedzie to wygladalo jakby to bylo jedno okno.
Czy tak to sie robi?

Widzialem juz program tak zrobiony ale czasami bylo wrazenie jakby ten "doklejony" dialog nie nadążal za oknem glownym podczas przesuwania.

A moze da sie to zrobic jakos inaczej?

0

Niezly patent z tym dialog boxem :D
Ale zawsze mozesz stworzyc ten przycisk jako kienko klasy BUTTON funkcja CreateWindow()

0

Jasne ze mozna stworzyc tak buttona a co gdy aplikacja ma miec kilka okienek wybieranych np. z menu na gorze? Tworzenie wszystkich kontrolek na poszczegolnych okienkach poprzez CreateWindow jest bez sensu.
Chodzi mi o wykorzystanie edytora resourcow i otwieranie tego okienka ktore jest aktualnie potrzebne.

0

To poczytaj o modalnych/niemodalnych oknach dialogowych (DialogBox() / CreateDialog())

0

Jeżeli korzystasz z MFC to poczytaj o CFormView.

0

A co za problem zrobic normalne okienko ktore bedzie poruszalo sie zgodnie z oknem glownym, wystarczy dodac styl WS_CHILD

hwndChild = CreateWindow ( klasa_okna_potomnego ,
TEXT("okno") ,
WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
0, 0, 100, 100,
uchwyt_okna_rodzica, (HMENU) 0,
(HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL) ;

aha no i kod ten nalezy wstawic w miejsce odebrania komunikatu z menu...

0

Zrobilem cos takiego:

CNowyDialog *okno;

okno = new CNowyDialog;
okno->Create(IDD_NOWYDIALOG, this);
okno->ShowWindow(SW_SHOW);

Ten dialog ma styl Child i ladnie sie pokazuje w oknie glownym. Problem w tym ze po pokazaniu takiego dialogu on jest wyswietlany ale jakby martwy tzn. nie da sie nigdzie kliknac, wszystkie kontrolki sa jakby nieaktywne.
Co z tym zrobic?

0
MiL napisał(a)

Zrobilem cos takiego:

CNowyDialog *okno;

okno = new CNowyDialog;
okno->Create(IDD_NOWYDIALOG, this);
okno->ShowWindow(SW_SHOW);

Ten dialog ma styl Child i ladnie sie pokazuje w oknie glownym. Problem w tym ze po pokazaniu takiego dialogu on jest wyswietlany ale jakby martwy tzn. nie da sie nigdzie kliknac, wszystkie kontrolki sa jakby nieaktywne.
Co z tym zrobic?

Ogólnie powinno działać... chyba, że coś w samym dialogu jest nie tak - może w edytorze zasobów zaznaczyłeś styl Disabled???.

0

No wlasnie z dialogiem wszystko jest ok bo po wyswietleniu go przez DoModal() dziala prawidlowo. Wydaje mi sie ze to jest zwiazane z oknem macierzystym. Jest to aplikacja SDI wiec sa tam klasy MainForm i ChildView i ze tam trzeba szukac rozwiazania. Sam juz nie wiem.

0

To czy to jest aplikacja MDI lub SDI w tym przypadku nie ma znaczenia. Nie wiem, być może podałeś złe okno jako właściciela dialogu - zamiast CView dałeś CMainFrame. U mnie, w ten sposób tworzony dialog (pochodny od CDialog) chodzi bez zarzutu.

0

Nie wiem czy dobrze zrozumiałem, ale spróbuj utworzyc okno głowne na bazie CFormView (a nie CWnd jak jest domyslnie) jeśli używasz MFC. Odpowiednią klasę bazową wybiera się w kreatorze aplikacji.
JM

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