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

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

1

17.07.2006, 17:41

Gegenteil von GetClientRect ?!

Kennt ihr eine Funktion, die das Gegenteil von GetClientRect macht, also es ermöglicht die Größe des Clientbereichs festzulegen?

SetClientRect gibt es nicht und etwas anderes habe ich auch nicht gefunden.

2

17.07.2006, 17:43

Hmm... SetWindowPos ... aber das sind auch net die Clientgrößen
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

17.07.2006, 21:13

Zitat von »"Devil"«

Hmm... SetWindowPos ... aber das sind auch net die Clientgrößen

Das stimmt, aber du legst ja den Client-Bereich eben über die Fensterposition und die damit einhergehende Fenstergröße fest, insofern ist das der richtige Ansatz.
Falls man vorher nicht weiß, in welchem Verhältnis die Client-Größe zur Fenstegröße steht, kann man sich das ja vorher mit GetClientRect und GetWindowRect berechnen.
Kommen Sie nie mit einem Schwert zu einer Schießerei.

Anonymous

unregistriert

4

17.07.2006, 21:21

Leutz ihr macht es euch immer soooo schwer. Daher nicht verzagen - Patrick fragen:

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
unsigned long set_client_size (::HWND__* hwnd, unsigned long width, unsigned long height) 
{ 
        // Prüfen der Gültigkeit des Fensters

    if (!::IsWindow (hwnd)) 
        return (error_invalid_parameter);

        // Dimensionen prüfen

    if (width < 10 || height < 10) 
        return (error_invalid_parameter);

        // Stil des Fensters holen 

    const unsigned long style          = ::GetWindowLongPtr (hwnd, GWL_STYLE); 
    const unsigned long style_extended = ::GetWindowLongPtr (hwnd, GWL_EXSTYLE); 

        // Gültigkeit prüfen

    if (style == 0 || style_extended == 0) 
        return (error_invalid_api_call);
 
        // Rechteck bereitstellen 

    ::RECT rect = { 0, 0, width, height }; 
     
        // Rechteck anhand des Fensterstils berechnen. 

    if (!::AdjustWindowRectEx (&rect, style, ::GetMenu (hwnd) != NULL, style_extended))
        return (error_invalid_api_call);
     
        // Fenstergröße veränder 

    if (!::SetWindowPos (hwnd, NULL, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER | SWP_NOMOVE))
        return (error_invalid_api_call);
 
    return (okay);
}


Nicht wundern, die return-Codes sind von mir :lol:

Aber läuft sehr gut und vorallem: Sehr sicher!

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

5

19.07.2006, 16:59

Patrick, behälst du diesen Codingstil eigentlich auch bei deiner Arbeit bei?

Normalerweise hat ja jede Firma gewisse Richtlinien, die dein Code wohl kaum erfüllt...

Ciao

Anonymous

unregistriert

6

19.07.2006, 18:36

Helmut
Klar, unsere Firma hat "gewisse" Richtlinien, aber nur für C Code. Bei C++ bin ich der Einzigste der darin Codet. Ergo: Ich mache darin die Richtlinien ;)

Außerdem: Wieso sollte der Code keine Richtlinien erfüllen? Er ist sicher und nicht lam. Wenn Unternehmen gerne auf Hoffentlich-läuft-der-Code Bauen, bitte. Ich will meinen Kunden jedenfalls keinen Müll servieren mit haufenweise unsicheren Stellen.

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

7

19.07.2006, 20:07

Hm, aber wie greifen denn dann die anderen auf deinen Code zu? Schreibst du extra ein C-Wrapper, oder benutzen die anderen einfach bloß keine Klassen?

Und natürlich ist dein Code sicher. Aber man kanns auch irgendwie übertreiben. Was bringt es denn zu überprüfen, ob hwnd gültig ist und dann einen Extrafehlercode zurückzugeben?
Soll der Aufrufer dann darauf reagieren indem er das Fenster löscht und wieder neu erstellt, oder dass er den Benutzer darauf hinweist, dass urplötzlich ein Fenster kaputtgegangen ist?
Ein simples assert(hwnd); würde meiner Meinung nach völlig reichen...

Und erst dieses HWND__* nur weil man #defines nicht mag...

Ciao

Anonymous

unregistriert

8

19.07.2006, 20:39

Helmut
Wir benutzen für C++ einen von mir entwickeltes Interface Design, das COM und VCL sehr ähnelt. Also sogesehen nichts mehr WinAPI. Alles intern, der Code ist nur etwas "zugeschustert" für Leute die diese Interfaces nicht haben.

Intern wird das Fenster versucht zu zu regenerieren und nicht mit einem assert den User blöde in der Gegen stehen zu lassen. assert - was für ein Bullshit, wenn man mehr haben kann! Fehlerkompensierung sag ich nur und nicht: "Tja wenn fehler, hat er Pech gehabt."

In meinen Programmen geht Sicherheit vor, gefolgt von Fehlerkompensierungen. Ich will das der User das Programm ordentlich bedienen kann, auch wenn es einen Runtimefehler hat und ihn nicht mit assert oder Exceptionwürfen wie ein Idiot da rum stehen lassen.

Außerdem: Assert ist nicht das selbe wie IsWindow. IsWindow ließt in der Handletabelle nach ob das Fenster noch existiert und nicht ob der Zeiger NULL ist.

Ob Dir dieses und jenes reicht ist mir herzlichst egal um ehrlich zu sein: Ich will Qualität meinen Kunden verkaufen, auf die ICH und meine Kunden bauen können und beide Seiten zufrieden sind und nicht Murks verkaufen die meinen Ruf schädigen könnten!

Thema HWND__* zum x-ten male: Für jeden Typen der es nicht kapieren will oder tolerieren will oder akzeptieren will oder sein Verstand zu beschränkt ist: ICH WILL DIREKT SEHEN WO POINTER SIND UND NICHT VERSTECKTEN SCHEISS SEHEN! - ENDE!

Dazu bin ich auch kein Typ der mit #define in die Kiste springt und Bastarde zeugt wie Konstanten oder Makros für sinnlosen Scheiß! Können von mir aus andere machen: Ich wills sicher haben und klar! Und #define ist im Punkto Sicherheit, speziell Typsicherheit, eine reinste Lachnummer!

Sorry, absolut kein Verständnis für.

Werbeanzeige