Używam funkcji DrawThemeBackground
do rysowania niektórych elementów systemowych na płótnie. Potrzebuję narysować przyciski tytułowe formularza, jedyną częścią, którą przeoczyłem, jest to, jak mogę uzyskać rozmiary przycisków tytułowych w rozmiarze default
. Exist any Uxtheme function to get that info?
Jaką funkcję Uxtheme muszę użyć, aby uzyskać domyślny rozmiar przycisków minimalizacji, maksymalizacji i zamykania?
Odpowiedz
Wygląda na to, że jest to trudniejsze niż się wydaje.
Najpierw jest GetThemeMetric
lub GetThemeInt
. Ale zobaczysz wiele odnośników, że te funkcje zwracają element "0x8007490
, niektóre " nie znaleziono ", gdy próbujesz pobrać właściwości przycisków napisów.
Następnie jest GetThemePartSize
. Ten wydaje się działać trochę. To działa dobrze na przykład dla WP_CLOSEBUTTON
, ale zwraca bzdury na przykład dla WP_MINBUTTON
. Nie sugerowałbym jednak używania tej funkcji, ponieważ pobiera ona domyślne wymiary przycisku . Jeśli użytkownik zmienił na przykład rozmiar tytułu, nie uzyska poprawnych wartości. W każdym razie, można go nazwać tak:
uses
uxtheme, themes;
...
var
Err: HRESULT;
Size: TSize;
begin
Err := GetThemePartSize(ThemeServices.Theme[teWindow], 0,
WP_CLOSEBUTTON, CBS_NORMAL, nil, TS_TRUE, Size);
nie mam pojęcia, co byłe dwie funkcje wróci gdyby pracowała (wymiary przycisków do aktualnego rozmiaru paska tytułu lub domyślnego tytułu wielkości bar).
Jedynym możliwym sposobem uzyskania dokładnego wyniku wydaje się użycie wiadomości WM_GETTITLEBARINFOEX
. Ale jest wada; działa tylko dla Vista i więcej. Może być konieczne zdefiniowanie komunikatu i struktury, której używa, w zależności od używanej wersji Delphi (tutaj D2007).
const
CCHILDREN_TITLEBAR = 5;
WM_GETTITLEBARINFOEX = $033F;
type
tagTITLEBARINFOEX = record
cbSize: DWORD;
rcTitleBar: TRect;
rgstate: array[0..CCHILDREN_TITLEBAR] of DWORD;
rgrect: array [0..CCHILDREN_TITLEBAR] of TRect;
end;
TITLEBARINFOEX = tagTITLEBARINFOEX;
TTitleBarInfoEx = tagTITLEBARINFOEX;
PTitleBarInfoEx = ^TTitleBarInfoEx;
...
var
TitleInfo: TTitleBarInfoEx;
begin
SendMessage(Handle, WM_GETTITLEBARINFOEX, 0, NativeInt(@TitleInfo));
Następnie można uzyskać rozmiar przycisku zamykania z rect TitleInfo.rgrect[5]
. Aby uzyskać szczegółowe informacje, patrz "TITLEBARINFOEX structure". Zauważ, że wartości są na współrzędnych ekranu.
Jeśli trzeba wspierać XP i/lub poniżej, proponuję użyć starego dobrego GetSystemMetrics(SM_CXSIZE)
i GetSystemMetrics(SM_CYSIZE)
(„szerokości przycisku w oknie napis lub pasku tytułowym w pikselach”). Będziesz musiał ćwiczyć kilka przybliżeń w zależności od tego, czy motywy są włączone, czy jest włączone aero.
myślę SystemParametersInfo z SPI_GETNONCLIENTMETRICS
jest to, czego szukasz. Domyślam się, że przyciski minimalizacji i maksymalizacji używają NONCLIENTMETRICS. iSmCaptionWidth
podczas zamykania używa iCaptionWidth
do określenia szerokości.
- 1. Qt ukryj przyciski minimalizacji, maksymalizacji i zamknięcia
- 2. Jak ukryć domyślne przyciski minimalizacji/maksymalizacji i zamykania w oknie JFrame w Javie?
- 3. Qt C++ okno minimalizacji i maksymalizacji
- 4. Wyłącz przycisk minimalizacji JFrame
- 5. Jak usunąć obramowanie okna (zawierające przyciski minimalizacji, maksymalizacji i zamknięcia) z widżetu Qt?
- 6. Włącz maksymalizacji, minimalizacji i przywracanie okna w WPF (ręczne Resize jest wyłączone)
- 7. Czy istnieje sposób programowej minimalizacji okna?
- 8. Jaką funkcję otrzymały wszystkie pliki Wordpress?
- 9. qt5 (i python) - Jak uzyskać domyślny rozmiar miniaturki użytkownika os
- 10. Jak uzyskać rozmiar i położenie przycisków podpisów okna (minimalizacja, przywracanie, zamykanie)
- 11. Konstruktor FileStream i domyślny rozmiar buforu
- 12. Domyślny rozmiar elementu wejściowego
- 13. Jaką walutę użyć w testach jednostkowych?
- 14. Jaką klasę użyć do reprezentacji pieniędzy?
- 15. Jaką funkcję mają te adnotacje Java?
- 16. Skrypt PowerShell, aby uzyskać pełny rozmiar katalogu
- 17. Domyślny rozmiar wykresu Google
- 18. Domyślny rozmiar i szerokość ramki tekstowej
- 19. Domyślny rozmiar okna iterm2
- 20. Dlaczego muszę użyć .d, aby uzyskać dostęp do danych zwróconych przez jQuery AJAX?
- 21. Jak uzyskać klawisz Enter w polu tekstowym, aby uruchomić funkcję, a nie przycisk pierwszy/domyślny
- 22. jak zmienić domyślny tekst przycisków w JOptionPane.showInputDialog
- 23. Czy w WPF mogę mieć okno bez obramowania, które ma regularne przyciski minimalizacji, maksymalizowania i zamykania?
- 24. jak uzyskać ssh, aby użyć innej id_dsa
- 25. Jak uzyskać domyślny rozmiar czcionki systemowej w Qt?
- 26. Proszę polecić jaką strategię nawigacji użyć dla Spring MVC 3.0
- 27. Jaką klasę dat użyć w języku Java 8?
- 28. Muszę wywołać oryginalną funkcję z funkcji objazdu
- 29. Przycisk niestandardowego panelu sterowania
- 30. Jak zminimalizować i zmaksymalizować w C# .Net?
Wątpię, czy to jest to. To z pewnością da wartość klasycznym Windows. –