Also wenn ich das mit dem Implementieren richtig verstanden hab, dann glaub ich hab ich das nicht gemacht
Aber könntest du mich kurz aufklären? Wäre echt nett, kenn mich nämlich noch nicht so gut aus. Also ich habs mir so überlegt:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#include <windows.h>
// Prototypen
//
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam, HWND *hText, HWND *hEditBox,
HWND *hUebernehmen, HWND *hBeenden);
HWND ErstelleHauptfenster (HINSTANCE hInst);
void ErstelleSteuerelemente (HWND hWnd, HINSTANCE hInst, HWND *hText, HWND *hEditBox, HWND *hUebernehmen, HWND *hBeenden);
|
Also ich hab die normale und die überladnee Callback funktion. Die Handles erstell ich im Hauptprogramm mit new, also:
|
C-/C++-Quelltext
|
1
2
3
4
|
HWND *hText = new HWND; // Handle für den statischen Text
HWND *hEditBox = new HWND; // Handle für die Editbox
HWND *hUebernehmen = new HWND; // Handle für Button "Übernehmen"
HWND *hBeenden = new HWND; // Handle für Button "Beenden"
|
Die Callback sieht dann so aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam, HWND *hText, HWND *hEditBox, HWND *hUebernehmen, HWND *hBeenden)
{
// Messages auswerten
switch (message)
{
// Fenster schließen? (Auch Alt-F4)
case WM_DESTROY:
{
// Nachricht zum Beenden schicken
PostQuitMessage (0);
return (0);
}
// Ab hier die Nachrichten unserer Child-Fenster bearbeiten
case WM_COMMAND:
{
switch (wParam)
{
// Wurde "Übernehmen" angeklickt?
case ID_BTN_UEBERNEHMEN:
{
char szText[256];
// Text aus der Editbox holen
GetWindowText (*hEditBox, szText, 256);
// Diesen Text in das Label schreiben und
// den Text der Editbox löschen
SetWindowText (*hText, szText);
SetWindowText (*hEditBox, "");
return (0);
}
// Wurde "Beenden" angeklickt?
case ID_BTN_BEENDEN:
{
int Resultat; // Rückgabewert der Messagebox
// Messagebox für Sicherheitsabfrage
Resultat = MessageBox (hWnd, "Wirklich beenden?",
"Programm beenden",
MB_YESNO | MB_ICONQUESTION);
// Wurde "Ja" angeklickt?
if (Resultat == IDYES)
{
// Ja, also Programm beenden
PostQuitMessage (0);
return (0);
}
// Nein, also ganz normal weiter
return (0);
}
} break;
} break;
}
// Die Nachricht wurde nicht von uns verarbeitet, also
// von Windows verarbeiten lassen
return (DefWindowProc (hWnd, message, wParam, lParam) );
} // WindowProc
|
Und der Fehler geht in etwa so:
1>Listing_10_3.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z)" in Funktion ""struct HWND__ * __cdecl ErstelleHauptfenster(struct HINSTANCE__ *)" (?ErstelleHauptfenster@@YAPAUHWND__@@PAUHINSTANCE__@@@Z)".
1>.\Debug/10_3.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
Muss ich dann praktisch die Callbackfunktion noch einmal schreiben (also nicht nur deklarieren)? Und wenn ja, gibt es auch eine einfachere und bessere Möglichkeit, als die, die mir durchs Hirn gejagt ist?