Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: WinAPI ::  Fenstergröße ermitteln     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Alexa
Unregistrierter




Beitrag Alexa Unregistrierter 18:42:41 22.11.2005   Titel:   Fenstergröße ermitteln            Zitieren

hallo,

ich öffne ein fenster und möchte nun die fenstergröße ermitteln. mit fenstergröße meine ich dabei die größe von der menüleiste bis runter zur statusleiste. also nicht wirklich das ganze fenster, sonder der " nutzbare" bereich.

lg
Alexa
Jochen Kalmbach
Moderator

Benutzerprofil
Anmeldungsdatum: 11.11.2005
Beiträge: 12149
Beitrag Jochen Kalmbach Moderator 18:55:55 22.11.2005   Titel:              Zitieren

GetClientRect

_________________
Greetings
Jochen
(Microsoft MVP VC++) My blog about Win32 and .NET: http://blog.kalmbach-software.de/ (deutsch)
Alexa
Unregistrierter




Beitrag Alexa Unregistrierter 14:40:06 23.11.2005   Titel:              Zitieren

hallo,

ich haabe das mal versucht,a ber irgendwie komme ich da nicht weiter, da ich nicht weß, was ich bei mir als hwnd einsetzen soll.

mein fenster erzeuge ich folgendermaßen
Code:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;
   
    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
        | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    {
        TRACE0("Symbolleiste konnte nicht erstellt werden\n");
        return -1;      // Fehler bei Erstellung der Symbolleiste
    }
 
    if (!m_wndStatusBar.Create(this) ||
        !m_wndStatusBar.SetIndicators(indicators,
          sizeof(indicators)/sizeof(UINT)))
    {
        TRACE0("Statusleiste konnte nicht erstellt werden\n");
        return -1;      // Fehler bei Erstellung der Statusleiste
    }
    // HINWEIS: Löschen Sie diese drei Zeilen, wenn Sie nicht möchten, dass die Systemleiste
    //          andockbar ist
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);
 
    return 0;
}
 
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    if( !CFrameWnd::PreCreateWindow(cs) )
        return FALSE;
    // HINWEIS: Ändern Sie hier die Fensterklasse oder die Darstellung, indem Sie
    //          CREATESTRUCT cs modifizieren.
 
    cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
          | WS_SYSMENU | WS_MINIMIZEBOX;
    ///| WS_THICKFRAME
    cs.cx= 800;        // Breite des sich öffnenden Fenster
    cs.cy= 600;        // Höhe des sich öffnenden Fensters
 
    return TRUE;
}


und nun wollte ich die größe so abfragen:

Code:
RECT rect;
GetClientRect(CFrameWnd, &rect);
height=rect.right;
width=rect.bottom;


Leider brint der mir immer einen fehler, ungültige verwendung dieses typs CFrameWnd als ausdruck.
wäre toll, wenn mir da jemand auf die sprünge helfen könnte.

vielen dank
gruß
alexa
Jochen Kalmbach
Moderator

Benutzerprofil
Anmeldungsdatum: 11.11.2005
Beiträge: 12149
Beitrag Jochen Kalmbach Moderator 14:49:59 23.11.2005   Titel:              Zitieren

C++:
RECT rect;
GetClientRect(this->m_hWnd, &rect);
height=rect.right;
width=rect.bottom;

Du kannst aber auch direkt die MFC-Funktion:
C++:
this->GetClientRect/&rect);

aufrufen...

_________________
Greetings
Jochen
(Microsoft MVP VC++) My blog about Win32 and .NET: http://blog.kalmbach-software.de/ (deutsch)
Alexa
Unregistrierter




Beitrag Alexa Unregistrierter 14:57:15 23.11.2005   Titel:              Zitieren

oh...vielen dank. das funktioniert prima....:-)
DT64
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.04.2017
Beiträge: 3
Beitrag DT64 Mitglied 11:26:08 12.04.2017   Titel:              Zitieren

Bei mir funktioniert dies leider nicht.

Ich habe in einem Fenster ein Textfeld geschaffen - ich will dessen Breite in Abhängigkeit zu dessen Parentwindow setzen, ich hatte mir das wie folgt vorgestellt:

C++:
1
2
3
4
5
6
7
8
9
10
11
        RECT aRect;
        GetWindowRect(hwnd,&aRect);
       
        case WM_CREATE:
 
   
            TextField = CreateWindow("EDIT",
                                     "",
                                     WS_VISIBLE | WS_CHILD | WS_BORDER | ES_READONLY | WS_VSCROLL | ES_MULTILINE,
                                     aRect.left+10, aRect.top+10, (aRect.right-aRect.top)-10,150,
                                     hwnd, (HMENU) 3, NULL, NULL);


Das geht leider nicht, denn mit aRect.right-aRect.top lässt sich keine Breite ermitteln; gibt es da eventuell einen Workaround? Ich bin leider nirgends fündig geworden.
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4431
Beitrag Th69 Mitglied 12:39:59 12.04.2017   Titel:              Zitieren

Du meinst wohl
C++:
aRect.right-aRect.left
?!
DT64
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.04.2017
Beiträge: 3
Beitrag DT64 Mitglied 16:00:20 12.04.2017   Titel:              Zitieren

Ich meinte dies zwar nicht, aber auch

C++:
aRect.right-aRect.left


funktioniert nicht, denn egal was ich von (aRect.right-aRect.left) abziehe (z. B. (aRect.right-aRect.left)-300) - die Größe jenes Childfensters ändert sich nicht.
redf
Unregistrierter




Beitrag redf Unregistrierter 16:18:55 12.04.2017   Titel:              Zitieren

MoveWindow im WM_SIZE-Zweig verwenden. So wird die Controlgröße auch bei Größenänderungen des Elternfensters angepasst.
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 15257
Beitrag Martin Richter Moderator 13:36:01 15.04.2017   Titel:              Zitieren

Klar geht das. GetWindowRect ist in jedem Fall falsch.
GetClientRect ist korrekt.

_________________
Martin Richter (MVP für C++ von 2000 bis 2015) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
C++ Forum :: WinAPI ::  Fenstergröße ermitteln   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.