Child Window nicht anklickbar??



  • Hi,
    ich habe ein Parent Window, welches ein Edit Fenster als Child hat, nun mach ich ncoh ein kleines Child Fenster, wenn ich das aber anklicke, dann passiert nicht, ich kann nur auf das Edit-Feld schreiben:

    Das Edit-Feld wurde so erstellt:

    hWndEdit = CreateWindow(    "edit",
                                        0,
                                        WS_CHILD | WS_BORDER | WS_SYSMENU | WS_VISIBLE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_LEFT | ES_MULTILINE | ES_READONLY,
                                        0,
                                        0,
                                        iWidth,
                                        iHeight,
                                        this->m_phWnd[0],
                                        (HMENU)ID_FILE_NEW,
                                        this->m_phInstance[0],
                                        0);
    

    Und das Child-Fenster so:

    hWndAdd = CreateWindow( szAppName,
                                    "Hey",
                                    WS_OVERLAPPED | WS_CHILD | WS_VISIBLE | WS_CAPTION | WS_SYSMENU,
                                    0,
                                    0,
                                    100,
                                    200,
                                    this->m_phWnd[0],
                                    0,
                                    this->m_phInstance[0],
                                    0);
    

    Danke schon Mal im Voraus.

    Mfg
    Viets



  • beim zweiten fenster nur WS_CHILD | WS_VISIBLE als style. was haben die anderen da zu suchen?



  • hat sich erledigt. stell mal das prog online...



  • Du musst WM_LBUTTONDOWN und / oder WM_LBUTTONUP in der Callback-Procedur deiner Fensterklasse abfangen!



  • Hi,
    das mit den LBUTTONUP / DOWN hat auch nichts gebracht, vielleicht hab ich das auch falsch gemacht, hier ist der Quellcode, etwas gekürzt, aber compilierbar und das Prob ist da auch, wenn man zuerst auf Datei->Neu geht und dann auf Schüler->Hinzufügen, kann man mit dem Fenster nicht machen, der Edit Feld ist im Vordergrund.

    Danke schon mal im Voraus.

    Mfg
    Viets

    Hier der Code:
    [cpp]
    #include <Windows.h>

    LRESULT CALLBACK WndProc(HWND hWnd, unsigned int iMessage, WPARAM wParam, LPARAM lParam);

    const unsigned short iNumberOfChilds = 2;
    const char szAppName[] = "Test";

    enum
    {
    IDM_FILE_NEW = WM_USER + 1,
    IDM_FILE_OPEN,
    IDM_FILE_SAVE,
    IDM_FILE_SAVEAS,
    IDM_FILE_CLOSE,
    IDM_FILE_EXIT,
    IDM_STUDENT_ADD,
    IDM_STUDENT_CHANGE,
    IDM_STUDENT_DELETE,
    IDM_STUDENT_SHOWALL,
    IDM_STUDENT_SHOWSINGLE,
    IDM_COURSE_ADD,
    IDM_COURSE_CHANGE,
    IDM_COURSE_DELETE,
    IDM_COURSE_SHOW,
    IDM_HELP_WHOMADETHIS,
    ID_FILE_NEW = 0,
    ID_STUDENT_ADD
    };

    HMENU& CreateMainMenu(void)
    {
    HMENU hMenu;
    HMENU hPopupMenu;
    HMENU hPopupMenu2;

    hMenu = CreateMenu();
    {
    hPopupMenu = CreateMenu();
    {
    AppendMenu( hPopupMenu, MF_STRING, IDM_FILE_NEW, "&Neu...");
    AppendMenu( hPopupMenu, MF_STRING, IDM_FILE_OPEN, "Ö&ffnen...");
    AppendMenu( hPopupMenu, MF_STRING, IDM_FILE_SAVE, "&Speichern");
    AppendMenu( hPopupMenu, MF_STRING, IDM_FILE_SAVEAS, "Speichern &unter...");
    AppendMenu( hPopupMenu, MF_STRING, IDM_FILE_CLOSE, "S&chließen");

    AppendMenu( hPopupMenu, MF_SEPARATOR, 0, 0);
    AppendMenu( hPopupMenu, MF_STRING, IDM_FILE_EXIT, "&Beenden");
    AppendMenu( hMenu, MF_POPUP, reinterpret_cast<unsigned int>(hPopupMenu), "&Datei");
    }
    hPopupMenu = CreateMenu();
    {
    AppendMenu( hPopupMenu, MF_STRING, IDM_STUDENT_ADD, "&Hinzufügen");
    AppendMenu( hPopupMenu, MF_STRING, IDM_STUDENT_CHANGE, "&Bearbeiten");
    AppendMenu( hPopupMenu, MF_STRING, IDM_STUDENT_DELETE, "&Löschen");
    AppendMenu( hPopupMenu, MF_SEPARATOR, 0, 0);
    hPopupMenu2 = CreateMenu();
    {
    AppendMenu( hPopupMenu2, MF_STRING, IDM_STUDENT_SHOWALL, "&Alle");
    AppendMenu( hPopupMenu2, MF_STRING, IDM_STUDENT_SHOWSINGLE, "&Einzeln");
    AppendMenu( hPopupMenu, MF_POPUP, reinterpret_cast<unsigned int>(hPopupMenu2), "&Anzeigen");
    }
    AppendMenu( hMenu, MF_POPUP, reinterpret_cast<unsigned int>(hPopupMenu), "&Schüler");
    }
    hPopupMenu = CreateMenu();
    {
    AppendMenu( hPopupMenu, MF_STRING, IDM_COURSE_ADD, "&Hinzufügen");
    AppendMenu( hPopupMenu, MF_STRING, IDM_COURSE_CHANGE, "&Bearbeiten");
    AppendMenu( hPopupMenu, MF_STRING, IDM_COURSE_DELETE, "&Löschen");
    AppendMenu( hPopupMenu, MF_SEPARATOR, 0, 0);
    AppendMenu( hPopupMenu, MF_STRING, IDM_COURSE_SHOW, "&Anzeigen");
    AppendMenu( hMenu, MF_POPUP, reinterpret_cast<unsigned int>(hPopupMenu), "&WPK");
    }
    hPopupMenu = CreateMenu();
    {
    AppendMenu( hPopupMenu, MF_STRING, IDM_HELP_WHOMADETHIS, "&Wer hat das gemacht?");
    AppendMenu( hMenu, MF_POPUP, reinterpret_cast<unsigned int>(hPopupMenu), "&Hilfe");
    }

    }

    return hMenu;
    }

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iShowCmd)
    {
    MSG Msg;
    HWND hWnd;
    HMENU hMenu = CreateMainMenu();
    WNDCLASS WndClass;

    WndClass.style = CS_HREDRAW | CS_VREDRAW;
    WndClass.lpfnWndProc = reinterpret_cast<WNDPROC>(WndProc);
    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hbrBackground = reinterpret_cast<HBRUSH>(GetStockObject(GRAY_BRUSH));
    WndClass.hCursor = LoadCursor(0, IDC_ARROW);
    WndClass.hIcon = LoadIcon(0, IDI_APPLICATION);
    WndClass.hInstance = hInstance;
    WndClass.lpszMenuName = 0;
    WndClass.lpszClassName = szAppName;

    if(!RegisterClass(&WndClass))
    {
    MessageBox(0, "Das Program läuft mit Unicode und setzt WinNT **voraus", szAppName, MB_OK);
    return 0;
    }

    hWnd = CreateWindow( szAppName,
    szAppName,
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    0,
    hMenu,
    hInstance,
    0);

    UpdateWindow(hWnd);
    ShowWindow(hWnd, iShowCmd);

    while(GetMessage(&Msg, 0, 0, 0))
    {
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
    }

    UnregisterClass(szAppName, hInstance);

    return 0;
    }

    LRESULT CALLBACK WndProc(HWND hWnd, unsigned int iMessage, WPARAM wParam, LPARAM lParam)
    {
    static HWND hWndChild[iNumberOfChilds];
    static HWND hWndParent;
    static HINSTANCE hInstance;
    static unsigned short iXChar;
    static unsigned short iYChar;
    static unsigned short iWidth;
    static unsigned short iHeight;

    switch(iMessage)
    {
    case WM_CREATE:
    {
    hInstance = ((reinterpret_cast<LPCREATESTRUCT>(lParam))->hInstance);
    iXChar = LOWORD(GetDialogBaseUnits());
    iYChar = HIWORD(GetDialogBaseUnits());

    if(hWndParent == 0)
    {
    hWndParent = hWnd;
    }

    break;
    }
    case WM_SIZE:
    {
    if(hWnd == hWndParent)
    {
    iWidth = LOWORD(lParam);
    iHeight = HIWORD(lParam);
    MoveWindow(hWndChild[ID_FILE_NEW], 0, 0, iWidth, iHeight, true);
    }

    break;
    }
    case WM_COMMAND:
    {
    switch(LOWORD(wParam))
    {
    case ID_FILE_NEW:
    case IDM_FILE_NEW:
    {
    hWndChild[ID_FILE_NEW] = CreateWindow( "edit",
    0,
    WS_CHILD | WS_BORDER | WS_SYSMENU | WS_VISIBLE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_LEFT | ES_MULTILINE | ES_READONLY,
    0,
    0,
    iWidth,
    iHeight,
    hWndParent,
    (HMENU)ID_FILE_NEW,
    hInstance,
    0);

    return 0;
    }
    case IDM_FILE_CLOSE:
    {
    return 0;
    }
    case IDM_FILE_EXIT:
    {
    DestroyWindow(hWndParent);
    return 0;
    }
    case IDM_STUDENT_ADD:
    {
    hWndChild[ID_STUDENT_ADD] = CreateWindow( szAppName,
    "Hey",
    WS_OVERLAPPED | WS_CHILD | WS_VISIBLE | WS_CAPTION | WS_SYSMENU,
    0,
    0,
    100,
    200,
    hWndParent,
    0,
    hInstance,
    0);
    return 0;
    }
    }
    break;
    }
    case WM_DESTROY:
    {
    if(hWnd == hWndParent)
    {
    PostQuitMessage(0);
    }
    break;
    }
    }

    return DefWindowProc(hWnd, iMessage, wParam, lParam);
    } [/cpp]**



  • Hi,

    vielleicht solltest du das ganze als MDI Anwendung implementieren. Dann sollte auch sowas möglich sein. 🙂



  • Hi,
    kannst du mir sagen was ich dazu machen muss, ich versteh das mit dem MDI noch nciht so ganz.

    Danke schon mal im Voraus.

    Mfg
    Viets



  • Hi,

    lad dir mal meine Beispielanwendung (mit Source) runter.


Anmelden zum Antworten