eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingParadoksy [Win]API MicrosoftuParadoksy [Win]API Microsoftu
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl>
    Newsgroups: pl.comp.programming
    Subject: Paradoksy [Win]API Microsoftu
    Date: Sat, 27 Aug 2011 20:27:09 +0200
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 101
    Message-ID: <o...@n...company.com>
    NNTP-Posting-Host: dynamic-78-8-40-164.ssp.dialog.net.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=iso-8859-2; format=flowed; delsp=yes
    Content-Transfer-Encoding: Quoted-Printable
    X-Trace: inews.gazeta.pl 1314469584 28720 78.8.40.164 (27 Aug 2011 18:26:24 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sat, 27 Aug 2011 18:26:24 +0000 (UTC)
    X-User: spoko_ws
    X-Antivirus: avast! (VPS 110827-0, 2011-08-27), Outbound message
    X-Antivirus-Status: Clean
    User-Agent: Opera Mail/11.50 (Win32)
    Xref: news-archive.icm.edu.pl pl.comp.programming:192046
    [ ukryj nagłówki ]

    Hej!

    Nadziałem się dziś na dziwne ograniczenie w .NET Windows Forms, a ściślej
    - w pionowym pasku przewijania. Otóż VScrollBar ma własność Maximum, która
    wraz z Minimum pozwala na ograniczenie zakresu wartości osiąganych przez
    pasek przewijania. I wszystko byłoby w porządku gdyby nie dwa fakty:
    a) Użytkownik nie jest w stanie osiągnąć wartości Maximum, tylko Maximum +
    1 - LargeChange, gdzie LargeChange to własność określająca, o ile
    przesunie się suwak po kliknięciu obszaru przewijania (lub wciśnięciu
    PageUp lub PageDown).
    b) Wartości od (Maximum + 1 - LargeChange) do Maximum są wizualizowane
    przez suwak ustawiony na maksymalnej pozycji - czyli użytkownik nie
    zobaczy różnicy pomiędzy żadnym z tych ustawień.

    Przyczyna takiego stanu rzeczy? Nieznana.

    Kiedyś potrzebowałem narysować przy pomocy GDI/GDI+ prostokąt z
    zaokrąglonymi narożnikami, wypełniony gradientem. W tym celu użyłem metody
    CreateRoundRectRgn, tworzącej region o wspomnianym kształcie.
    Każdy, kto bawił się trochę w WinAPI wie doskonale, że jeśli gdziekolwiek
    podaje się wymiary prostokąta opisującego cokolwiek, trzeba zawsze
    zwiększyć jego wymiary o jednostkę w poziomie i pionie, ponieważ WinAPI
    utnie ostatnią prawą kolumnę i ostatni dolny wiersz. W ten sposób ze
    współrzędnych (0, 0, 10, 10) zostanie utworzony prostokąt, którego prawy
    dolny narożnik ma współrzędne (9, 9).
    Microsoft jest bardzo konsekwentny w takiej a nie innej interpretacji
    prostokąta i w sumie ma to trochę sensu - można na przykład definiować
    prostokąt w nieco prostszy sposób: (x, y, x + width, y + height) zamiast
    (x, y, x + width - 1, y + height - 1). Ponadto istnieje możliwość
    utworzenia pustego regionu poprzez podanie równych współrzędnych (np. 0,
    0, 0, 0).

    Jednak okazuje się, że w przypadku (chyba jedynym) CreateRoundRectRgn
    Microsoft się wyłamał i zamiast zjadać jedną kolumnę i jeden wiersz, zjada
    dwa. Więc aby wygenerować region o współrzędnych (0, 0, 9, 9), należy
    funkcji podać współrzędne (0, 0, 11, 11).

    Przyczyna takiego stanu rzeczy? Nieznana.

    Czy nadzialiście się kiedyś na takie dziwne, niewytłumaczalne ograniczenia
    w różnych API? Czasami można stracić kilka dni na poszukiwaniu błędu,
    którego w kodzie nie ma...

    Pozdrawiam -- Spook.

    --
    ! ._______. Warning: Lucida Console sig! //) !
    ! || spk || www.spook.freshsite.pl / _ """*!
    ! ||_____|| spook at op.pl / ' | ""!
    ! | ___ | tlen: spoko_ws gg:1290136 /. __/"\ '!
    ! |_|[]_|_| May the SOURCE be with you! \/) \ !

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: