AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi C++ WndProc Funktion in Delphi übersetzen
Thema durchsuchen
Ansicht
Themen-Optionen

C++ WndProc Funktion in Delphi übersetzen

Offene Frage von "mirage228"
Ein Thema von mirage228 · begonnen am 6. Sep 2005 · letzter Beitrag vom 2. Okt 2005
 
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#1

C++ WndProc Funktion in Delphi übersetzen

  Alt 6. Sep 2005, 16:59
Hallo,

Ich habe mir diese WndProc in C++ angeschaut:
http://www.codeproject.com/buglist/MDIFlick.asp

Diese Funktion bewirkt, dass das Flickern beim Wechseln von maximierten MDI Fenstern aufhört.

Code:
LRESULT CChildFrame::WindowProc(UINT message,
                       WPARAM wParam, LPARAM lParam)
{
    if(message==WM_NCPAINT || message==WM_SIZE)
    {
        BOOL bMax;
        CMDIFrameWnd* pParentFrame = (CMDIFrameWnd*)GetParentFrame();
        if(pParentFrame)
        {
            CMDIChildWnd* pChildFrame = pParentFrame->MDIGetActive(&bMax);
            if(bMax)
            {   
                if(message==WM_NCPAINT) // non client area
                    return 0;
                   
                if(message==WM_SIZE) // client area
                {
                    if(wParam==SIZE_MAXIMIZED &&
                       pChildFrame==this) // active and maximized
                      return CMDIChildWnd::WindowProc(message, wParam, lParam);

                    SetRedraw(FALSE);
                    LRESULT ret =
                      CMDIChildWnd::WindowProc(message, wParam, lParam);
                    SetRedraw();
                    return ret;
                }
            }
        }
    }
    return CMDIChildWnd::WindowProc(message, wParam, lParam);
}
Leider habe ich nicht genügend MFC bzw. C++ Kenntnisse, um den Code vernünftig übersetzen.

Das habe ich "übersetzt", es funktioniert jedoch nicht korrekt (der NC Bereich wird gar nicht gezeichnet und beim Wiederherstellen wird auch nicht korrekt gezeichnet):

Delphi-Quellcode:
procedure TMDIChild.WndProc(var Msg: TMessage);
var
  Max: Boolean;
  Parent: TForm;
  MDI : TForm;
begin
  if (Msg.Msg = WM_NCPAINT) or (Msg.Msg = WM_SIZE) then
  begin
    Parent := Application.MainForm; // ParentFrame gibt es in Delphi nicht, nehme einfach den MDI Parent
    MDI := Parent.ActiveMDIChild; // Aktives MDI Child
    if MDI = nil then
    begin
      inherited WndProc(Msg);
      Exit;
    end;
    Max := MDI.WindowState = wsMaximized; // = pParentFrame->MDIGetActive(&bMax); ?
    if Max then
    begin
      case msg.Msg of
        WM_NCPAINT:
          Msg.Result := 0;
        WM_SIZE:
          begin
            if ((msg.WParam = SIZE_MAXIMIZED) or (msg.WParam = SIZE_RESTORED))
              and (MDI = Self) then // pChildFrame==this ?
            begin
              inherited WndProc(Msg);
              Exit;
            end;
            SendMessage(Handle, WM_SETREDRAW, Integer(False), 0);
            inherited WndProc(Msg);
            SendMessage(Handle, WM_SETREDRAW, Integer(True), 0);
          end;
        end;
    end;
  end else
    inherited WndProc(Msg);
end;
Kann mir jemand auf die Sprünge helfen?

mfG
mirage228

[edit]Als "Offene Frage" markiert.[/edit]
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz