[win32] basics control maken

Pagina: 1
Acties:

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Ik ben bezig m'n bestaande 3d app om te schrijven naar een control.
Ik heb inmiddels een wndclass geregistreerd, waaraan de proc is gekoppeld.
Subclassing, zoals werd aangedragen in http://gathering.tweakers.net/forum/list_messages/705516 thread is niet aan de orde.

Nu heb ik een paar vraagjes, aangezien ik een paar fundamenten mis bij het maken van een control.

1. De creatie, registratie van de wndclass en de mesage loop, komen deze ook in een WinMain te staan?
Lijkt me namelijk ergens vreemd, aangezien het geen applicatie is.

2. Verder wilde ik weten of de OpenGL functie SwapBuffers automatisch een WM_PAINT genereert?
Zo vind het tekenen nl altijd in de WM_PAINT plaats.

3. Ik neem aan de als ik deze waarde heb gezet

WndClass.lpszClassName = "my_control";

ik daarna een control kan aanmaken met CreateWindowEx( "my_control", "title", ... )?

4. Weet iemand goede resources voor het maken van controls in win32.

5. Weet iemand goede resource voor het maken van controls in MFC?
Zodat je bv later ook gewoon je 3D control zo ergens in je window kunt slepen.

met antwoorden op deze vragen zou ik al een beter beeld kunnen vormen.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Da Snake schreef op 20 February 2003 @ 13:40:
1. De creatie, registratie van de wndclass en de mesage loop, komen deze ook in een WinMain te staan?
Lijkt me namelijk ergens vreemd, aangezien het geen applicatie is.


:?
Je moet de window class toch registreren? Waar je dat doeit boeit niet, als het maar gedaan wordt voor je de control aanmaakt met createwindow of een dialog template.
2. Verder wilde ik weten of de OpenGL functie SwapBuffers automatisch een WM_PAINT genereert?
Zo vind het tekenen nl altijd in de WM_PAINT plaats.
dacht het niet, maar waarom probeer je het niet even?
3. Ik neem aan de als ik deze waarde heb gezet

WndClass.lpszClassName = "my_control";

ik daarna een control kan aanmaken met CreateWindowEx( "my_control", "title", ... )?
ja
4. Weet iemand goede resources voor het maken van controls in win32.
http://www.codeproject.com/
wellicht zijn er meer
5. Weet iemand goede resource voor het maken van controls in MFC?
Zodat je bv later ook gewoon je 3D control zo ergens in je window kunt slepen.
verwar dialog templates niet met MFC. Zowel native win32 als MFC maken gebruik van de dialog template editor om je window in te designen. Dat slepen op zich heeft dus weinig met MFC te maken (het classwizard gedeelte is weer wel MFC only).
In de template editor kun je altijd je eigen custom classes zetten, maar niet zoals de andere standaard controls. Wat je krijgt is simpelweg een donker rechthoekje, waarvoor je de window class kunt instellen, en de algemene window styles. Ook werkt je control niet in de preview.

Dit kan echter wel met ActiveX controls

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.


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
.oisyn schreef op 20 February 2003 @ 14:19:

[...]


:?
Je moet de window class toch registreren? Waar je dat doeit boeit niet, als het maar gedaan wordt voor je de control aanmaakt met createwindow of een dialog template.

[...]
maar er dient dus wel een winmain aanwezig te zijn. dit vond ik vreemd.
en dit control is dan toch als het ware de window class -> CreateWindow
of moet er dus een apart window worden aangemaakt die mijn control dan weer bevat, is dat niet dubbelop, hoe moet ik dit zien?

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 09:23

johnwoo

3S-GTE

Ergens in je app (waarschijnlijk in de WinMain, of een eigen initialisatieroutine) registreer je die window class, waarna je hem kan gebruiken.
Als je control in een .lib staat (wel zo handig, kun je em ook nog eens ergens anders gebruiken) exporteer je een eigen initialisatiefunctie. Als je hem in een .dll zet (ook wel handig, dan hoef je em niet eens mee te compilen met deze app) kun je hem zelf laten reggen zodra de dll geladen wordt (in dat geval hoeft je main app dus niet zelf te initen, anders wel).
Bij CreateWindow geef je de hWnd van de parent mee (meestal je app window), je hoeft dus geen twee window classes gaan maken :)

[ Voor 12% gewijzigd door johnwoo op 20-02-2003 14:43 ]

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

johnwoo schreef op 20 februari 2003 @ 14:42:
Als je control in een .lib staat (wel zo handig, kun je em ook nog eens ergens anders gebruiken) exporteer je een eigen initialisatiefunctie.


