Problem bei onPaint und Invalidate



  • Hi,

    ich will mein Device in einem Panel laden. Soweit so gut. es hat geklappt und ich kann die scene rendern. Das problem ist der berech der ausserhalb dieses Panels ist. Auf ihn wirkt der repaint nicht. Knöpfe sind nicht bedienbar, usw...

    Ich weis das is ein grundlegendes problem. Ich suche aber den ansatz warum es so ist und wie ich es generell beheben kann...

    Hier mal die initialisierung von meinem Device und die überschriebene onpaint :

    PresentParameters presentParams = new PresentParameters();
    
                presentParams.BackBufferFormat = Format.Unknown;
                presentParams.SwapEffect = SwapEffect.Discard;
                presentParams.Windowed = true;
                presentParams.DeviceWindow = this.render_window;
                presentParams.EnableAutoDepthStencil = true;
                presentParams.AutoDepthStencilFormat = DepthFormat.D16;
                presentParams.PresentationInterval = PresentInterval.Immediate;
    
                // Create the device
                device = new Device(0, DeviceType.Hardware, this.render_window, flags, presentParams);
    
    protected override void OnPaint(PaintEventArgs e)
            {
                // This is where our rendering happens...
                device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.White, 1.0f, 0);
                Render();
                Invalidate();
            }
    

    bin dankbar über jede antwort die mir zur behebung des problems hilft...

    Das Problem hab ich jetzt zwar mit einem Thread gelöst und ich kann die elemente bedienen. Bleibt aber immer noch eine Frage offen. Warum zeichnet er den Hintergrund des Frames nicht? nur dort wo komponenten initialisiert sind, die kann ich sehen und den Rahmen... der rest zeigt das an, wo er draufliegt. So in ca wie durchsichtig.... Weis jemand was das ist?

    Gruss Trider



  • Ähm was macht denn da dein Invalidate()? Ich kenn das nur von der WinAPI, dort macht es den aktuellen "Bildschirm" ungültig, hätte also demnach nichts in der OnPaint zu suchen, sondern ist eher ein Auslöser für OnPaint.



  • Das invalidate hat mir da das rendern möglich gemacht. Ich hab das aber jetzt in einen Thread gepackt. Das enderwindow ist in einem teil von einem split pane. sobald ich aber nun die grösse veränder, bekomm ich eine exception. klar, die device grösse hat sich geändert aber das device hat es nicht mitbekommen... wie kann ich das abstellen? oder besser gesagt wo?

    Gruss Trider


Anmelden zum Antworten