unter Vista im Fenstertitel zeichnen
-
Mahlzeit zusammen ;),
ich habe ein keines aber für mich nicht gerade triviales Problemchen. Ich möchte unter Windows Vista einen Text und eine Graphik im Fenstertitel einer Form zeichen. Das klappt auch alles wunderbar in der klassischen Ansicht mit dem allseits bekannten Code.
TCanvas * FCanvas = new TCanvas(); TGDIPPicture *bmp = new TGDIPPicture(); bmp->Assign(AdvShapeButton1->Picture); if(FCanvas) { Caption = "" ; FCanvas->Handle = GetWindowDC(Handle); SetBkMode(FCanvas->Handle, TRANSPARENT); SetTextAlign(FCanvas->Handle, TA_RIGHT); SetTextColor(FCanvas->Handle, clWhite); FCanvas->TextOut(Width-FCanvas->TextWidth("Mein Text")-20, 6, "Mein Text"); FCanvas->Draw(5,5,bmp); delete FCanvas; }Mein Problem besteht eigentlich nur darin, das wenn man auf die Aero Oberfläche von Windows Vista wechselt, dann nichts mehr zu sehen ist. Der Code wird zwar ausgeführt aber es ist nix zu sehen. Hat da jemand einen Work Arround oder nen Tipp wie man das lösen könnte?
MfG TFX
-
*push*
-
Hallo
Vielleicht weiß man im WinAPI-Forum mehr dazu.
bis bald
akari
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
-
Danke für den kleinen Hinweis,aber ich bins aber nochmal.
Ich hab mir das mal angeschaut, aber so recht komme ich nicht weiter. Ich komme soweit das ich die Ausdehnungen Des Fensters geändert bekomme aber eben auch nicht mehr.MARGINS margins ={0,0,0,50}; // {-1}; // -1 für ne komplette Form HRESULT hr = S_OK; hr = DwmExtendFrameIntoClientArea(Form1->Handle,&margins); if (SUCCEEDED(hr)){ LOGFONT lf = {0}; NONCLIENTMETRICS ncm = { sizeof(NONCLIENTMETRICS) }; SystemParametersInfo (SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),&ncm, false ); lf = ncm.lfMessageFont;ICh bin offenbar unfähig Text und/oder ein Bild in dem Bereich zu zeichnen, was wahrscheinlich daran liegt das ich aus der VCL Welt komme. Es gelingt mir einfach nicht die zahlreichen Beispiele welche leider alle in VC++/VC# o.ä. geschrieben sind im CodeGear so anzupassen das sie laufen. Wie man jetzt Text und Bild in diesen Bereich bringt wäre jetzt also noch ziemlich interessant.
Habt ihr da mal eine kleine Hilfestellung für mich?MfG
TFX
-
Das steht doch alles in dem ersten Link, den Du in Goggle schon bekommen hast:
http://msdn.microsoft.com/en-us/library/bb688195(VS.85).aspx#appendixb
-
Martin Richter schrieb:
Das steht doch alles in dem ersten Link, den Du in Goggle schon bekommen hast:
Stimmt, funzt aber nicht. Ich hab das mal auf ein Minimalbeispiel reduziert.
Die Dateien dwmapi.lib und uxtheme.lib sind dem Projekt noch nicht hinzugefügt, wobei das keine Rolle spielt...
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include <dwmapi.h> #include <windows.hpp> #include <Uxtheme.hpp> //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------und man erhält das folgende Resultat:
[BCC32 Fehler] Uxtheme.hpp(36): E2257 , erwartet [BCC32 Fehler] Uxtheme.hpp(42): E2257 , erwartet [BCC32 Fehler] Uxtheme.hpp(46): E2257 , erwartet [BCC32 Fehler] Uxtheme.hpp(52): E2257 , erwartet [BCC32 Fehler] Uxtheme.hpp(58): E2257 , erwartetIncludiert man stattdessen
#include <uxtheme.h>lässt das ganze zwar starten, aber er kennt die Methoden und Strukturen nicht z.b.( DTTOPTS , DrawThemeTextEx). Wo liegt mein Fehler???

MfG
TFX