En dat kan ook nog automatisch :)

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.


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
ok het kan aan mij liggen. ik wil een control maken ala een button dus met een handle. eentje die wordt gecreerd met een createwindowex en waarop messages kunnen worden afgevuurd. dus niet met functies aan te spreken (init ofzo).

der is uiteraard een window (met een eigen wndclass), waarin deze control terecht komt.

dit window include dan de lib waar de control zich bevind. als ik het goed begrijp roept het window de createwindowex aan om de control uit de lib te creeren (bv in de winmain). dit siet hij aan de hand van de WndClass.lpszClassName en zal als parent ook de handle van zichzelf opgeven.

tot zover. in mijn controlclass ion de lib zet ik dan de wndclass registratie van mijn control, maar deze bevat dan toch geen eigen winmain of wel? want deze is applicatie onafhankelijk...

sorry maar ik op de eoa manier wil het maar niet 100% duidelijk worden.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

je hele denkwijze is fout, vergeet dat WinMain ()

Je window class moet geregistreerd worden. Hoe doe je dat? Door de code die de class registreerd in een functie te zetten, en deze functie aan te roepen

in je lib:
C++:
1
2
3
4
void initCustomContros ()
{
    // initializeer en registreer hier je window class
}


en dan roep je gewoon initCustomControl () aan vanuit de applicatie die van je lib gebruik maakt. Zo moeilijk is dat toch niet om te doorgronden :?

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.


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
nee dat is wel duidelijk... , maar is dit ook gebruikelijk, als je wil dat je control o.a. ook op user-defined messages reageert?
en kun je 'm dan nog steeds creeren met een createwindowex?

[ Voor 43% gewijzigd door Krooswijk.com op 20-02-2003 16:36 ]


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 09:23

johnwoo

3S-GTE

Da Snake schreef op 20 februari 2003 @ 16:16:
nee dat is wel duidelijk... , maar is dit ook gebruikelijk, als je wil dat je control o.a. ook op user-defined messages reageert?
en kun je 'm dan nog steeds creeren met een createwindowex?
Tuurlijk kan dat dan nog steeds :)
Extra messages zijn gewoon extra cases in de windowproc van je control en hebben verder niks met de creatie te maken :)

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Hier staat nog een basic tutorial voor custom controls:
http://freespace.virgin.net/james.brown7/tuts/custctrl.htm

www.madwizard.org


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Da Snake schreef op 20 februari 2003 @ 16:16:
nee dat is wel duidelijk... , maar is dit ook gebruikelijk, als je wil dat je control o.a. ook op user-defined messages reageert?
en kun je 'm dan nog steeds creeren met een createwindowex?


ik snap je niet
alle messages, ook user defined messages, gaan naar de windowproc van de window. Welke windowproc dat is is gedefinieerd in je WNDCLASSEX structure

wat is het verband met createwindowex :?

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.


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
het hele message gedeelte snap ik wel heb tenslotte alles al werkend in een applicatie, gaat meer om de behandeling van de control. ik wil 'm dus creeren aan de hand van de createwindowex.

hier een keer de structuur zoals ik het in gedachte had, met een beetje vaag de opmerkingen van hierboven erin verwerkt.
Afbeeldingslocatie: http://www.krooswijk.com/images/structuur.jpg

ik weet dat dit nog niet klopt. zoals te zien is wordt rechts het totale window geregistreerd en wordt de control die erop dient de komen geinitialiseerd met createwindowex. Links is deze al gecreeerd en worden messages juist afgehandeld.

het gaat dus meer om de communicatie met de control dan de interne werking. heb toch nog steeds geen goed beeld, ga der vanavond mee verder en zal ook bovenstaande link bekijken, raak hier een beetje gefrusteerd :(
maar jullie waarschijnlijk ook :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

zoals het er nu staat klopt het wel ongeveer, behalve dat je in winmain een register () hebt staan. Daar moet de aanroep naar init () in de library juist staan

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.


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
.oisyn schreef op 20 February 2003 @ 17:53:
zoals het er nu staat klopt het wel ongeveer, behalve dat je in winmain een register () hebt staan. Daar moet de aanroep naar init () in de library juist staan
ja die wndclass was voor het window zelf waar de control in komt. daar moet inderdaad nog die init bij. denk dat ik het nu compleet begrijp. die init komt in principe overeen met de functie InitCommonControls( ) die ook gebruikt dient te worden voor het creeren van windows. na de init kan dan ook pas de windowcontrol worden gecreeerd. verder veel aan die link gehad van madwizard, tnx.

  • klinz
  • Registratie: Maart 2002
  • Laatst online: 10-08 15:44

klinz

weet van NIETS

.oisyn schreef op 20 February 2003 @ 14:46:

[...]


En dat kan ook nog automatisch :)
Hoe dan?
Pagina: 1