Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » OnPaint

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
17.06.2006, 16:40 Uhr
xXx
Devil


Hello... ich muss imo etwas Programmieren... (nen Configurator)... soweit kein Problem... hab aber um das ganze für mich übersichtlicher zu halten das ganze in ein Paar Klassen gepackt... das funktioniert auch alles wunderbar... (Jajaa... das MsgProc Problem ist auch leicht zu Lösen ). Aber nu kommt das Problem... meine Paint Funktion wird zwar aufgerufen, aber er zeichnet nix!


C++:
LRESULT RCStatic::OnPaint(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
    ::HDC            hDC/* = GetDC(m_hWnd)*/;
    ::PAINTSTRUCT    ps;
    ::HPEN            hPenBg;
    ::HBRUSH        hBrushBg;
    ::SIZE            szText;
      
    if(wParam == 0)
        hDC = BeginPaint(hWnd, &ps);
    else
        hDC = (HDC)wParam;

    if(!hDC)
        return -1;

    hPenBg                = ::CreatePen(PS_SOLID, 1, RGB(238, 238, 238));
    hBrushBg            = ::CreateSolidBrush(RGB(255, 255, 255));
    HPEN    hOldPen        = (HPEN)::SelectObject(hDC, hPenBg);
    HBRUSH    hOldBrush    = (HBRUSH)::SelectObject(hDC, hBrushBg);

    ::Rectangle(hDC, m_rcStatic.left, m_rcStatic.top, m_rcStatic.right, m_rcStatic.bottom);
    ::SelectObject(hDC, hOldBrush);
    ::DeleteObject(hBrushBg);

    ::SetTextColor(hDC, RGB(237, 237, 237));
    ::SetBkMode(hDC, TRANSPARENT);
    ::GetTextExtentPoint32(hDC, m_lpstText, lstrlen(m_lpstText), &szText);
    ::ExtTextOut(hDC, (m_rcStatic.right  - szText.cx) / 2, (m_rcStatic.bottom - szText.cy) / 2, ETO_OPAQUE, &m_rcStatic, m_lpstText, lstrlen(m_lpstText), 0);

    ::MoveToEx(hDC, 6, 23, NULL);
    ::LineTo(hDC, m_rcStatic.right - 6, 23);
    //::DrawText(hDC, m_lpstText, (int)lstrlen(m_lpstText), &m_rcStatic, DT_WORDBREAK | DT_LEFT);

    ::SelectObject(hDC, hOldPen);
    ::DeleteObject(hPenBg);
    ::EndPaint(hWnd, &ps);
    //ReleaseDC(hWnd, hDC);

    return 0;
}


Ich würde ja selber noch weiter nach dem Fehler suchen, hab aber imo ziemlichen Zeitdruck


PS: Ich bin für jeden (sinvollen) Hinweiß dankbar!

Mfg
Deviloper

Dieser Post wurde am 17.06.2006 um 17:20 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.06.2006, 18:18 Uhr
xXx
Devil


Hat keiner eine Idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.06.2006, 19:23 Uhr
Oliver
S2-Pixelgeneral


HDC ungültig? GetLastError?
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.06.2006, 20:10 Uhr
xXx
Devil


GetLastError sagt das der Vorgang erfolgreich war
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.06.2006, 20:13 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



C++:
hDC = (HDC)wParam;


Wie kommst du darauf? Du solltest immer BeginPaint aufrufen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.06.2006, 20:21 Uhr
xXx
Devil


Ach man... Nein. ...

WM_PAINT
=>
Zitat:
For some common controls, the default WM_PAINT message processing checks the wParam parameter. If wParam is non-NULL, the control assumes that the value is an HDC and paints using that device context.


dazu auch:
Zitat:
Undocumented painting tips
I just want to mention an important feature of Windows here. The standard documention states that wParam and lParam will both be zero for the WM_PAINT message. This is fine, because we can do everything we want with the BeginPaint / EndPaint technique.

However, for alot of standard controls, Windows will sometimes send a WM_PAINT message with wParam set to a handle to a device context. In other words, Windows sometimes supplies a device-context for you, which will result in faster drawing. This means that it is not strictly necessary to use the BeginPaint/EndPaint pair all of the time. To take advantage of this scenario, you could check wParam to see if it is zero or not. If it isn't, then instead of using BeginPaint to get a device context, just use wParam as your HDC. i.e.

if(wParam == 0)
hdc = BeginPaint(ccp->hwnd, &ps);
else
hdc = (HDC)wParam;
Don't forget to do the same test when you come to call EndPaint - in fact, don't do anything when you have a pre-supplied HDC from Windows.

Now, you need to be careful using this technique, because the device context that windows supplies will not be initialized to it's default state, so you need to make sure that you set the device context up in the correct mapping mode, set the correct colours etc. (i.e, don't assume that the device context will be in a certain state). Also, you must restore ANY setting that you modify, be it font, mapping modes, colours etc.



Hat jemand noch ne andere Idee?

Dieser Post wurde am 17.06.2006 um 20:22 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.06.2006, 21:07 Uhr
Uwe
C/C++ Master
(Administrator)


Hi,
welche Farbe hat Dein Hintergrund? Bei mir wird's auf Weis gerade so sichtbar.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 17.06.2006 um 21:14 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.06.2006, 21:24 Uhr
xXx
Devil


Hmm... er zeichnet dann zumindest schonmal die Linie... also das MoveToEx und LineTo am Ende...(also wenn ich die Pen Farbe änder) ... aber mal sehen... der Rest muss auch gehen ;D
Dieser Post wurde am 17.06.2006 um 21:27 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
18.06.2006, 10:00 Uhr
Oliver
S2-Pixelgeneral


Ähm du hast weiße Stifte und Pinsel und zeichnest auf weißen Hintergrund?
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
18.06.2006, 10:42 Uhr
xXx
Devil


Tjo... ich hab die Farben alle angepasst Jetzt stimmen die, aber das ist es nicht.... das Echteck wird ja auch garnet gezeichnet... (Der Anwendungshintergrund ist grau... da sollte man das sehen )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: