Fehler bei BN_CLICKED



  • Hi zusammen,

    ich bin grad dabei mich ein wenig mit WinAPI zu basteln .. nun hab ich ein Fenster gezeichnet und zwei Button drauf ... soweit auch alles ok ....

    dann hab ich folgendes gemacht:

    case WM_COMMAND:       
    
                  switch (HIWORD(wParam))//Aktionsauswahl
                  {
    
                  case BN_CLICKED://Button gedrückt ?
                      switch(LOWORD(wParam))//Welcher ?
                      {
    
                      case but1://Button but (hwndbut)
                HWND hwndchild;         
                  hwndchild = CreateWindow ("Child", "Minifenster", WS_CHILD | WS_VISIBLE ,
                  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                  NULL, NULL,((LPCREATESTRUCT) lParam) -> hInstance, NULL) ;
    
                          break;
                      }
                      break;
    

    Ich bekomm auch keine Fehler oder sonstiges vom Compiler ... alles kein thema ... ich starte denn und wenn ich den Button dann drücke bekomme ich eine Fehlermeldung mit folgendem text:

    Unbehandelte Ausnahme in MeinProg.exe : 0xC0000005: Acces Violation

    Leider kann ich nich wirklich viel damit anfangen ... hätt da vieleicht jemand nen Tipp ??

    Edit:

    und in dieser Zeile von case but1 zeigt der Debuger mir den Fehler:

    NULL, NULL,((LPCREATESTRUCT) lParam) -> hInstance, NULL) ;
    

    Danke schonma im vorraus ...

    so long

    [ Dieser Beitrag wurde am 29.05.2003 um 22:47 Uhr von return0 editiert. ]

    [ Dieser Beitrag wurde am 29.05.2003 um 22:49 Uhr von return0 editiert. ]



  • msdn:

    wParam
    The low-order word contains the button's control identifier. The high-order word specifies the notification message.
    lParam
    Handle to the button.

    soweit ich weiss kannst du über das handle des buttons keine hinstance "ableiten". probiers mal mit:

    GetWindowLong(hwnd, GWL_HINSTANCE); //wobei hwnd das handle des hauptfensters ist
    

    mfg



  • @ f00lish .. schonma ein rechtherzliches dankeschön ...

    ich muss nu wirklich ma ne "dumme" frage stellen.... ich weiss nich so recht wie die geschichte nu angehn soll ....

    ums genauer auszudrücken ich weiss nich genau wo ich das:

    GetWindowLong(hwnd, GWL_HINSTANCE);
    

    hinsetzen soll .... bitte nicht gleich steinigen 😃

    so long ...

    [ Dieser Beitrag wurde am 30.05.2003 um 00:23 Uhr von return0 editiert. ]

    [ Dieser Beitrag wurde am 30.05.2003 um 00:23 Uhr von return0 editiert. ]



  • entweder so:

    hwndchild = CreateWindow ("Child", "Minifenster", WS_CHILD | WS_VISIBLE ,
                  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                  NULL, NULL, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
    

    oder:

    //am anfang der wndproc
    HINSTANCE hinst = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE);
    [..]
    hwndchild = CreateWindow ("Child", "Minifenster", WS_CHILD | WS_VISIBLE ,
                  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                  NULL, NULL, hinst, NULL);
    

    mfg



  • thx f00lish,

    ersteres hatte ich auch gemacht nur ohne das erste (HINSTANCE) in klammern ... deswegen hatte der compiler auch immer rumgemeckert .... ich wär doch besser gleich schlafen gegangen 😉

    danke dir....

    so long



  • So ... Compiler gibt zwar jetzt keinen Fehler mehr aus... allerdings wird das neue Fenster auch nicht angezeigt... ich hab schon alles mögliche versucht ... aber keine chance ....

    ich hab die ganze zeit das gefühl als hätt ich was übersehn .. ich weiss nur nich was ... ich poste nochmal den code nun in veränderter version ...

    case WM_COMMAND:       
    
                  switch (HIWORD(wParam))//Aktionsauswahl
                  {
    
                  case BN_CLICKED://Button gedrückt ?
                      switch(LOWORD(wParam))//Welcher ?
                      {
    
                      case but1://Button but (hwndbut)
    
                  HWND hwndchild;
    
                  hwndchild = CreateWindow ("Child" , "Minifenster", WS_OVERLAPPEDWINDOW,
                  CW_USEDEFAULT, CW_USEDEFAULT, 300, 300,
                  NULL, NULL,(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL ) ;
    
                          break;
                      }
                      break;
    

    dank euch schonmal recht herzlich...

    so long 😉



  • Sehe ich das richtig, du willst auf Bunnton-Klick ein weiteres Fenster öffnen?

    Eventuell solltest du bei CreateWindow auch eine Fenster-Prozedur für das neue Fenster angeben.



  • Japp... richtig .. ich möchte wenn ich den Button klicke ein neues Fenster öffnen... 😃

    nur welche Fenster-Prozedur soll ich hier noch angeben ??

    so long



  • was du brauchst sind dialoge...oder sehe ich das falsch?



  • Hi f00lish,

    ja und nein ... da ich ja oben schonma gesacht hab das ich mit der WinApi rumbastele wollte ich alles schön erst mal von hand zu fuss schreiben um ein
    wenig gefühl zu bekommen ... aber im grossen und ganzen hast du recht ... ich erklär mal kurz was ich im eigendlichen machen will....

    ich möchte ein fenster zeichnen und auf diesem fenster möchte ich so ziemlich alles an gängigen Steuerelementen usw von WinMain einbauen ... und zum einen wollt ich eben den Button den ich vorher gezeichnet hab ein neues Fenster öffnen lassen ...

    is zwar aklles nur spielerei soll mir aber helfen ein wenig besser durch das ganze durchzublicken ....

    ich hoffe ihr blickt jetzt noch durch was ich damit meine 😃

    so long ..



  • Na schreib eine Fensterprozedur für das neue Fenster und weiß sie bei CreateWindows zu.



  • @ f00lish

    wenn du Dialoge meinst die ich über die resource.h dann einfüge .. dann nein .. wollt ich nur noch erwähnen 🕶



  • btw: ein mit CreateWindow erstelltes Fenster muss mit ShowWindow auch noch angezeigt werden 🙂



  • Nicht wenn WS_VISIBLE gesetzt wurde.



  • Ich bin leider immernoch kein Stück weiter gekommen... ich weiss nicht worans liegt.... hat jemand von euch vieleicht schonma sowas gemacht ... ohne Dialoge mein ich ... wenn ja .. bitte melde dich 😃 ...

    so long...


Anmelden zum Antworten