.NET i takie tam

Quarter VGA

with 4 comments

Portuje aplikacje z CF .NET 1.0 do .NET 2.0 – i jak zwykle są problemy ze skalowaniem kontrolek. Pół biedy ze statycznymi formami gdzie mogę ustawić sobie AutoScaleMode i FormFactor. Problemem jest zestaw dynamicznie generowanych form z zewnętrznymi komponentami – niestety muszę ręcznie zmienić ich rozmiary w zależności od rozdzielczości ekranu. Poniższa funkcja określa mi czy ekran jest w rozdzielczości QVGA i tym samym czy muszę odpowiednie wielkości przemnożyć przed 2. Aby pobrać rozmiar ekranu można wykorzystać klase Screen.PrimaryScreen.Bounds.

using System.Runtime.InteropServices;

public class CoreDll
{
  public const int LOGPIXELSX = 88;
  public const int LOGPIXELSY = 90;

  [DllImport("coredll.dll")]
  public static extern int GetDesktopWindow();

  [DllImport("coredll.dll")]
  public static extern int GetWindowDC(int hWnd);

  [DllImport("coredll.dll")]
  public static extern int ReleaseDC(int hWnd, int hDC);

  [DllImport("coredll.dll")]
  public static extern int GetDeviceCaps(int hdc, int nIndex);
}

public class ScreenEx
{
  public static bool IsQuarterVGA()
  {
    int hDC = CoreDll.GetWindowDC(CoreDll.GetDesktopWindow());
    int iPixels = CoreDll.GetDeviceCaps(hDC, CoreDll.LOGPIXELSX);

    return iPixels == 96 ? false : true;
  }
}

Written by sakowicz

Maj 9, 2007 @ 7:52 am

Napisane w .NET CF

Odpowiedzi: 4

Subscribe to comments with RSS.

  1. Mam watpliwosc powazna, to ze urzadzenie ma 96ppi to oznacza ze ekran jest kwadratowy? a jesli pojawi sie w sprzedazy urzadzenie ekranem o duzej rozdzielczosci? tak jak teraz np. sa juz urzadzenia z ekranami 640px o wielkosci zaledwie 2,8″. Spekuluje, nie wiem jak to wyglada w praktyce.

    piotr

    Maj 15, 2007 at 9:31 pm

  2. Nie twierdzę, że funkcja będzie pracować poprawnie na każdym urządzeniu. Tak się składa, że obecne urządzenia pracują w 96 i 192 DPI i bodaj te pracujące z 96DPI pracują w trybie QVGA (wiadomo pewnie gdzieś tam są jakieś wyjątki). Sam przetestowałem funkcje na kilku różnych urządzeniach i dawała mi prawidłowe rezultaty co, zaznaczam jeszcze raz, nie znaczy, że na innych urządzeniach również będą one poprawne.

    sakowicz

    Maj 16, 2007 at 8:16 am

  3. Ja mam inne pytanie. Używam funkcji DrawString, wielkość czcionki 16. Na urządzeniu QVGA jest ok a na VGA tekst jest za duży. Jak rozwiązać ten problem?

    ris

    Styczeń 26, 2008 at 7:46 pm

  4. Ja to robię tak, że wykorzystuję powyższą metodę do określenia rodzaju urządzenia (VGA/QVGA) a następnie w zależności od typu skaluję przez 2.

    sakowicz

    Styczeń 27, 2008 at 9:04 pm


Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: