[WinAPI] Moderner Button ?=

S

S3RB31

Hallo,

ich bin gerade dabei mein erstes Win-API Programm zu schreiben, das klappt auch recht gut allerdings hab ich noch ein Problem. Wenn ich einen Button erstellen dann sieht der immer aus als ob er dierekt aus Win 95 kommt. Welchen Style or whatever muss ich setzten damit der Button "modern" aussieht?

Thx schonmal,

S3RB31
 

Marschal

Großer Enumerator
Hi
Ich schätze mal du möchtest eine MFC-Anwendung erstellen.
Die Buttons sind Steuerelemente und übernehmen den Skin deiner Windoofs-version. Wenn du einen xp-style eingestellt hast, werden die button im "mordernen" XP style dargestellt, benutz du jedoch einen 95ger Skin, sehen die Butoons auch dementsprechend aus.

Kann es sein, dass dein Style einfach kein "moderner" ist?.

Und noch was, sieht der Button nurm im Kompiler "alt" aus, oder auch nach einem erfolgreichem Build?

MfG
 
S

S3RB31

Nein, eine MFC-Anwendung sollte es eigentlich nicht werden.

Und der Stil von meinem Windows ist der XP Stil mit Schwarzem Hintergrund - und am Hintergrund wirds wohl nicht liegen.

Der Button ist übrigens auch nach einem Build "alt" aus.
 

Marschal

Großer Enumerator
gut, dann würden etwas mehr Infos zu deinem Projekt hilfreich;)

Bisher weis ich nur WIN-API, das sagt mir erstmal wenig.
Solls eine eine GUI anwendung erden (Dialog o.ä.) oder eher eine O-GL oder DirectX Anwendung?

EDIT: HIER müsstest du fündig werden;)
 
Zuletzt bearbeitet:
S

S3RB31

Es ist eine ganz Normal GUI-Anwendung ohne funktion.

Einfach ein Fenster mit einem Button drin.

So hab ich den Button gemacht:

Code:
hwndButton1 = CreateWindow ( "button", "Knopf 1",
                             WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                             100, 50, 100, 40, hwnd, (HMENU)1,
                             (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL);

Und so siehts aus:

http://img291.imageshack.us/img291/7020/screeniinkw.png
 

Marschal

Großer Enumerator
@S3RB31: Hab bisher die WIN-API nur in Verbimdung mit MFC und Open GL benuzt, aber du dürftest ja im zuvor gennanten Link und mit dem Beitrag von Endurion ja schon recht weit kommen.
Wenn damit deine Frage erledigt ist, so markiere diese dan auch biite entsprechen;)

Muss leider etwas offtopic werden..:(
Wer auch das sein mochte, "Kindergarten" (um es zu zitieren) ist: grundlos ein negatives, schwach untermauertes (Brgründung: "Kindergarten") Renomé abzugeben.
Das ist Kindergarten.
Ich kann selbtverständlich auch die Gegenposition nachvollziehen, (was ja Grundlage für konstruktive kritik ist). Wer nämlich mit Humor nichts am Hut hat, der kann Ironie (nicht Sarkasmus oder Zynismus) syntaktisch in keinen sinvollen Zusammenhang bringen. Einer solchen Person verbleibt dann nämlich nur den Weg einer nicht nachvollziehbaren (schon hinterlistig eigentlich) negativen Bewertung um die mangelnde Fähigkeit an einem gesunden Ktitikvermögen zu kompensieren.
Das ist Kindergarten.

Tut mir leid wegen dem Offtopic.
MfG
 
S

S3RB31

Es geht um C++.

Ich kann wenig mit den beiden Links anfangen.

Wie genau funktioniert das den nun mit demi einbinden der manifests in VC++ 2008?

Da steht zwar wie das t, aber ich hab im VC++ aber keinen App-Designer...
 

Marschal

Großer Enumerator
Du musst ein Manifest einfügen, dass die neuen Styles bzw. Common Controls zulässt:

http://msdn.microsoft.com/en-us/library/aa289524(VS.71).aspx

WEnn du dem Link folgst und etwas runter scrollst, findest du die Überschrift Create the Manifest File.
Wenn ich das richtig überflogen habe, dann beginnte der Teil der dich interessiert dort.

Ich versuche mal was auf deutsch zu finden.

EDIT:
Zum manifest:
Das einbinden müsste etwo so ausschauen (nicht getestet):
1. Im Source-Code (am besten in der "main" oben im Header) einfügen:
C++:
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif

In der "main" zu den headern:
C++:
#include <commctrl.h>
#pragma comment(lib, "comctl32.lib")

//bei den initirungen:
InitCommonControls()

MfG
 
Zuletzt bearbeitet von einem Moderator:
S

S3RB31

Juhu!


Es klappt !!

Dank deinem Edit geht nun alles rebungslos, vielen dank!