[C++] hWnd? (Aero Effekt im ganzen Fenster)

Termy2007

Mitglied
Hi@all!
Ich habe im Internet (wo auch sonst...) gelesen, dass man unter Vista ein Fenster vollständig transparent machen kann! Also nicht mit der Tansparenteinstellung (das wäre ja einfach) sondern mit dem Aero Effekt!
Beschrieben wurde das so:
Man dehnt einfach die Glasränder so weit nach innen aus, dass sie die Mitte mitbedecken!

Um das machen zu können benötigt man erstmal das Windows SDK in der die wdmapi.h drin ist! Dort gibt es folgende Funktion:
Code:
DwmExtendFrameIntoClientArea()
Sie benötigt 2 Parameter:
Einen HWND Wert der das zu dehnende Fenster beschreibt und einen MARGINS Wert der die Weite in Pixel angibt wie weit der Glasbereich gedehnt werden soll! Und zwar für link, rechts, unten und oben.

Mein Code sieht bisher so aus:
Code:
MARGINS mar = {-1,-1,-1,-1};
DwmExtendFrameIntoClientArea (m_hWnd, &mar );
Die -1en bewirken, dass das Fenster vollständig mit Glas überdeckt wird!

Mein Problem:
error C2065: 'm_hWnd' : undeclared identifier
Was mache ich falsch?

Hier meine Includes:
Code:
#include <iostream>
using namespace std;
#include <windows.h>
#include <stdio.h>
#include "dwmapi.h"
#include <tchar.h>
#include <stdlib.h>
 

#pragma comment(lib, "dwmapi.lib")

Freue mich auf Antworten!
Termy2007

PS: Das "(Aero Effekt im ganzen Fenster)" sollst interessanter machen;-)
 
Das HWND Handle musst du schon selbst irgendwo herholen. Sei es mit CreateWindow das Fenster erstellen oder ähnliches.
 
Hmmm..
Ich prgrammiere in Visual C++ Codename "Orcas" Express.
Dort kann man das Handle von einem Objekt einfach aufrufen:
Code:
Form1::Handle
Doch dann gibt er folgendess beim Compilieren aus:
cannot convert parameter 1 from 'System::IntPtr' to 'HWND'

Termy2007
 
Ach so, das hättest du der Einfachheit halber direkt sagen können. Du verwendest Managed C++. Da das kein HWND kennt, musst du da einfach casten:

DwmExtendFrameIntoClientArea ( (HWND)myForm.Handle, &mar );
 
Mein Fehler, ich dachte, das würde bei Managed C++ genauso funktionieren (ich meine, ich hätte sowas mit C# direkt gemacht).

Hab gegoogelt und das gefunden:

reinterpret_cast<HWND>( hwnd.ToInt32() )

D.h. die Zeile müsste so aussehen:

DwmExtendFrameIntoClientArea ( reinterpret_cast<HWND>( myForm.Handle.ToInt32() ), &mar );

Ob du jetzt den C-Style-Cast (HWND) oder den reinterpret_cast nimmst, bleibt dir überlassen.
 
Zurück