C WinAPI Hilfe

THE_HELL

Grünschnabel
Brauche Hilfe im C Code der Win32API.

Sorry.
Der Compiler meldet immer:
"112 C:\Users\Programme\Desktop\Arbeitsumgebung\Login\main.c [Warning] assignment makes pointer from integer without a cast "

Ich benutze Dev-C++.

Code:
C++:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "Login";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           szClassName,         /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           CW_USEDEFAULT,       /* The programs width */
           CW_USEDEFAULT,       /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND hButton;
    static HWND hEdit;
    
    switch (message)                  /* handle the messages */
    {
        case WM_CREATE:
             {
             FILE *f;
             char *buffer = NULL;
             int iFileSize;
             
             f = fopen("text.txt", "rb");
             
             if(f != NULL)
             {
                  fseek(f, 0, SEEK_END);
                  iFileSize = ftell(f);
                  buffer = malloc(iFileSize);
                  
                  fseek(f, 0, SEEK_SET);
                  fread(buffer, 1, iFileSize, f);
                  fclose(f);
             }
             
             hEdit = WindowCreateEx(WS_EX_CLIENTEDGE,
                                    "edit",
                                    buffer,          //Inhalt des Editfeldes
                                    WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE |
                                               ES_AUTOVSCROLL,
                                    0, 0, 0, 0,
                                    hwnd,
                                    NULL,
                                    ((LPCREATESTRUCT) lParam) -> hInstance,
                                    NULL); // <-Hier wird der Fehler markiert
             
             free(buffer);
             
             hButton = CreateWindow("button",
                                    "Beenden",
                                    WS_CHILD | WS_VISIBLE,
                                    0, 0, 0, 0,
                                    hwnd,
                                    NULL,
                                    ((LPCREATESTRUCT) lParam) -> hInstance,
                                    NULL);
             return 0;
             }
        case WM_SIZE:
             MoveWindow(hEdit,
                        0,
                        0,
                        LOWORD(lParam),
                        HIWORD(lParam),
                        TRUE);
             
             MoveWindow(hButton,                 //Handle des Buttons
                        LOWORD(lParam) / 2 - 80, //Mitte des Fensters - hälfte des Buttons
                        HIWORD(lParam) - 30,     //unterer Rand des Fensters - 30 Pixel (8 Pixel unter Button noch frei)
                        160,                     //X-Größe Button
                        22,                      //Y-Größe Button
                        TRUE);                   //Sichtbarkeit des Buttons
             return 0;
        
        case WM_COMMAND:
             if(lParam == (LPARAM)hButton)
                       if(HIWORD(wParam) == BN_CLICKED)
                                         SendMessage(hwnd, WM_CLOSE, 0, 0);
             return 0;
        
        case WM_CLOSE:
             {
             FILE *f;
             char *buffer = NULL;
             int iLength;
             
             iLength = GetWindowTextLength(hEdit);
             
             buffer = malloc(iLength);
             
             GetWindowText(hEdit, buffer, iLength + 1);
             
             f = fopen("Text.txt", "wb");
             fwrite(buffer, 1, iLength, f);
             fclose(f);
             
             free(buffer);
             
             DestroyWindow(hwnd);
             
             return 0;
             }
        
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
 
Zuletzt bearbeitet:
Du solltest auch dazuschreiben, was du möchtest. Gibts ein Problem, wenn ja welches?
Und verwende bitte, wenn du Code anzeigen möchtest [ code=cpp ] [ /code ]

Lg
 
Hallo

Zu
C:
WindowCreateEx
finde ich keine Referenz. Sollte das nicht
C:
CreateWindowEx
heissen?
Versuch's mal so:
C:
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,
                                    "edit",
                                    buffer,          //Inhalt des Editfeldes
                                    WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE |
                                               ES_AUTOVSCROLL,
                                    0, 0, 0, 0,
                                    hwnd,
                                    NULL,
                                    hInstance,
                                    NULL); // <-Hier wird der Fehler markiert

Gruss
cwriter
 
Zuletzt bearbeitet:
Zurück