$include "windowssdk.inc" WINDOW back int screenX = GetSystemMetrics(SM_CXSCREEN) int screenY = GetSystemMetrics(SM_CYSCREEN) OPENWINDOW back,0,0,screenX,screenY,@NOCAPTION,0,"Metrics test",&MainWndProc SETWINDOWCOLOR back,RGB(0,255,0) HDC hdcDevice = GETHDC(back) ' draw a round rectangle HBRUSH hbr = SelectObject(hdcDevice, CreateSolidBrush(RGB(128,255,128))) HPEN pen = SelectObject(hdcDevice, CreatePen(PS_SOLID, 3, RGB(255,0,0))) RoundRect(hdcDevice, /*top-left XY*/20, 20, /*right-bottom XY*/screenX-40, screenY-40, 60/*width of ellipse*/, 60/*height of ellipse*/) DeleteObject(SelectObject(hdcDevice,pen)) DeleteObject(SelectObject(hdcDevice,hbr)) int Hpixels = GetDeviceCaps(hdcDevice, HORZRES) ' display width in pixels int Vpixels = GetDeviceCaps(hdcDevice, VERTRES) ' display height in pixels int Hmillimeters = GetDeviceCaps(hdcDevice, HORZSIZE) ' display width in mm int Vmillimeters = GetDeviceCaps(hdcDevice, VERTSIZE) ' display height in mm ' note: HORZSIZE,VERTSIZE may be not accurate. Hmillimeters = 25.4 * Hpixels / GetDeviceCaps(hdcDevice, LOGPIXELSX) Vmillimeters = 25.4 * Vpixels / GetDeviceCaps(hdcDevice, LOGPIXELSY) 'Hmillimeters = 384 ' fix HORZSIZE 'Vmillimeters = 304 ' fix VERTSIZE RELEASEHDC(back, hdcDevice) double PixelsPerMillimeter_H = Hpixels / (Hmillimeters+0.0) double PixelsPerMillimeter_V = Vpixels / (Vmillimeters+0.0) double MillimetersPerPixel_H = Hmillimeters / (Hpixels+0.0) double MillimetersPerPixel_V = Vmillimeters / (Vpixels+0.0) MESSAGEBOX 0, USING("This monitor has # pixels (# millimeters) horizontally\nand # pixels (# millimeters) vertically.\n\nIn other words, one pixel has #.##mm * #.##mm",_ Hpixels,Hmillimeters,_ Vpixels,Vmillimeters,_ MillimetersPerPixel_H,MillimetersPerPixel_V), "", MB_TOPMOST WINDOW w OPENWINDOW w,0,0,0,0,@MINBOX|@MAXBOX,0,"Metrics test",&MainWndProc WINRECT rc ' number of pixels = PixelsPerMillimeter * number of millimeters rc.right = PixelsPerMillimeter_H * 86 rc.bottom = PixelsPerMillimeter_V * 42 AdjustWindowRectEx(&rc, GetWindowLong(w.hWnd, GWL_STYLE), 0, GetWindowLong(w.hWnd, GWL_EXSTYLE)) SetWindowPos(w.hWnd, HWND_TOPMOST, 0,0,rc.right,rc.bottom,SWP_NOMOVE) CENTERWINDOW w PRINT w, "This window should be 80mm * 40mm" MOVE w, 0, 24 PRINT w, STR$(rc.right) MOVE w, 0, 48 PRINT w, STR$(rc.bottom) waituntil w.hWnd=0 end sub MainWndProc(),int select @MESSAGE case @IDCLOSEWINDOW CLOSEWINDOW *@HITWINDOW endselect return 0 endsub