Nach menü anklicken , soll ein Fenster erscheinen



  • 😕

    ShowWindow (hConnectWnd, WS_VISIBLE);

    TUTS NICHT ! 😞 👎



  • WS_VISIBLE muß in CreateWindow nach WS_MINIMIZEBOX angegeben werden. Bei ShowWindow mußt Du SW_SHOW angeben.



  • cool aber das fenster soll ja erst erscheinen , wenn man im menü auf "verbinen " geklickt hat 😉



  • Dann WS_VISIBLE bei CreateWindow weglassen und beim Anwählen des Menüpunktes ShowWindow(hConnectWnd, WS_SHOW) aufrufen.



  • hab ich ja auh schon aber dann kommt das fenster ja nicht 😞



  • Die Deklaration von iCmdShow in Deiner WndProc solltest Du weglassen. iCmdShow wird von der WinMain übergeben. Wenn Du das lokal nochmal deklarierst, wird der eigentliche Show-Parameter ignoriert.



  • also ich hab jetzt nix verstanden ...

    da so ist mein code mom:

    LRESULT CALLBACK WndProc(HWND hWnd,UINT iMsg,
                             WPARAM wParam, LPARAM lParam)
    {
    
        char string[255];
        HWND  hConnectWnd,hMain;
    
       switch (iMsg)
          {
             case WM_CLOSE:
                DestroyWindow(hWnd);
                break;
             case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
             case WM_COMMAND:
                switch(LOWORD(wParam))
                   {
                    case ID_CONNECT:
    
                    ShowWindow (hConnectWnd,SW_SHOW);
    
                   break;
    


  • Ja, genau so meinte ich das.



  • ja ABER da kommt Kein 2Tes Fenster 😞 🙄


  • Mod

    Wenn der Timer schnell genug ist, hast Du eine Endlosschleife mit Stack-Overflow....



  • 🙄 kann man mir mal jetzt sagen Was los ist also nicht mit expertenausdrücke ???? 🙄 🤡



  • alllllllso

    ich will wenn man auf ein menü-button (fenster mit menü)
    drück soll ein 2tes fenster erscheinen

    aber es kommt kein 2tes fenster ... !!!

    ich habe allles schon probiert:

    ________________________________

    ShowWindow (hConnectWnd,SW_SHOW);

    ShowWindow (hConnectWnd,SW_SHOW); (mit CreateWindow ... SW_VISIBLE) und ohne

    ich hab case zu if gemacht
    ______________________________

    ABER NIX TUTS 👎 ⚠



  • du musst hConnectWnd noch vor WinMain definieren, also z.B.

    HWND hConnectWnd;
    
    int WINAPI WinMain ...
    


  • tja tuts immer noch nicht 😞 😞 😞 😞 😞



  • dann zeig doch einfach deinen gesamten code, ich habs jetzt schon mit wahrsagen probiert, hat nicht geklappt. also jetzt hilft nur noch dein code^^



  • #include <windows.h>
    #include "resource.h"
    HINSTANCE g_hInst;
    
    LPCSTR MainClassName = "Ein Menü-Beispiel";
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK ConPrefProc (HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, LPSTR szCmdLine, int iCmdShow)
    {
        char MainWin[] = "fenster1";
    
        char ConnectWin[] = "fenster2";
    
        UNREFERENCED_PARAMETER (hPrI);
        UNREFERENCED_PARAMETER (szCmdLine);
    
        g_hInst = hI;
        WNDCLASS wc;
        HWND  hConnectWnd,hMain;
    
        wc.style = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc = WndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hI;
        wc.hIcon = NULL;
        wc.hCursor = LoadCursor (NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);
        wc.lpszMenuName  = MAKEINTRESOURCE(IDR_MENU1);
        wc.lpszClassName = MainWin;
    
        RegisterClass (&wc);
    
        hMain = CreateWindow (MainWin, "test", WS_OVERLAPPEDWINDOW, 300, 300,410, 250, NULL, NULL, hI, NULL);
        ShowWindow (hMain, iCmdShow);
    
        UpdateWindow (hMain);
    
        wc.lpfnWndProc = ConPrefProc;
        wc.lpszMenuName = NULL;
        wc.lpszClassName = ConnectWin;
    
        RegisterClass (&wc);
    
        hConnectWnd = CreateWindow (ConnectWin, "test2",WS_SYSMENU | WS_MINIMIZEBOX   , 400, 400, 285,112, NULL, NULL, hI, NULL);
    
        MSG msg;
        while (GetMessage (&msg, NULL, 0, 0))
        {
            TranslateMessage (&msg);
            DispatchMessage (&msg);
        }
        return msg.wParam;
    
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd,UINT iMsg,
                             WPARAM wParam, LPARAM lParam)
    {
    
        char string[255];
        HWND  hConnectWnd,hMain;
    
       switch (iMsg)
          {
             case WM_CLOSE:
                DestroyWindow(hWnd);
                break;
             case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
             case WM_COMMAND:
                switch(LOWORD(wParam))
                   {
                    case ID_CONNECT:
    
                    ShowWindow (hConnectWnd,SW_SHOW);
    
                   break;
    
                   case ID_\1:
                   LoadString(GetModuleHandle(NULL),ID_STRING_ABOUT,
                              string,sizeof(string));
                   MessageBox(hWnd,string,"Über",MB_ICONINFORMATION);
                   break;
    
                   case ID_FILE_EXIT:
                      DestroyWindow(hWnd);
                      break;
             }
            break;
          }
       return DefWindowProc(hWnd,iMsg,wParam,lParam);
    }
    
    LRESULT CALLBACK ConPrefProc (HWND hConnectWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    
        HDC hdc;
      PAINTSTRUCT ps;
    
     switch (message)
     {
    
      case WM_PAINT:
          hdc = BeginPaint (hConnectWnd, &ps);
          SetBkColor(hdc, RGB(212,208,200) );
          TextOut (hdc, 100, 40, "Fenster B", 9);
          EndPaint (hConnectWnd, &ps);
    
      return 0; 
            case WM_DESTROY:
                PostQuitMessage (0);
            return 0;
        }
    
        return DefWindowProc (hConnectWnd, message, wParam, lParam);
    }
    


  • na ist ja kein wunder. du definierst hConnectWnd in der Callback-Funktion, aber woher soll das Programm denn wissen, dass du die gleiche hConnectWnd Variable meinst, wie in WinMain??
    Also muss das so aussehen:

    #include <windows.h>
    #include "resource.h"
    HINSTANCE g_hInst;
    
    LPCSTR MainClassName = "Ein Menü-Beispiel";
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK ConPrefProc (HWND, UINT, WPARAM, LPARAM);
    
    HWND  hConnectWnd, hMain;
    
    int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, LPSTR szCmdLine, int iCmdShow)
    {
        char MainWin[] = "fenster1";
    
        char ConnectWin[] = "fenster2";
    
        UNREFERENCED_PARAMETER (hPrI);
        UNREFERENCED_PARAMETER (szCmdLine);
    
        g_hInst = hI;
        WNDCLASS wc;
    
        wc.style = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc = WndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hI;
        wc.hIcon = NULL;
        wc.hCursor = LoadCursor (NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);
        wc.lpszMenuName  = MAKEINTRESOURCE(IDR_MENU1);
        wc.lpszClassName = MainWin;
    
        RegisterClass (&wc);
    
        hMain = CreateWindow (MainWin, "test", WS_OVERLAPPEDWINDOW, 300, 300,410, 250, NULL, NULL, hI, NULL);
        ShowWindow (hMain, iCmdShow);
    
        UpdateWindow (hMain);
    
        wc.lpfnWndProc = ConPrefProc;
        wc.lpszMenuName = NULL;
        wc.lpszClassName = ConnectWin;
    
        RegisterClass (&wc);
    
        hConnectWnd = CreateWindow (ConnectWin, "test2",WS_SYSMENU | WS_MINIMIZEBOX   , 400, 400, 285,112, NULL, NULL, hI, NULL);
    
        MSG msg;
        while (GetMessage (&msg, NULL, 0, 0))
        {
            TranslateMessage (&msg);
            DispatchMessage (&msg);
        }
        return msg.wParam;
    
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd,UINT iMsg,
                             WPARAM wParam, LPARAM lParam)
    {
    
        char string[255];  
    
       switch (iMsg)
          {
             case WM_CLOSE:
                DestroyWindow(hWnd);
                break;
             case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
             case WM_COMMAND:
                switch(LOWORD(wParam))
                   {
                    case ID_CONNECT:
    
                    ShowWindow (hConnectWnd,SW_SHOW);
    
                   break;
    
                   case ID_\1:
                   LoadString(GetModuleHandle(NULL),ID_STRING_ABOUT,
                              string,sizeof(string));
                   MessageBox(hWnd,string,"Über",MB_ICONINFORMATION);
                   break;
    
                   case ID_FILE_EXIT:
                      DestroyWindow(hWnd);
                      break;
             }
            break;
          }
       return DefWindowProc(hWnd,iMsg,wParam,lParam);
    }
    
    LRESULT CALLBACK ConPrefProc (HWND hConnectWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    
        HDC hdc;
      PAINTSTRUCT ps;
    
     switch (message)
     {
    
      case WM_PAINT:
          hdc = BeginPaint (hConnectWnd, &ps);
          SetBkColor(hdc, RGB(212,208,200) );
          TextOut (hdc, 100, 40, "Fenster B", 9);
          EndPaint (hConnectWnd, &ps);
    
      return 0; 
            case WM_DESTROY:
                PostQuitMessage (0);
            return 0;
        }
    
        return DefWindowProc (hConnectWnd, message, wParam, lParam);
    }
    


  • Mach dein hConnectWnd mal global, in deiner Wndproc hat hConnectWnd doch überhaupt keinen wert mehr.

    schirrmie



  • wie global machen

    hwnd hConnectWnd;
    ini hConnectWnd;

    oder wie



  • so wie fake geschrieben hat

    schirrmie


Anmelden zum Antworten