Seite 1 von 2

MDI + Mauscursor + WinXP Home = Random(Müll)

Verfasst: 17.09.2004 16:23
von DarkDragon
Hallo,

da man mit dem Standard WinXP Screenshotmaker(Print Taste) keine Mauszeiger mitaufnehmen kann, hab ich kein Bild für euch. Ich werde euch mein Problem so gut wie möglich beschreiben.

Startet ersteinmal dieses Beispielprogram:

Code: Alles auswählen

  If OpenWindow(0,0,0,400,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget,"MDIGadget") 
    If CreateGadgetList(WindowID(0)) And CreateMenu(0, WindowID(0)) 
      MenuTitle("Menu index 0") 
      MenuTitle("MDI windows menu") 
        MenuItem(0, "self created item") 
        MenuItem(1, "self created item") 
        
      MDIGadget(0, 0, 0, 0, 0, 1, 2, #PB_MDI_AutoSize) 
        AddGadgetItem(0, -1, "child window") 
        AddGadgetItem(0, -1, "child window") 
      SetGadgetState(0, #PB_MDI_TILEVERTICALLY)
          ; add gadgets here... 
      CloseGadgetList() 
    EndIf 
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow 
  EndIf
Führt den Mauszeiger auf das erste Fenster(Mitten rein). Dann fahrt langsam über den dünnen vergrößerungs Rand ins anderen Fenster(auch mitten rein). Welchen Cursor habt ihr nun? Wenn der Fehler bei euch auch ist solltet ihr den horizontalen Rahmenvergrößerungscursor haben. Wenn ihr ihn nicht habt, dann ist bei euch ein Normaler Pfeilcursor.

Nun:
Wie kann ich das Problem beheben?

Verfasst: 18.09.2004 01:02
von VoSs2o0o
Ist ja doll dieses Problem habe ich auch.
Das ist mir aber bei meinen MDI-Projekten nicht aufgefallen. Ergo: Dieses Problem müsste sich auf eine bestimmte Eigenschaft/Formatierung/Befehlsreihenfolge reduzieren lassen.

(WXP Pro SP1)

Verfasst: 18.09.2004 08:05
von DarkDragon
Ich hab es schon versucht mittels SetCursor_ und SetClassWord, aber nichts von beidem hielf mir.

Vermutlich gibts da einen PB internen Window Callback für die MDIChilds, denn ich hab auch einmal versucht die WndProc selbst zu basteln, und da sind die Fenster irgendwie kaputt gegangen oder so. Ich werds nochmals versuchen. Ich schau auch mal in das C++ MDI Beispiel von Dev-Cpp, vielleicht kann ich dem Mehr entnehmen.

Verfasst: 18.09.2004 16:21
von freak
Problem ist bekannt und behoben. Mit dem nächsten Update ist es weg.

Timo

Verfasst: 18.09.2004 20:14
von Mereep
Yeah, siehste freak, wenn es einer bemerkt... ;-)

Verfasst: 19.09.2004 10:02
von DarkDragon
Dann hätt ich aber doch auch noch ne Frage: wie kann man den Mauscursor in einem MDI Kind Fenster verändern? Ich brauch da eigentlich eh nen anderen Cursor.

Verfasst: 22.09.2004 20:39
von Mereep
SetCursor_(LoadCursor_())
Musste aber dann bei jeder Mausbewegung machen!

GreeZ Mereep

Verfasst: 23.09.2004 15:23
von DarkDragon
Hmm... davor hab ichs immer mit SetCursor_(#IDC_CROSS) versucht, leichtsinnsfehler :mrgreen: .
Naja, kann mir noch einer sagen, wie man das nur für ein MDIChild macht? Und dann auch nur im inneren?

Verfasst: 23.09.2004 19:54
von Mereep
Iw meinst du das "nur" für ein MDIChild?
Meinst du, dass der arrow immer dann erscheinen soll, wenn der user über einem solchen Childwindow ist?
Wenn ja:
Du musst die WindowProc deiner Childwindows umleiten(Das handle zu den Childwindows bekommst du, wenn du eines erstellst zurückgegeben).
SetWindowLong_(hwnd,#GWL_WNDPROC,@DeineProcedur())
In der Proc fängst du dann einfach #WM_MOUSEMOVE ab und setzt dann einfach deinen Zeiger so, wie du ihn haben willst mit dem Befehl, den ich dir gepostet hab.
Vergiss aber nicht die Orginalprocedure am Ende deiner Abfragen noch auszuführen.

Wenn du noch fragen hast, dann frag einfach nochmal ;-)

GreeZ Mereep

Verfasst: 24.09.2004 06:47
von DarkDragon
So, das hab ich eigentlich schon beim ersten Post meines Problems probiert, aber irgendwie geht dann alles kaputt. Ich mach eine Normale Callbackprozedur und plötzlich bekomm ich keine Events für das Fenster mehr und es reagiert auch nichtmehr.