Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

06.04.2007, 11:05

Win API: Brauche Hilfe beim Zeichnen!

Hallo!
Ich möchte einen Graphen zeichnen! Doch ohne WM_PAINT!
Geht das nicht auch mit einem Static Window??
So wie bei den Bitmaps -> http://spieleprogrammierer.de/phpBB2/vie…9&highlight=api

Bitte ! Helft mir!

Gruß Flo

Danke im vorraus :)

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

2

06.04.2007, 11:41

nun, du kannst natürlich auf einen DC zeichnen und den dann als bitmap übergeben.
Außerdem kannst du dir ja jederzeit den DeviceContext des Fensters holen mit hDC=GetDC(hWnd) und REleaseDC(hDC) wieder freigeben...

3

06.04.2007, 12:12

Win API

OK danke!
Kann man aber auch evt das was man in wm_paint zeichnet vorheben!? Also in den vordergrund vor die buttons und editfelder??

Gruß Flo

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

4

06.04.2007, 13:34

afaik nein...
du kannst aber ein child fenster erzeugen und auf dessen kontext was malen...

5

06.04.2007, 17:04

kann ich denn das childfenster auch durchsichtig machen?
Gruß Flo

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

6

07.04.2007, 08:25

Ja,
mit dem folgenden Code von Nix da/unsigned long...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    // Prototyp für den Funktionspointer auf 'SetLayeredWindowAttributes'. 

typedef int (__stdcall * SLWA) (::HWND__* hwnd, unsigned long key, unsigned char alpha, unsigned long flag); 

// /////////////////////////////////////////////////////////////////////////// 

// PUBLIC 

// 

// Setzt dem Fenster einen Transparenzwert (Alphablending) zwischen 0 und 100. 

// ACHTUNG: Nur lauffähig auf Systemen von NT4 aufwärts. 

// /////////////////////////////////////////////////////////////////////////// 

bool IWindow::set_alpha (unsigned long percent) 
{ 
        // Bei 100 Prozent den Stil '0x00080000' für das Blending entfernen. 

    if (percent >= 100) 
    { 
            // Stil '0x00080000' entfernen 

        if (::SetWindowLongW (hwnd_, GWL_EXSTYLE, ::GetWindowLongW (hwnd_, GWL_EXSTYLE) & ~0x00080000) != 0) 
            return (false); 
        
            // Fenster und Kinder auffordern sich neu zu zeichnen. 

        return (::RedrawWindow (hwnd_, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN) != 0); 
    } 

  
        // Funktionspointer für die Funktion 'SetLayeredWindowAttributes' bereitstellen 

        // und Zeiger auf das Modul 'user32.dll"' beschaffen 

    ::SLWA          set_layered_window_attributes   = NULL; 
    ::HINSTANCE__*  module                          = ::GetModuleHandleW (L"USER32.DLL"); 

        // Prüfen ob das Modul geladen werden konnte 

    if (!module) 
        return (false); 

        // 'SetLayeredWindowAttributes' aus dem Modul 'user32.dll' entnehmen und auf Funktionspointer legen. 

    if (!(set_layered_window_attributes = reinterpret_cast<::SLWA>(::GetProcAddress (module, static_cast<char*>("SetLayeredWindowAttributes"))))) 
        return (false); 
    
        // Stil '0x00080000' setzen. 

    ::SetWindowLongW (hwnd_, GWL_EXSTYLE, ::GetWindowLongW (hwnd_, GWL_EXSTYLE) | 0x00080000); 

        // Alphablending setzen. 

    return (set_layered_window_attributes (hwnd_, 0, static_cast<unsigned char>(percent * 255 / 100), 0x00000002) != 0); 
} 

Werbeanzeige