Funtionskopf fehlt
-
Ich habe einen beenden Button, aber sobald ich einen zweiten hinzufüge gibt es den Fehler "Funktionskopf fehlt - Parameterliste im altem Stil?"
[code]
// erster Button mit dem alles noch funktioniert
LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam,
LPARAM lparam){
static HWND hButton;switch (message)
{
case WM_CREATE:
{
hButton = CreateWindow( "button",
"Beenden",
WS_CHILD | WS_VISIBLE,
0, 0, 0, 0,
hwnd,
NULL,
((LPCREATESTRUCT) lparam) -> hInstance,
NULL);
return (0);
}
case WM_SIZE:
{
MoveWindow(hButton, LOWORD(lparam) / 1 - 180, HIWORD(lparam) - 30,
160, 22, TRUE);
return (0);
}
case WM_COMMAND:
{
if (lparam == (LPARAM)hButton)
{
if (HIWORD(wparam) == BN_CLICKED)
SendMessage(hwnd, WM_CLOSE, 0, 0);
}
return (0);
}
case WM_DESTROY:
{
done = TRUE;
PostQuitMessage(0);
return (0);
}
}
return (DefWindowProc(hwnd, message, wparam, lparam));
}// zweiter Button, sobald dieser in den Code eingefügt wird gibt es den Fehler
{
static HWND hButton;switch (message)
{
case WM_CREATE:
{
hButton = CreateWindow( "button",
"Beenden",
WS_CHILD | WS_VISIBLE,
0, 0, 0, 0,
hwnd,
NULL,
((LPCREATESTRUCT) lparam) -> hInstance,
NULL);
return (0);
}
case WM_SIZE:
{
MoveWindow(hButton, LOWORD(lparam) / 2 - 150, HIWORD(lparam) - 30,
160, 22, TRUE);
return (0);
}
case WM_COMMAND:
{
if (lparam == (LPARAM)hButton)
{
if (HIWORD(wparam) == BN_CLICKED)
SendMessage(hwnd, WM_CLOSE, 0, 0);
}
return (0);
}
case WM_DESTROY:
{
done = TRUE;
PostQuitMessage(0);
return (0);
}
}
return (DefWindowProc(hwnd, message, wparam, lparam));
}ach ja, ich benutze den microsoft c++ 6.0 compiler
Danke schon mal im Voraus.
-
Du kannst nicht einfach den Rumpf deiner MessageProc kopieren, sondern musst das schon beides da mit hineinpacken

static HWND hButton1; static HWND hButton2; switch (message) { case WM_CREATE: { hButton1 = CreateWindow( "button", "Beenden", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, NULL, ((LPCREATESTRUCT) lparam) -> hInstance, NULL); hButton2 = CreateWindow( "button", "Beenden", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, NULL, ((LPCREATESTRUCT) lparam) -> hInstance, NULL); return (0); } case WM_SIZE: { MoveWindow(hButton1, LOWORD(lparam) / 1 - 180, HIWORD(lparam) - 30, 160, 22, TRUE); MoveWindow(hButton2, LOWORD(lparam) / 2 - 150, HIWORD(lparam) - 30, 160, 22, TRUE); return (0); } case WM_COMMAND: { if (lparam == (LPARAM)hButton1) { if (HIWORD(wparam) == BN_CLICKED) SendMessage(hwnd, WM_CLOSE, 0, 0); } if (lparam == (LPARAM)hButton2) { if (HIWORD(wparam) == BN_CLICKED) SendMessage(hwnd, WM_CLOSE, 0, 0); } return (0); } case WM_DESTROY: { done = TRUE; PostQuitMessage(0); return (0); } } return (DefWindowProc(hwnd, message, wparam, lparam));Am besten verwendest du für deine Controls IDs, dann musst du dir nicht mehr deren Handle merken und kannst in WM_COMMAND mit einem switch das ganze regeln:
switch(GetDlgCtrlID((HWND)lparam)) { case ID_BUTTON_1: if (HIWORD(wparam) == BN_CLICKED) SendMessage(hwnd, WM_CLOSE, 0, 0); break; case ID_BUTTON_2: if (HIWORD(wparam) == BN_CLICKED) SendMessage(hwnd, WM_CLOSE, 0, 0); break; } return (0);
-
Danke für die schnelle Antwort
Ich bin halt noch absoluter Anfänger
.
-
sorry aber wenn ich es jetz so mach:
LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam,
LPARAM lparam)static HWND hButton1;
static HWND hButton2;switch (message)
{
case WM_CREATE:
{
hButton1 = CreateWindow( "button", "Beenden", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, NULL, ((LPCREATESTRUCT) lparam) -> hInstance, NULL);
hButton2 = CreateWindow( "button", "Beenden", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, NULL, ((LPCREATESTRUCT) lparam) -> hInstance, NULL);
return (0);
}
case WM_SIZE:
{
MoveWindow(hButton1, LOWORD(lparam) / 1 - 180, HIWORD(lparam) - 30, 160, 22, TRUE);
MoveWindow(hButton2, LOWORD(lparam) / 2 - 150, HIWORD(lparam) - 30, 160, 22, TRUE);
return (0);
}
case WM_COMMAND:
{
if (lparam == (LPARAM)hButton1)
{
if (HIWORD(wparam) == BN_CLICKED)
SendMessage(hwnd, WM_CLOSE, 0, 0);
}
if (lparam == (LPARAM)hButton2)
{
if (HIWORD(wparam) == BN_CLICKED)
SendMessage(hwnd, WM_CLOSE, 0, 0);
}
return (0);
}
case WM_DESTROY:
{
done = TRUE;
PostQuitMessage(0);
return (0);
}
}
return (DefWindowProc(hwnd, message, wparam, lparam));}
bekomme ich folgende Fehlermeldungen.
warning C4518: 'static ' : Unerwartete(r) Speicherklassen- oder Typbezeichner; wird ignoriert
error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'HWND'
fatal error C1004: Unerwartetes Dateiende gefundenUnd dann hab ich noch eine Frage.
Wie mache ich es das der Qulltext farbig dargestellt wird so wie in c++ und die Klammern nicht immer nach links an den Rand gesetzt werden.
-
der code wird mit "[ cpp ]" eingeleitet und endet auf "[ /cpp ]" mit ohne leerzeichen hinter den klammern.
es währe ganz nützlich, wenn du dir einen compiler zulegst, der noch zeilen angibt, so ist es einfacher, fehler zu finden.
p.s.: LEITEST DU DIE FUNKTION MIT "{" EIN UND ENDET SIE MIT "}", z.b.:
int HalloProc(HWND hWnd, int iNumber) { //jetzt sind da klammern return(0); }?
-
Bei dir fehlt die öffnende geschweifte Klammer nach dem Funktionskopf...