[C++ / Win32] Create child window

Pagina: 1
Acties:

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
hoi, ik heb het volgende probleem.
vanuit mijn mainwindow maak ik een preferenceswindow aan, deze erft van een klasse childwindow. ik roep dus de constructor aan van de preferenceswindow waar dan alle handles worden overgeheveld, in de debugger is ook te zien dan deze netjes gevuld worden...

na de constructor roep ik een functie aan die het window creeert en toont:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
if ( !( h_ChildWindow = CreateWindow(
                class_name,
                window_title,
                WS_VISIBLE | WS_SYSMENU,
                ChildWindowRect.left,
                ChildWindowRect.top,
                ChildWindowRect.right-ChildWindowRect.left,
                ChildWindowRect.bottom-ChildWindowRect.top,
                h_ParentWindow,
                (HMENU)NULL,
                h_ChildInstance,
                (void *)this ) ) )


hierbij zijn h_ParentWindow en h_ChildInstance dus goed overgenomen.

Met de functie GetLastError krijg ik echter error nr=6
Van MSDN leer ik dat dit het volgende betekent:
6 The handle is invalid. ERROR_INVALID_HANDLE

Voor de rest zijn alle andere parameters ook goed gevuls en is de laatste (void *)this nodig voor de te gebruiken WinProc functie.

Heeft iemand enig idee hoe dit zou kunnen?

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

curry684

left part of the evil twins

Die error betekent dat je h_ParentWindow of je h_ChildInstance invalid zijn. Dat kan meerdere oorzaken hebben... weet je zeker waar ze vandaan komen?

Ik vind vooral de term ChildInstance erg misleidend, ik mag hopen dat dit de globale HINSTANCE van je app is.

En sowieso trouwens is de term 'child window' gereserveerd voor buttons, edit controls e.d. :z

Professionele website nodig?


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
ja ze worden beide meegegeven in de constructor van preferenceswindow.
childinstance wordt dan inderdaad de handle van de applicatie.

childwindow zelf gebruik ik nooit letterlijk, dus er is geen conflict met de gereserveerde term.

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

curry684

left part of the evil twins

Kun je met een iets groter code-uittreksel komen? Of desnoods het project toemailen?

Professionele website nodig?


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

curry684

left part of the evil twins

ps.
WS_SYSMENU
Creates a window that has a window menu on its title bar. The WS_CAPTION style must also be specified.
Ik zou sowieso ipv WS_CAPTION gewoon WS_OVERLAPPEDWINDOW gebruiken.

Professionele website nodig?


Verwijderd

Deze code ziet er goed uit
Ik denk dat het probleem in je Callback functie zit met
de WM_CREATE of NC_CREATE functie.

  • drZymo
  • Registratie: Augustus 2000
  • Laatst online: 09-08 22:22
Verwijderd schreef op 20 november 2002 @ 18:38:
Deze code ziet er goed uit
Ik denk dat het probleem in je Callback functie zit met
de WM_CREATE of NC_CREATE functie.
Dat denk ik ook.

In je window procedure, die je meegegeven heb bij de creatie/registratie van je class, moet het WM_CREATE bericht afgevangen worden waarin de waarde TRUE of gewoon 0 terug gestuurd moet worden. Dit zorgt ervoor dat CreateWindow 'ziet' dat de creatie goed verlopen is welke dan een handle terug geeft. Als je dit niet doet dan krijg je deze error.

Tevens moeten _ALLE_ (edit: naja die jij niet nodig heb dan ;)) andere berichten afgevangen worden door de DefWindowProc. Want berichten als WM_NCCREATE moeten ook goed afgehandeld worden tijdens de creatie. Anders krijg je nog steeds deze zelfde error :P.

"There are three stages in scientific discovery: first, people deny that it is true; then they deny that it is important; finally they credit the wrong person."


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
was inderdaad een fout tijdens de 'wm_nccreate'...tnx
Pagina: 1