CWnd::Create

Antifant

Grünschnabel
Kann mir jemand die Parameter dieser Funktion erklären?

CWnd::Create
virtual BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL)
 
LPCTSTR lpszClassName ist eine Zeichenfolge, die den Namen einer Klasse angibt. Klassen sind eine Windows-Parameter-Sammlung, die allgemeines Verhalten oder Aussehen von Fenstern bestimmt.
Man kann mittels RegisterClass eigene Klassen definieren oder von Windows vorgefertigte benutzen (z.Bsp. "EDIT" oder "BUTTON").

LPCTSTR lpszWindowName ist einfach der Text, der bei normalen Fenstern in der Titelleiste angezeigt wird, bei Buttons ist es der Text auf dem Button, usw...

DWORD dwStyle ist eine Zahl, die man aus mehreren möglichen Styles zusammensetzen kann. Diese bestimmen, ob das Fenster sichtbar (WS_VISIBLE), einen Rahmen hat (WS_BORDER), eine Titelleiste (WS_CAPTION) und einiges andere. Siehe dazu am besten unter der MSDN nach.

const RECT& rect enthält eine Struktur, die angibt, wie groß das Fenster sein soll und wo es stehen soll.

CWnd* pParentWnd gibt an, dass das zu erzeugende Fenster ein Child-Fenster von dem pParentWnd sein soll. Ist pParentWnd gesetzt (also ungleich NULL oder 0), dann ist das neue Fenster ein Child von dem Parent, und die Position im RECT ist relativ zu dem Parent. Auch sollte man dann zusätzlich WS_CHILD bei dwStyle angeben.

UINT nID ist eine ID, eine Art Kennzahl deines Fensters. Anhand dieser ID kann das Fenster später auch angesprochen werden. Diese ID wird bei Buttons usw. auch für Ereignisnachrichten verwendet, um zu unterscheiden, von wem die Nachricht kommt.

CCreateContext* pContext ist eine Parameterklasse, die bei MFC meistens intern genutzt wird und ein paar zusätzliche Werte enthält. Diesen Parameter kannst du üblicherweise auf NULL setzen bzw. gar nicht angeben (wird automatisch auf NULL gesetzt).


Keuch, schnauf. Ich empfehle dir, falls möglich, immer einen Link zur MSDN offen zu haben (wenn die MSDN nicht sogar lokal liegt). http://msdn.microsoft.com

[edit:]Huch, ich tippe mir einen Wolf und inzwischen sind da schon zwei neue Beiträge drin.
 
Hi,
zu den Parametern hätte ich auch noch mal ne Frage:
(Hab die Antwort in der MSDN nicht gefunden... sorry)

1. Kann ich, zum Beispiel bei nem Dialog, die Beschriftung diesen lpszWindowName noch ändern (genauer gesagt: ihm etwas hinzufügen), denn bei den Funktionen, die ich mal zwischendurch in der Hand hatte, hab ich keine gefunden, die mir den aktuellen Namen rausgibt.... (hoffe, ich brauch keine Brille ... ;) )

2. Wo bekomme ich denn so eine ID her, wenn ich mir das Fensterchen nicht im Ressourceneditor zusammenbaue? Ich weiß ja nicht, welche er schon vergeben hat, wenn ich nicht nachschauen kann, wo die vorherigen definiert sind, oder?

Bitte nicht böse sein, ich hab echt geguckt, aber mir fehlt da einfach noch ein wenig der Durchblick... :-(

Grüßle
Marei
 
Bei einem Dialog (oder praktisch allen anderen HWNDs) kannst du den Text mit SetWindowText/GetWindowText setzen und lesen.

Wenn das Fenster anderweitig zusammengebaut wird (von dir selbst), wird die ID meistens bei CreateWindow mit angegeben. Wenn das Fenster von einem anderen Programm ist, kann dir der Spy (ist bei Visual Studio mit bei) helfen. Da kannst du ein Fadenkreuz über ein Fenster ziehen und dir alle mögliche Daten davon anzeigen lassen.
 
Dankeschön, ist gespeichert.... :)

Ich hatte GetWindowText scheinbar missverstanden oder verwechselt... :-(
Und das mit der ID find ich einen ziemlich heißen Tipp ;) *) Danke!

Grüßle
Marei


*) Nur woher kommt denn diese ID? Die muss ich mir ja quasi selber aus dem Finger saugen, oder nicht? Und wenn ich nunmal schon irgendwelche Controls habe, dann haben die ja schon IDs. Und die kann ich ja schlecht doppelt benutzen, oder? Wenn ich aber nicht weiß welche schon vergeben sind, könnte das ja passieren. Gibt es da einen Bereich, den der Assistent immer schön frei lässt, oder wo kann ich nachschauen, welche IDs schon vergeben sind?
 
Zuletzt bearbeitet:
Wenn du die ID selbst vergibst, kannst du relativ frei wählen. Ganz unten sind ein paar für OK (0) und Abbruch (1), aber die kannst du durchaus auch selbst verwenden.

So richtig vordefinierte Bereiche gibt's nicht, es gibt die -1(bzw. 65535), die wird üblicherweise für Statics verwendet (vom Editor), aber das vermutlich auch nur, damit's nicht versehentlich doppelte gibt. Du könntest aber, um sicherzugehen, deine IDs von obenher (32000 abwärts sollte relativ sicher sein) durchnumerieren. Der Assistent beginnt immer von unten.

Im Visual Studio gibt es eine Möglichkeit nachzusehen, welche IDs definiert sind (und ob die evtl. gar nicht verwendet werden), das geht aber glaube ich nur bei MFC (Ressourcensymbole ansehen oder so ähnlich).

Programmatisch kann man's evtl. rausfinden, indem man GetDlgItem benutzt. Bekommt man kein HWND zurück, dann gab's die ID noch nicht. Ist aber nicht so prickelnd.
 

Neue Beiträge

Zurück