想画一把刻度尺,并打印出来。在屏幕上画,拿实际尺子量屏幕,总是小于实际尺子。以下代码如果单纯拷贝可能不能运行,我会在下面说明以下。Pen p = new Pen(Color.Black, 0.1f);
for (int i = 0; i < 420; i++ )
{
if ((i % 10) == 0)
{//厘米
m_TopStaffGph.DrawLine(p, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), 0, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), lineH / 2);
m_TopStaffGph.DrawString((i / 10).ToString(), m_TopStaffFone, Brushes.Black, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width - 5), lineH / 2);
}
else if ((i % 5) == 0)
{//5毫米
m_TopStaffGph.DrawLine(p, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), 0, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), lineH / 3);
}
else
{//毫米
m_TopStaffGph.DrawLine(p, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), 0, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), lineH / 4);
}
}这是在TopStaff_Paint事件中的代码。TopStaff是个panel。
m_TopStaffGph是由TopStaff.CreateGraphics建立的。
上面代码中 我单纯的认为96/25.4是屏幕一毫米的刻度。
因为不管是事件中的e还是m_TopStaffGph,它们的dpix都是96。
可是实际画出来以后,当我傻呼呼的拿尺子去量屏幕时,发现总是小于实际。求指点。
后面还有用打印机打印出纸张,先解决前面的问题。C#dpigraphics
for (int i = 0; i < 420; i++ )
{
if ((i % 10) == 0)
{//厘米
m_TopStaffGph.DrawLine(p, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), 0, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), lineH / 2);
m_TopStaffGph.DrawString((i / 10).ToString(), m_TopStaffFone, Brushes.Black, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width - 5), lineH / 2);
}
else if ((i % 5) == 0)
{//5毫米
m_TopStaffGph.DrawLine(p, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), 0, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), lineH / 3);
}
else
{//毫米
m_TopStaffGph.DrawLine(p, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), 0, (float)((float)(i * 96) / (float)25.4 + TopLeftBank.Width), lineH / 4);
}
}这是在TopStaff_Paint事件中的代码。TopStaff是个panel。
m_TopStaffGph是由TopStaff.CreateGraphics建立的。
上面代码中 我单纯的认为96/25.4是屏幕一毫米的刻度。
因为不管是事件中的e还是m_TopStaffGph,它们的dpix都是96。
可是实际画出来以后,当我傻呼呼的拿尺子去量屏幕时,发现总是小于实际。求指点。
后面还有用打印机打印出纸张,先解决前面的问题。C#dpigraphics
(有可能有其他的像素密度的,一般的Window默认都是96)graphic.DrawLine(Pens.Black, new PointF(50,50),new PointF(50,50+37.8f));我的显示器,刚好是1cm
同样的显示器,设置成1920*1080 和设置成 1600*900,DPI都是96。这样的话,可能要获取硬件设备的大小了
可以看看下面的这篇文章
VC++获取屏幕大小第二篇 物理大小GetDeviceCaps 上