[MFC] CDialog

Pagina: 1
Acties:

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 21-06 17:10
Ik heb over dit onderwerp 1 topic gevonden, maar ook die oplossing werkt voor mij niet. Ik heb een paar CDialog's volledig vanuit source gemaakt (zonder Resource-editor dus), en als ik dan de ene CDialog vanuit de andere aan wil maken krijg ik of niks te zien, of een dikke error...

Debug Assertion Failed!
File: dlgcore.cpp (niet van mij)
Line: 497

Het enige wat ik doe is in de functie van de knop een instantie van de te openen GUI aanmaken, en vervolgens de functie DoModal aanroepen:

GKlantgegevens k;
k.DoModal();

Moet ik soms iets van een overloaded constructor maken voor de te openen CDialog die ook de owner accepteerd? Of moet ik ergens de code opnemen die normaal de resource-editor genereert zoals

FONT ...
BEGIN
...
END

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat is de assertion precies? Kun je de betreffende regel van dlgcore.cpp posten (als je uberhaupt die sourcefile ergens hebt staan ;))

Gebruik je toevallig common controls op je dialog, zoals bijvoorbeeld een treeview of listview? En heb je de common controls geinitializeert met InitCommonControls () alvorens je de dialog aanmaakt?

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.


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 21-06 17:10
int CDialog::DoModal()
{
// can be constructed with a resource template or InitModalIndirect
ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
m_lpDialogTemplate != NULL);

Dit is dus de MFC-voorgeprogrammeerde code die de API calls doet. Ik gebruik wel common controls, maar dat is het probleem niet. Want als ik de betreffende CDialog als uitgangsgui instel (degene die ik vanuit de CWinApp aanroep), laat ie 'm wel zien. Het probleem is dat ik niet vanuit de ene CDialog de andere aan kan maken.
De common controls worden niet vanuit InitCommonControls geinitaliseert, maar een Gui met alleen CEdit's en een CButton erop doet het ook niet.

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 21-06 17:10
Ik ben nu zelf al stapje verder door m'n constructor om te bouwen naar dit:
GOnderdelenSelecteren::GOnderdelenSelecteren(CWnd * pParent) : CDialog(GOnderdelenSelecteren::IDD, pParent)

Nu krijg ik geen error meer, alleen returned de functie DoModal een -1, en krijg ik dus ook niks te zien. (Eerst deed ik in de constructors van alle CDialog's een CreateEx, wat dus blijkbaar maar 1 keer mag).

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Die Create moet je idd niet gebruiken, dat wordt intern gedaan door de win32 API functie DialogBox (), die weer wordt aangeroepen als je DoModal () doet

Dat ie -1 retourneert wil zeggen dat ie de dialogbox niet aan kon maken... waarschijnlijk is er iets mis met je template, zoals het common controls probleem dat ik al eerder beschreef, maar je zei al dat dat het niet was. Misschien gebruik je een window class die niet geregistreerd is oid?

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.


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 21-06 17:10
ik heb volgens mij geen template, omdat ik de CDialog niet met de resource-editor heb aangemaakt. Die template is toch zoiets als:
IDD...
STYLE...
FONT ...
BEGIN
...
END

Maar als dat het is, waar moet ik die dan opnemen? Moet dat persé in de .rc? Of kan dat ook in de class zelf?

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack

Pagina: 1