C++ Frage

Fragen zu allen anderen Programmiersprachen.
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

C++ Frage

Beitrag von Leo »

Ich hab hier folgenden Code geschrieben:

Code: Alles auswählen

//
//
//

#include <windows.h>

/* Callback Deklarieren */
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);

/* Klassen Name */
char szClassName[ ] = "WindowsApp";

/* Ähnlich int Main() bei Konsole */
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)

{
    HWND hwnd;               /* Handle zum Fenster */
    MSG messages;            /* Nachrichten an das Fenster */
    WNDCLASSEX wincl;        /* Struktur für Die Fensterklasse */

    /* Fenster struktur */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* Hier wird das Callback angegeben */
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof(WNDCLASSEX);

    wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL; /* Kein Menü */
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;

    wincl.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);

    /* Registriert die Klasse */
    if(!RegisterClassEx(&wincl)) return 0;

    /* Fenster erstellen */
    hwnd = CreateWindowEx(
           0,
           szClassName,         /* Klassenname */
           "Mein Fenster",      /* TitelText */
           WS_OVERLAPPEDWINDOW,
           CW_USEDEFAULT,
           CW_USEDEFAULT,
           544,                 /* Breite */
           375,                 /* Höhe */
           HWND_DESKTOP,        /* Child Fenster vom Desktop */
           NULL,                /* Keine Menu */
           hThisInstance,
           NULL
           );


    /* Fenster wird angezeigt*/
    ShowWindow(hwnd, nFunsterStil);

    /* Hauptschleife */
    while(GetMessage(&messages, NULL, 0, 0))
    {
           /* Virtual Key in Nachricht umwandeln */
           TranslateMessage(&messages);
           /* Nachricht an Callback senden */
           DispatchMessage(&messages);
    }


    return messages.wParam;
}

/* Callback, aufgerufen von DispatchMessage */
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND button;
    switch (message)
    {
           case WM_DESTROY: /* Beenden */
             PostQuitMessage(0);
             return 0;

           case WM_CREATE: /*Buttons erstellen*/
             button = CreateWindow(
                      "Button",
                      "Beenden",
                      WS_CHILD | WS_VISIBLE,
                      20, 30, 200, 100,
                      hwnd,
                      NULL,
                      ((LPCREATESTRUCT) lParam) -> hInstance,
                      NULL
                      );
             return 0;

           case WM_SIZE: /*Buttons rezisen*/
             MoveWindow(button, LOWORD(lParam) / 2 - 80, HIWORD(lParam) - 40,
                                                           160, 22, TRUE);
             return 0;

           case WM_COMMAND: /*Button events*/
             {
               if (lParam == (LPARAM)button)
               {
                 if (HIWORD(wParam) == BN_CLICKED)
                 SendMessage(hwnd, WM_DESTROY, 0, 0);
                 }
               return 0;
             }
             return 0;

           default:
             return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}
Jetz die Frage an euch: Wie könnt ich das ganze Zeugs mit den Buttons und Fenster erstellen in eine Procedure fassen, like OpenWindow und CreateButton..?
MARTIN
Beiträge: 454
Registriert: 08.09.2004 14:03
Wohnort: Kiel

Beitrag von MARTIN »

Wie könnt ich das ganze Zeugs mit den Buttons und Fenster erstellen in eine Procedure fassen, like OpenWindow und CreateButton..?
Naja, zum Beispiel so:

Code: Alles auswählen

#include <windows.h>
 /*CreateButton*/
HWND CreateButton(HWND hwnd,LPARAM lParam,int x,int y,int w,int h,char *label)
{
   return CreateWindow("Button",
                      label,
                      WS_CHILD | WS_VISIBLE,
                      x, y, w, h,
                      hwnd,
                      NULL,
                      ((LPCREATESTRUCT) lParam) -> hInstance,
                      NULL
                      );

}

/*OpenWindow*/
HWND OpenWindow(WNDCLASSEX *wincl,int x,int y,int w,int h,char *titel)
{
   HWND hwnd = CreateWindowEx
   (
    0,
    (*wincl).lpszClassName,
    titel,
    WS_OVERLAPPEDWINDOW, 
    x,y,w,h,
    NULL, // Handle des Elternfensters
    NULL, 
    NULL, 
    NULL 
    );

    ShowWindow(hwnd, SW_SHOWNORMAL);
    UpdateWindow(hwnd);
    return hwnd;
}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{ 
    static HWND button,button2;

    switch (message) 
    { 
    case WM_CREATE: /*Buttons erstellen*/
        button = CreateButton(hwnd,lParam,20,30,200,30,"Beenden");
        button2 = CreateButton(hwnd,lParam,20,70,200,30,"######");
        return 0;
    case WM_DESTROY: 
        PostQuitMessage (0); 
        return 0;
    } 

   return DefWindowProc (hwnd, message, wParam, lParam); 
}

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrI, PSTR lpszArgument, int nFunsterStil)
{ 

HWND hwnd,hwnd2;
MSG msg;
char szClassName[] = "Fensterklasse";
WNDCLASSEX wincl;

/* Fenster struktur */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof(WNDCLASSEX);
wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
RegisterClassEx (&wincl);


hwnd = OpenWindow(&wincl,100,100,400,200,"fenster1");


 while (GetMessage (&msg, NULL, 0, 0))
  { 
    TranslateMessage (&msg); 
    DispatchMessage (&msg); 
  } 
  return msg.wParam;
} 
Und genau genomen das ist C-Code, man braucht hier kein C++, aber das nur so am rande.
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
Antworten