2010-05-11 4 views
1

Je dessine un rectangle en millimètres sur un panneau en utilisant le code suivant en C# en entrant la largeur et la longueur en mm à l'exécution. Cependant, le rectangle résultant dessiné varie en taille dans différents moniteurs. Je veux que le rectangle apparaisse la même taille indépendamment de l'exécution de l'application dans un moniteur. Est-ce que any1 peut m'aider? actuellement la largeur pour 10mm mesure 12mm et la longueur pour 10mm montre 11mm en utilisant une balance. J'ai testé l'application sur différents moniteurs, là encore, elle montre une longueur différente. Est-ce que c'est quand même que je peux le montrer pour avoir la même largeur et la même longueur?dessiner un rectangle en millimètres n'affiche pas la largeur exacte

void panel1_Paint(object sender, PaintEventArgs e) 
{ 
    SolidBrush ygBrush = new SolidBrush(Color.YellowGreen); 
    g = panel1.CreateGraphics(); 
    g.PageUnit = GraphicsUnit.Millimeter; 

    int w = Int32.Parse(textBox1.Text.ToString()); 
    int h = Int32.Parse(textBox2.Text.ToString()); 

    rct = new Rectangle(94, 27, w, h); 
    g.FillRectangle(ygBrush, rct); 
} 

Répondre

2

La plupart des écrans ne sont pas correctement configurés pour que l'ordinateur connaisse le DPI (points par pouce). Les unités physiques comme les millimètres ne fonctionnent que si l'ordinateur sait combien de pixels sont en un millimètre, à la fois horizontalement et verticalement. Pour l'essentiel, la méthode que vous utilisez est correcte, mais il est très peu probable que vous rencontriez des machines correctement configurées dans le monde réel.

Si vous deviez résoudre ce problème dans votre logiciel, vous pourriez peut-être inclure une option de «configuration» où l'utilisateur serait responsable de la définition de l'échelle de l'application.

+0

Merci. Mais j'ai testé l'application dans 3 machines différentes et également vérifié la valeur DPI de ces moniteurs en le récupérant via g.DPIX. La valeur était 96dpi. Y at-il un paramètre qui change avec différents moniteurs ou une résolution d'écran différente. J'ai utilisé d'autres options comme GetDeviceCaps(), Screen.PrimaryScreen.Bounds aussi. Je ne suis pas en mesure de comprendre exactement quel paramètre varie avec différentes machines ou au moins l'application devrait fonctionner correctement pour différentes résolutions. – user338081

+0

Non, c'est mon point: dpi est rarement précis, et il est encore plus rare que quelqu'un configure correctement leur système. Rappelez-vous: la machine elle-même n'a aucun moyen de savoir à quelle taille elle est connectée. EG: à la maison, j'ai un moniteur de 24 "et un de 26", tous deux fonctionnant à la même résolution. Le DPI sur chaque moniteur est différent - mais Windows n'en a aucune idée. Votre logiciel * ne pourra jamais fonctionner * comme requis sur ma machine tant que je n'aurai pas personnellement informé Windows de la différence de mon affichage. Si vous tenez également compte des changements de résolution, ce problème devient encore plus complexe ... –

+0

Yup Thanks ..Got it. – user338081

Questions connexes