Moin,
dieses Skript zeigt die Größe des Anwendungsbereichs in Pixeln, Millimetern, Zoll und Twips an, also den metrischen Koordinatensystemen.
Nicht mehr, aber auch nicht weniger ...
autoit.de/wcf/attachment/3158/
Spoiler anzeigen
;******************************************************************************************
;* WhatSize Demo von C.Petzold
;* Übersetzt in AutoIt von Greenhorn
;*
#NoTrayIcon
#include-once
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include "WinAPI.h.au3"
Global $hWindowProc = DllCallbackRegister ('WindowProc', 'long', 'hwnd;uint;wparam;lparam')
Global $stAppName = DllStructCreate ('char szAppName[128]')
Global $szAppName = DllStructSetData ($stAppName, 'szAppName', 'WhatSize')
Global $hInst = GetModuleHandle ($NULL)
; Statische Variablen für die Fensterprozedur, müssen wir in AutoIt
; global setzen, gibt in AutoIt leider kein 'static'
Global $cxChar, $cyChar
Global $szHeading = "Koordinatensystem Left Right Top Bottom"
Global $szUndLine = "----------------- ---- ----- --- ------"
WinMain ()
[/autoit] [autoit][/autoit] [autoit]Func WinMain ()
Global $hWnd
Global $Msg = DllStructCreate ($tagMSG)
Global $wcx = DllStructCreate ($tagWNDCLASSEX)
DllStructSetData ($wcx,'cbSize', DllStructGetSize ($wcx))
DllStructSetData ($wcx,'style', BitOR ($CS_HREDRAW, $CS_VREDRAW))
DllStructSetData ($wcx,'lpfnWndProc', DllCallbackGetPtr ($hWindowProc))
DllStructSetData ($wcx,'cbClsExtra', 0)
DllStructSetData ($wcx,'cbWndExtra', 0)
DllStructSetData ($wcx,'hInstance', $hInst)
DllStructSetData ($wcx,'hIcon', LoadIcon ($NULL, $IDI_APPLICATION))
DllStructSetData ($wcx,'hCursor', LoadCursor ($NULL, $IDC_ARROW))
DllStructSetData ($wcx,'hbrBackground', GetStockObject ($WHITE_BRUSH))
DllStructSetData ($wcx,'lpszMenuName', $NULL)
DllStructSetData ($wcx,'lpszClassName', DllStructGetPtr ($stAppName))
DllStructSetData ($wcx,'hIconSm', LoadIcon ($NULL, $IDI_APPLICATION))
$lpMyWndClass = DllStructGetPtr ($wcx)
$lpMsg = DllStructGetPtr ($Msg)
If Not RegisterClassEx ($lpMyWndClass) Then
MsgBox (266256, Default, 'Die Fensterklasse konnte nicht registriert werden !')
Exit
EndIf
$hWnd = CreateWindowEx ($WS_EX_COMPOSITED, _ ; verhindert "Flickern"
$szAppName, 'Wie groß ist das Fenster?', _
$WS_OVERLAPPEDWINDOW, _
$CW_USEDEFAULT, $CW_USEDEFAULT, _
$CW_USEDEFAULT, $CW_USEDEFAULT, _
$NULL, $NULL, $hInst, $NULL)
ShowWindow ($hWnd, 5)
UpdateWindow ($hWnd)
While (GetMessage ($lpMsg, $NULL, 0, 0) > 0)
TranslateMessage ($lpMsg)
DispatchMessage ($lpMsg)
WEnd
Return DllStructGetData ($Msg, 'wParam')
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func Show ($hwnd, $hdc, $xText, $yText, $iMapMode, $szMapMode)
[/autoit] [autoit][/autoit] [autoit]Local $szBuffer
$rcClient = DllStructCreate ($tagRECT)
$lprcClient = DllStructGetPtr ($rcClient)
SaveDC ($hdc)
SetMapMode ($hdc, $iMapMode)
GetClientRect ($hwnd, $lprcClient)
DPtoLP ($hdc, $lprcClient, 2)
RestoreDC ($hdc, -1)
$left = DllStructGetData($rcClient, "Left")
$top = DllStructGetData($rcClient, "Top")
$right = DllStructGetData($rcClient, "Right")
$bottom = DllStructGetData($rcClient, "Bottom")
$szBuffer = StringFormat("%-20s %7d %7d %7d %7d", $szMapMode, _
$left, $right, $top, $bottom)
TextOut ($hdc, $xText, $yText, _
$szBuffer, _
StringLen ($szBuffer))
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func WindowProc ($hWnd, $uMsg, $wParam, $lParam)
$rcClient = DllStructCreate ($tagRECT)
$lprcClient = DllStructGetPtr ($rcClient)
$ps = DllStructCreate ($tagPAINTSTRUCT)
$lpPs = DllStructGetPtr ($ps)
$tm = DllStructCreate ($tagTEXTMETRIC)
$lptm = DllStructGetPtr ($tm)
Switch $uMsg
Case $WM_CREATE
$hdc = GetDC ($hWnd) ;
SelectObject ($hdc, GetStockObject ($SYSTEM_FIXED_FONT)) ;
GetTextMetrics ($hdc, DllStructGetPtr ($tm)) ;
$cxChar = DllStructGetData ($tm, 'tmAveCharWidth') ;
$cyChar = DllStructGetData ($tm, 'tmHeight') + DllStructGetData ($tm, 'tmExternalLeading') ;
ReleaseDC ($hWnd, $hdc) ;
Case $WM_PAINT
$hDC = BeginPaint ($hWnd, $lpPs)
SelectObject ($hDC, GetStockObject ($SYSTEM_FIXED_FONT)) ;
SetMapMode ($hDC, $MM_ANISOTROPIC) ; Koordinatensystem auf MM_ANISOTROPIC umstellen
SetWindowExtEx ($hDC, 1, 1, $NULL) ; Ausmaße des Darstellungsfeldes für das Fenster
SetViewportExtEx ($hDC, $cxChar, $cyChar, $NULL) ; Ausmaße des Darstellungsfeldes für den Gerätekontext
TextOut ($hDC, 1, 1, $szHeading, StringLen ($szHeading)) ;
TextOut ($hDC, 1, 2, $szUndLine, StringLen ($szUndLine)) ;
Show ($hWnd, $hDC, 1, 3, $MM_TEXT, "TEXT (pixels)") ;
Show ($hWnd, $hDC, 1, 4, $MM_LOMETRIC, "LOMETRIC (.1 mm)") ;
Show ($hWnd, $hDC, 1, 5, $MM_HIMETRIC, "HIMETRIC (.01 mm)") ;
Show ($hWnd, $hDC, 1, 6, $MM_LOENGLISH, "LOENGLISH (.01 in)") ;
Show ($hWnd, $hDC, 1, 7, $MM_HIENGLISH, "HIENGLISH (.001 in)") ;
Show ($hWnd, $hDC, 1, 8, $MM_TWIPS, "TWIPS (1/1440 in)") ;
EndPaint ($hWnd, $lpPs)
Case $WM_DESTROY
PostQuitMessage (0)
Case Else
Return DefWindowProc ($hWnd, $uMsg, $wParam, $lParam)
EndSwitch
Return 0;
EndFunc
Gruß
Greenhorn