[win32] modal dialog disabled modeless dialog bij sluiten

Pagina: 1
Acties:

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
Ik heb een modalless dialog, dit is mijn hoofddialog, gemaakt met CreateDialog vanuit een resource template. Bij het selecteren van een menuoptie wordt een andere, modal dialog, aangemaakt en getoond. Als deze dialog wordt gesloten door een klik op ok of cancel zou de hoofddialog weer actief moeten worden, maar dit is echter niet het geval. De dialog blijft disabled, en wordt bovendien ook nog eens geminimized zodra de modal dialog sluit (door een aanroep naar EndDialog ())

Met EnableWindow () kan de dialog wel weer worden enabled, maar hij blijft geminimalizeerd. Een ShowWindow () met als parameter SW_SHOW of SW_RESTORE helpt ook niet. Maar goed, dat is verder ook niet belangrijk, wat ik wil weten is waarom de dialog in hemelsnaam op disabled blijft staan, en bovendien geminimalizeert wordt als de andere dialog sluit

Is er misschien iets dat ik over het hoofd zie? Misschien is de dialog nog niet voldoende opgeruimd of iets dergelijks? De MSDN vertelt me dat een aanroep naar EndDialog () toch voldoende moet zijn. Weet iemand wat er aan de hand is?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Heb je de owner wel goed staan van alle windows? Vallen alle WndProcs binnen dezelfde thread? Is de modeless dialog wel een toplevel window? Minimaliseert het window in de linksonderhoek van je scherm of in de taakbalk? Is de modal dialog zelf een app_window die in de taakbalk verschijnt? Zo ja, als je in een *andere* applicatie zit, werkt een rechtsklik op de modal dialog om direct de applicatie te activeren en het system menu op te gooien?

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
> Heb je de owner wel goed staan van alle windows?
ja, de main dialog heeft een owner van NULL, en de modal dialog heeft als owner de main dialog

> Vallen alle WndProcs binnen dezelfde thread?
ja

> Is de modeless dialog wel een toplevel window?
ja

> Minimaliseert het window in de linksonderhoek van je scherm of in de taakbalk?
in de taakbalk

>Is de modal dialog zelf een app_window die in de taakbalk verschijnt?
nee

>Zo ja, als je in een *andere* applicatie zit, werkt een rechtsklik op de modal dialog om direct de applicatie te activeren en het system menu op te gooien?
nvt :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Dan weet ik het zo niet, mail code maar door.

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
Hmmm vreemd. Ik heb een kleine test applicatie gebouwd met dezelfde situatie, en nu gebeurt het niet

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <windows.h>
#include "resource.h"

HINSTANCE hInst;

INT_PTR CALLBACK proc2 (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    if (msg == WM_COMMAND)
    {
        EndDialog (hWnd, IDOK);
        return 1;
    }

    return 0;
}

INT_PTR CALLBACK proc1 (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    if (msg == WM_COMMAND)
    {
        if (LOWORD (wParam) == IDOK)
        {
            DialogBox (hInst, MAKEINTRESOURCE (IDD_DIALOG2), hWnd, proc2);
            return 1;
        }

        if (LOWORD (wParam) == IDCANCEL)
        {
            PostQuitMessage (0);
            return 1;
        }
    }

    return 0;
}



int main ()
{
    hInst = GetModuleHandle (NULL);
    HWND dlg = CreateDialog (hInst, MAKEINTRESOURCE (IDD_DIALOG1), NULL, proc1);
    ShowWindow (dlg, SW_SHOW);

    MSG msg;
    while (GetMessage (&msg, NULL, 0, 0))
    {
        TranslateMessage (&msg);
        DispatchMessage (&msg);
    }

    return msg.wParam;
}


ik maak gebruik van mijn eigen window lib, dat een C++ wrapper is om de win32 API... vermoedelijk zit het probleem dan ook daar

[ Voor 4% gewijzigd door .oisyn op 09-01-2003 18:45 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
wheehehe, ik heb de fout

in mijn implementatie van DlgWindow::endDialog () wordt er gecontroleerd of het een modal dialog is. Zo niet, dan wordt de window gedestroyed met DestroyWindow (), en anders met EndDialog (). Bleek dat ik in de constructor van DlgWindow de member isModal was vergeten te zetten :D

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

.oisyn schreef op 09 January 2003 @ 18:45:
ik maak gebruik van mijn eigen window lib, dat een C++ wrapper is om de win32 API...
Heb je zo'n hekel aan MFC??

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
uhm, ja?
MFC = evil ;)

ik hou niet zo van bloated apps als dat gewoon totaal niet nodig is. Bovendien is de setup van een MFC project ook niet echt fijn, met de classwizard en alles. En met mijn lib is de setup net zo snel, zo niet sneller, en je houdt een lightweight app. Ook maakt MFC geen gebruik van de STL, maar van die irritante CString klasse enzo... Mijn functies accepteren en retourneren std::string's, en er zijn bovendien allerlei templated functies om bijvoorbeeld verschillende typen uit een dialog control te halen (gebruik makend van de functie GetDlgItemText ())

ATL/WTL is overigens ook een alternatief, maar dan zal ik eerst even de tijd moeten nemen om het te doorgronden... tot die tijd blijf ik gewoon steken bij ogl (oisyn's gui lib) ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Zijn er mensen die dat niet hebben dan? :Y)

ps. oisyn: je bent een eikel O-)

[ Voor 14% gewijzigd door curry684 op 10-01-2003 11:46 ]

Professionele website nodig?

Pagina: 1