tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
683
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Michl Michl ist offline Grünschnabel
    Registriert seit
    Jul 2010
    Beiträge
    2
    Hallo,

    ich beschäftige mich gerade mit der WinAPI und möchte ein kleines Programm schreiben, mit dem ich aus einem Fenster heraus über das Menü weitere Fenster öffne.
    Das habe ich auch (nach einem langen und harten Kampf ) hinbekommen.

    Jetzt hapert es nur noch an einer Kleinigkeit.
    Wie gesagt kann ich das Child window nach Auswahl eines Menü-Punktes mit CreateWindow öffnen. Wenn ich das Child schließe und anschließend über den selben Menüpunkt öffnen möchte geschieht allerdings nichts.
    Muss ich das Child window erst vollständig löschen bevor ich es mit CreateWindow erneut aufbaue?

    Bin leider noch ein blutiger Anfänger und kenne mich in der Ecke noch nicht so gut aus. Bin über jeden Hinweis dankbar.

    Danke & Viele Grüße
    Michl
     

  2. #2
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.358
    Blog-Einträge
    4
    Wie genau erstellst du bzw. löschst du das ChildWindow? Zeig mal deinen Code!
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  3. #3
    Michl Michl ist offline Grünschnabel
    Registriert seit
    Jul 2010
    Beiträge
    2
    Hi,

    hier mal mein Code.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    
     
    #include <windows.h>
     
    #define OPEN_WINDOW 101
     
    HINSTANCE main_inst;
    HWND hwnd_main, hwnd_child;
    WNDCLASS wc;
    HMENU main_menu;
     
    LRESULT CALLBACK WndMain (HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK WndChild (HWND, UINT, WPARAM, LPARAM);
     
    // MAIN WINDOW
    int WINAPI WinMain(HINSTANCE hinst_main, HINSTANCE root, LPSTR t, int d)
    { MSG msg_main;
     
    // REGISTER MAIN WINDOW
      wc.style        = CS_HREDRAW | CS_VREDRAW ;
      wc.lpfnWndProc  = WndMain;
      wc.cbClsExtra   = 0;
      wc.cbWndExtra   = 0;
      wc.hInstance    = hinst_main;
      wc.hIcon        = LoadIcon(NULL, IDI_APPLICATION);
      wc.hCursor      = LoadCursor(NULL, IDC_ARROW);
      wc.hbrBackground= NULL;
      wc.lpszMenuName =  NULL;
      wc.lpszClassName= "main";
     
      if (!RegisterClass(&wc)) 
             return 0;
     
    // CREATE MENU
      main_menu=CreateMenu();           
      AppendMenu(main_menu,MF_STRING,OPEN_WINDOW,"Open Child");
     
    // CREATE MAIN WINDOW
      main_inst = hinst_main;
      hwnd_main= CreateWindow("main",      //Name der Fensterklasse
                               "Main Window",        //Fenstertitel
                               WS_OVERLAPPEDWINDOW |  //Fensterstil
                               WS_VISIBLE,
                               CW_USEDEFAULT,         //x-Koordinate linke obere Ecke
                               CW_USEDEFAULT,         //y-Koordinate linke obere Ecke
                               500,                   //Fensterbreite
                               200,                   //Fensterhöhe
                               NULL,                  //Vaterfenster
                               main_menu,                  //Menü
                               hinst_main,                 //Programmzähler
                               NULL);                 //zusätzliche Parameter
     
      while (GetMessage(&msg_main,NULL,0,0)) DispatchMessage(&msg_main);
     
      return msg_main.wParam;
    }
     
    // CALLBACK OF MAIN WINDOW
    LRESULT CALLBACK WndMain(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
    { 
      switch(message)
      { case WM_COMMAND:
             switch(LOWORD(wparam))
                   { case OPEN_WINDOW: 
                               
                        {    // REGISTER CHILD WINDOW
                              wc.hIcon         = NULL;
                              wc.lpszClassName = "child";
                              wc.lpfnWndProc   = WndChild;
                              if (!RegisterClass(&wc))
                                return 0;
     
                              hwnd_child= CreateWindow("child",      //Name der Fensterklasse
                                                       "Child Window",        //Fenstertitel
                                                       WS_OVERLAPPEDWINDOW |  //Fensterstil
                                                       WS_VISIBLE,
                                                       CW_USEDEFAULT,         //x-Koordinate linke obere Ecke
                                                       CW_USEDEFAULT,         //y-Koordinate linke obere Ecke
                                                       500, 200,                   //Fensterhöhe
                                                       hwnd_main,                  //Vaterfenster
                                                       NULL,                  //Menü
                                                       main_inst,                 //Programmzähler
                                                       NULL);                 //zusätzliche Parameter
                        };       
     
                        return 0;
                   }
     
        case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
      }
     
      return DefWindowProc(hwnd, message, wparam, lparam);
    }
     
     
    // CALLBACK OF CHILD WINDOW
    LRESULT CALLBACK WndChild(HWND hwnd_child, UINT message, WPARAM wParam, LPARAM lParam)
    {
     
    return DefWindowProc (hwnd_child, message, wParam, lParam);
     
    }

    Danke für deine Hilfe!

    Viele Grüße
    Michl
     

  4. #4
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.358
    Blog-Einträge
    4
    Muss bei
    Code cpp:
    1
    
    while (GetMessage(&msg_main,NULL,0,0)) DispatchMessage(&msg_main);

    nicht noch ein TranslateMessage() rein?:
    Code cpp:
    1
    2
    3
    4
    5
    
    while (GetMessage(&msg_main,NULL,0,0))
    {
      TranslateMessage(&msg_main); 
      DispatchMessage(&msg_main);
    }
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  5. #5
    _GST_ Tutorials.de Gastzugang
    Du solltest die Window-Klasse "child" nicht jedes mal neu registrieren. Denn ab dem zweiten Mal erhälst du den Fehler, dass der Name bereits vergeben ist.
    Code :
    1
    2
    
    ERROR_CLASS_ALREADY_EXISTS
    1410 (0x582) Class already exists.
     

  6. #6
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.358
    Blog-Einträge
    4
    @_GST_: Du hast hier schon einige Beiträge geschrieben. Willst du dich nicht registrieren, dann kannst du auch Beiträge editieren
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  7. #7
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Ich kann mir kaum vorstellen, dass _GST_ das will
     

  8. #8
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.358
    Blog-Einträge
    4
    Wieso nicht?
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  9. #9
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Es soll vorkommen, dass hier auch Gäste schreiben, die eigentlich registriert sind, zum Beispiel weil sie an einem fremden PC keine Ahnung von ihrem Passwort haben
     

Ähnliche Themen

  1. Antworten: 19
    Letzter Beitrag: 06.12.07, 17:31
  2. Find Child Window
    Von ooandioo im Forum VisualStudio & MFC
    Antworten: 5
    Letzter Beitrag: 26.04.07, 11:21
  3. [MFC] Child Window in den Hintergrund
    Von ulmi im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 14.02.07, 16:05
  4. WinApi child Sync.probleme
    Von dark80 im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 02.08.06, 14:38
  5. CDialog als Child Window
    Von anmae im Forum VisualStudio & MFC
    Antworten: 8
    Letzter Beitrag: 24.10.05, 10:05

Stichworte