Edit Box?



  • Hy,

    Ich wollte nur ein Fenster mit zwei Edit Boxen in denen ich schreiben kann und zwischen denen ich mit Tab wechseln kann.

    Nun wenn ich jetzt die Messages (VK_TAB) in den Edit Boxen abfangen will benötige ich doch SetWindowLong. Aber wenn ich das in meinen Code drin habe wird die Box nicht angezeigt.

    Warum??? 😕
    Was mache ich falsch?? 😕

    Mein Code:

    #include "Windows.h"
    
    LRESULT APIENTRY EditProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
    LRESULT APIENTRY MainProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
    
    inline void Init(void);
    WNDPROC   oldproc;
    
    HWND hwnd;
    HWND edit1;
    HWND edit2;
    
    HINSTANCE hInst;
    
    int APIENTRY WinMain(HINSTANCE hInstx,HINSTANCE hPrev,char linecmd[3],int CmdShow)
    {
    
        MSG msg;
    
        hInst = hInstx;
    Init();
    
        while(GetMessage(&msg,0,0,0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
    return 0;   
    }
    
    inline void Init(void)
    {
    
        WNDCLASS wc;
    
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hbrBackground = (HBRUSH) (COLOR_WINDOW+2);
        wc.hInstance = hInst;
        wc.hIcon = 0;
        wc.hCursor = 0;
        wc.lpfnWndProc = (WNDPROC) MainProc;
        wc.lpszClassName = "wnd";
        wc.lpszMenuName = 0;
        wc.style = CS_HREDRAW | CS_VREDRAW;
        RegisterClass(&wc);
    
        hwnd = CreateWindow("wnd","wnd",
            WS_OVERLAPPEDWINDOW,
            200,200,
            400,300,hwnd,0,hInst,0);
        ShowWindow(hwnd,SW_SHOW);
        UpdateWindow(hwnd);
    }
    
    LRESULT APIENTRY MainProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
    {
    
    switch(msg)
    {
    
    case WM_DESTROY:
            PostQuitMessage(WM_QUIT);
    return 0;
    
    case WM_CREATE:
    {
    edit1 = CreateWindowEx(WS_EX_STATICEDGE,"Edit","edit1",
                    WS_VISIBLE | WS_CHILD,
                    0,0,200,20,hwnd,0,hInst,0); 
    edit2 = CreateWindow("Edit","edit2",
                    WS_VISIBLE | WS_CHILD,
                    0,40,200,20,hwnd,0,hInst,0);
    oldproc = (WNDPROC) SetWindowLong(edit1,GWL_WNDPROC,(LONG)(WNDPROC)EditProc);
    }
    return 0;
    
    case WM_RBUTTONDOWN:
        PostQuitMessage(WM_QUIT);
    return 0;
    
    case WM_LBUTTONDOWN:
    
    return 0;
    
    case WM_PAINT:
    PAINTSTRUCT ps;
    BeginPaint(hwnd,&ps);
    EndPaint(hwnd, &ps);
    return 0;
    
    case WM_COMMAND:
            {
    
            switch(LOWORD(wParam))
            {
    
            }
    
        }
        return 0;
    
        default: return DefWindowProc(hwnd,msg,wParam,lParam);
            }
    
        return 0;
    }
    
    //------------------------------ edit callback ---------------------------------
    LRESULT CALLBACK EditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
            if(VK_TAB)SendMessage(NULL,WM_NEXTDLGCTL,0,0);
        }
        CallWindowProc((WNDPROC)oldproc, hwnd, message, wParam, lParam);
        return 0;
    }
    

    Danke für eure Hilfe



  • du mußt imho beide editfelder longsetten 🙂



  • Such mal hier im Forum nach IsDialogmessage, dann ersparst du dir das mit dem Subclassing.



  • @ crass

    WAT???

    @ Luckie

    Entweder bin ich zu dumm oder es geht net???





  • Vielen Dank.
    Ich habe WS_TABSTOP vergessen.

    Noch ne frage du hast zum Thema "Hilfe Fenster" geschrieben das auf deiner Seite
    ein tut zum download ist.
    Kannst du mal den Link direkt zum Download senden???

    Danke

    Rene



  • http://www.luckie-online.de/delphi/win32apidl.shtml

    Bezieht sich allerdings was die Einbindung in den Code angeht auf Delphi.



  • Schade ich dachte es geht dort um das erstellen des Files direct.

    Trotzdem Danke.


Anmelden zum Antworten