Skocz do zawartości

Recommended Posts

Napisano

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?

Napisano

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

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...