Skocz do zawartości

Dialog Units


Sabertooth

Recommended Posts

Witam!
Uzywajac visual studio 6, a dokladnie jego resource editora zrobilem sobie Dialoga w projekcie MFC. Wszystko pieknie dziala. Nistety zostalem zmuszony aby zrezygnowac z dobrodziejstw takowego tworzenia okien na rzecz tworzenia dynamicznego. I tutaj pojawil sie problem. Mam okolo 90 kontrolek, ktore musza zostac zainicjowane podczas startu programu. Ze swtorzeniem nie ma zadnych probemow. Sek w tym, ze pozycja podana w pliku z *.rc jest wyrazona w tak zwanych Dialog Units i wykorzystujac je podczas tworzenia dynamicznego [ potrzebne do tego sa piksele ] wszystko sie sypie. Moje pytanie brzmi w jaki sposob przeliczyc dialog unity na piksele.
Nie omieszkalem zagooglac. Wyniki Przedstawiam ponizej:

class MSKDialogUnits
{

private:
    WORD m_duXx4; // Dialog Units, on the X axis, times 4
    WORD m_duYx8; // Dialog Units, on the Y axis, times 8
public:

    MSKDialogUnits()
    {
        DWORD dw = GetDialogBaseUnits();
        m_duXx4 = LOWORD(dw);
        m_duYx8 = HIWORD(dw);

    }

    ~MSKDialogUnits() {};
    int X(int x) {return ((x * m_duXx4) /4);}
    int Y(int y) {return ((y * m_duYx8) /8);}

};

Niestety koordynaty zdaja sie byc niepoprawne, a przynajmniej pomylone o kilkanascie pikseli [ im dalsza pozycja od zera tym wiekszy blad ].

Moze ktos juz sie spotkal z takim problemem i moze ma rozwiazanie?

Link do komentarza
Udostępnij na innych stronach

Zgodnie z tym textem:

https://www.kellygroup.com/glinkj/help/scd/dunits.htm

Więc w skrócie:
1 jednostka dialogu w poziomie = 1/4 average character width ( czyli albo szerokosc sredniego znaku, albo srednia szerokosc znaku..)
1 jednostka dialogu w pionie = 1/8 average character height
MSDN twierdzi, że łatwiej jest użyc funkcji MapDialogRect, która w jednym ze swoich parametrów zwróci rozmiar okna dialogowego w pikselach.

pozdrawiam

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...