Eigenes Steuerelement
-
Hallo,
kennt jemand eine Anleitung, wie man ein eigenes Steuerelement erstellt (bzw. was man mit den nötigen Variablen macht, die man für jedes einzelne braucht)?Danke
Ole
-
-
Ja, das ist schon klar, aber was mache ich mit den Variablen, die irgendeinen Zustand speichern sollen? Die müssen doch für jedes Fenster neu erstellt werden...
-
- struct/class mit allen Variablen erstellen
- Instanz der Struct bei WM_CREATE mit malloc/new anlegen
- mit SetWindowLong den Pointer zur Struktur mit dem Fenster assoziieren
- mit GetWindowLong den Pointer holen, wenn du die Variablen benutzen willst
- bei WM_DESTROY wieder freigeben (free/delete)
-
Ich hab' bisher den Code:
struct ControlClass { static TCHAR text[200]; PAINTSTRUCT ps; HDC hdc; static LOGFONT Unterstrichen; static HFONT hUnterstrichen; static BOOL aktiv; static HPEN pen; static RECT rect; static TEXTMETRIC tm; }; . . . LRESULT CALLBACK LinkProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { ControlClass *CC = (ControlClass*) GetWindowLong(hwnd, GWL_USERDATA); switch(message) { case WM_CREATE: CC = new ControlClass; SetWindowLong(hwnd, GWL_USERDATA, (long) CC); . . . case WM_DESTROY: delete CC;
Jetzt gibt's beim Linken aber immer den Fehler:
error LNK2001: Nichtaufgelöstes externes Symbol "public: static struct tagRECT ControlClass::rect" (?rect@ControlClass@@2UtagRECT@@A)
-
Warum hast du einige der Member statisch gemacht?
-
Ich weiß nicht, ob das bei der Struktur sein muss, aber manche Werte sollen auch noch bei der nächsten Nachricht, die das Steuerelement erhält, erhalten bleiben...
[edit]
Muss wohl nicht sein... Jedenfalls klappt's jetzt, danke!
[/edit]
-
Die Werte bleiben auch so erhalten. Du erstellst eine Instanz der Struktur pro Fenster doch nur einmal.
Statisch müssten die nur sein, wenn alle Steuerelemente die du von dieser Fensterklasse erstellst, die selben Variablenwerte haben sollten.