# HWND ermitteln



## AckiB (17. Mai 2004)

Hi,
jetzt habe ich ein weiteres Problem:
Wie bekomme ich den Handle des Windows-Fenster heraus ?

Ich habe jetzt zwar die Funktion für die Fensterposition, aber die braucht den Handle (hwnd)...

Public Declare Function GetWindowPlacement Lib "user32" Alias "GetWindowPlacement" (ByVal hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long

Ich habe bisher in VB programmiert und ein bisschen C/C++ für Konsole...
Leider habe ich nur wenig Ahnung, wie man Windows Programme mit C/C++ programmiert.
In VB hat jedes Fenster die Eigenschaft HWND, aber in C/C++ ?

danke, Acki


----------



## Daniel Toplak (17. Mai 2004)

Dabei ist es schon wichtig mit was du programmierst?
- MFC?
- reine WinAPI?
- GTK?
- QT?
- zApp?
- wxWindows?
- usw...?
Denn Möglichkeiten gibt es viele.

Gruß Homer

P.S. warum muß man eigentlich immer wieder die gleichen Fragen stellen ?


----------



## AckiB (18. Mai 2004)

Sorry, aber ich suche grundsätzlich vorher, ob meine Fragen schonmal gestellt wurde...
Wenn ich nichts finde frage ich halt...  
Und zu diesem Thema habe ich nichts gefunden...  

Wie schon erwähnt bin ich in Cpp - Windows - Programmierung ein Newby... 

Zum Thema: da ich eine API-Funktion als Beispiel angegeben hatte, dachte ich das währe klar...  

Also, ich benutze Dev-C++ unter W2k, erstelle meine GUIs mit FLTK und verwende gerne die Windows-API !

Ich komme damit auch soweit super zurecht, nur habe ich bei solchen (scheinbar) sehr speziellen Sachen noch ein wenig Probleme!

So weiß ich z.B. auch noch nicht, wie man einem Fenster ein Icon zuweisen kann (das oben links in der Titelleiste angezeigt wird)... 
Danach habe ich allerdings auch noch nicht im Forum gesucht...

Sollte jemand einen Thread kennen, in dem meine Fragen schon beantwortet wurde, währe ich sehr dankbar für einen Hinweis (Link) darauf !  

Vielleicht kann mir ja doch jemand helfen...

CU, Acki


----------



## Daniel Toplak (18. Mai 2004)

> Also, ich benutze Dev-C++ unter W2k, erstelle meine GUIs mit FLTK und verwende gerne die Windows-API !


Das ist doch der springende Punkt.
Du kannst allso meine Liste um den Punkt "FLTK" erweitern.
Du benutzt ein eigenes Framework und nicht direkte WinAPI.
In diesem Framework, ist irgendwo eine Methode  CreateWindow() gekappselt, die wiederum ein HWND zurückliefert.
Da wirst du aber mit 100% Warscheinlichkeit nicht rankommen.
Ergo:
Muss dir dein Framework eine Methode zur Verfügung stellen, um an das zugehörige HWND deines Fensters ranzukommen. Ist dies nicht der Fall, ist das Framework nicht unbedingt das ware (kann ich nicht beurteilen).
Eleganter wäre es allerdings die Fensterpositionen über das Framework zu verarbeiten.
Wird das auch nicht unterstützt dann nimm MFC oder sowas.
Also kann ich dich nur auf die Dokumentation von FLTK verweisen.
Evtl. kenn das hier ja jemand (ich nicht)

Gruß Homer


----------



## AckiB (18. Mai 2004)

Das hatte ich mir auch gedacht, similar zur VB-Formular-Eigenschaft HWND...
Leider habe ich in der FLTK-Doku nichts gefunden (die ist auch nicht besonders gut aufgebaut und leider nur auf Englisch)...

Ein Fenster-Objekt sheint leider bei FLTK keine HWND-Eigenschaft (oder Methode die HWND liefer) zu besitzen...  

Zur Info: 
FLTK steht für "Fast Lightning Tool Kit"
Dazu gibts einen GUI-Editor der sich Fluid nennt (ich glaube das steht für "Fast Lightning User Interface Designer")

Das ganze ist ziemlich gut und stellt viele Objekte zur Verfügung!


thx, Acki


----------



## Daniel Toplak (18. Mai 2004)

> Das ganze ist ziemlich gut und stellt viele Objekte zur Verfügung!


Sieht wohl nicht so aus  
Ich habe das auch mal kurz überflogen, aber nix gefunden wie man an ein HWND rankommt.
Optional wäre da noch eine API-Funktion FindWindow() was aber eigentlich doof ist, wenn man schon eine "Art" Fensterklasse "an der Hand" hat (über FLTK).
Also kann ich dir da auch nicht weiter helfen in Bezug auf FLTK, musst weitersuchen, evtl. gibt es da Newsgroups.


> (die ist auch nicht besonders gut aufgebaut und leider nur auf Englisch)


Das Englische sollte für einen Programmierer keine Hürde sein.

Gruß Homer


----------



## Endurion (18. Mai 2004)

In der Doku stand unter OS-specific issues die folgende Funktion:

HWND fl_xid(const Fl_Window *)

Damit sollte es eigentlich klappen.

Das ist generell das Problem mit plattformübergreifenden Libraries. Irgendwo gibt es doch Unterschiede und die sind in der Normal-Doku nicht drin, sondern meistens im Kleingedruckten.


----------



## Kachelator (18. Mai 2004)

> Das ist generell das Problem mit plattformübergreifenden Libraries. Irgendwo gibt es doch Unterschiede und die sind in der Normal-Doku nicht drin, sondern meistens im Kleingedruckten.


  Das stimmt wahrscheinlich.

Vielleicht ist das Problem, dass AckiB das Handle eigentlich nur für die WinAPI-Funktion _GetWindowPlacement()_ benötigt. Vielleicht wäre es sinnvoller, in seiner Library entsprechende Funktionen zu suchen, mit denen er dasselbe (Fensterpositionen usw.) herausfinden kann und auf direkten Einsatz der WinAPI zu verzichten. Ich bin sicher, dass das geht, und es hätte den Vorteil, dass sein Code tatsächlich nicht Windows-spezifisch würde.


----------



## Daniel Toplak (18. Mai 2004)

@Kachelator, hab ich doch schon geschrieben:


> Eleganter wäre es allerdings die Fensterpositionen über das Framework zu verarbeiten.


 

Gruß Homer


----------



## Kachelator (18. Mai 2004)

LOL! Das hatte ich überlesen!  

Na ja, doppelt hilft besser!


----------



## AckiB (18. Mai 2004)

> _Original geschrieben von Endurion _
> *In der Doku stand unter OS-specific issues die folgende Funktion:
> 
> HWND fl_xid(const Fl_Window *)
> ...



Ha !
Ich habe  danach mal in der (HTML-) Doku gesucht und gefunden ! 
Jetzt klappt es !

Danke, manchmal weiß man eben leider nicht, wonach man suchen muss ... 

CU, Acki


----------



## Endurion (18. Mai 2004)

Ich weiss nicht, was du hast:

Aussagekräftiger als fl_xid geht's ja wohl nicht 


Was Kachelator und Daniel Toplak schon geschrieben haben, stimmt aber. Durch diese eine Funktion ist die ganze Plattformunabhängigkeit fuhutsch. Müsste ja wirklich ein entsprechendes Gegenstück geben; evtl. kann das halt nicht das komplette Repertoire von WindowPlacement.


----------



## Kachelator (18. Mai 2004)

> Aussagekräftiger als fl_xid geht's ja wohl nicht


  Da komme ich nicht mit. _fl_xid_ ist doch nicht besonders aussagekräftig, für sich genommen, oder? Ich würde es für ein Mittel gegen Verstopfung halten. Oder was meintest du?


----------



## AckiB (19. Mai 2004)

> _Original geschrieben von Kachelator _
> *Da komme ich nicht mit. fl_xid ist doch nicht besonders aussagekräftig, für sich genommen, oder?*



Doch, eigentlich schon...   


unter dem Bereich steht auch, wie man das für Linux und Mac benutzt ! 


CU, Acki


----------



## Endurion (19. Mai 2004)

> _Original geschrieben von Kachelator _
> *Da komme ich nicht mit. fl_xid ist doch nicht besonders aussagekräftig, für sich genommen, oder? Ich würde es für ein Mittel gegen Verstopfung halten. Oder was meintest du? *



War eigentlich auch sarkastisch gemeint. fl_xid könnte ein Fluch sein, der mir über die Lippen rutscht, wenn ich die Funktion suche. Könnte auch eine chemische Verbindung sein.

Ich empfehle trotzdem nochmal, evtl. auf fl_xid zu verzichten, und die Windows-Position mit Framework-eigenen Befehlen zu verändern. Ich könnte mir nämlich vorstellen, das FLTK (auch so ein Begriff) auf einem Mac den Befehl fl_xid gar nicht erst enthält.


----------

