我看到有些软件里画虚线特别细,好像隔几个像素点再画一个点的.
我自己在CreatePen的时候指定style参数为PS_DOT,宽度为0,画出来的虚线仍然感觉太粗,好像是连续画几个像素,再隔几个不画,然后接着画几个像素这样循环的,不适合做背景坐标线,请问各位还有没有办法画细一点的虚线,就是达到直线上每隔几个像素出现一个显示点,然后再隔几个像素出现一个显示点这种效果
我自己在CreatePen的时候指定style参数为PS_DOT,宽度为0,画出来的虚线仍然感觉太粗,好像是连续画几个像素,再隔几个不画,然后接着画几个像素这样循环的,不适合做背景坐标线,请问各位还有没有办法画细一点的虚线,就是达到直线上每隔几个像素出现一个显示点,然后再隔几个像素出现一个显示点这种效果
解决方案 »
- WinDbg中的Calls窗口显示的调用栈内容有点少
- 如何在Menu中加入Dialog,并导出?
- GUIDGEN.EXE在MSDN里也看到了,不过没介绍怎么打开使用啊,这东西在哪啊???
- 怎么使用EDIT控件
- 请教vc中多文档问题
- 高程考的不爽
- 现在到底应该学什么?Vc++,C++builder,VB,Delphi还是其他(java,.net)
- C++高手请过来!
- 如何在CMyApp,CMainFrame,CMyDoc,CMyView之外的类中实现菜单响应函数?
- 在本地机器上可以,使用使用regsvr32成功注册Bankps.dll能够使用dcomcnfg找到该Bank组件.但是在另一台客户机,使用regsvr32成功注册Bankps.dll,但是使用明林dcomcnfg找不到该组件?
- vc类之间的变量传递
- vc++ 汽车维修管理系统
1.间距长度固定为两个像素http://www.codeproject.com/KB/GDI/DOTTED_PEN.aspx
LOGBRUSH LogBrush;
LogBrush.lbColor = c_colorGridLine;
LogBrush.lbStyle = PS_SOLID;
CPen penDotted;
penDotted.CreatePen( PS_COSMETIC | PS_ALTERNATE , 1, &LogBrush, 0, NULL );
2.使用GDI+实现任意虚线
void CExampleView::OnDraw(CDC* pDC)
{
CExampleDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
using namespace Gdiplus;
Graphics graphics(pDC->m_hDC);
float dashValues[] = {1, 5}; //像素长度为1,间距长度为5
Pen blackPen(Color(0,0,0), 0);
blackPen.SetDashPattern(dashValues,2);
graphics.DrawLine(&blackPen, Point(5, 15), Point(225, 15));
}
3.如楼上所说的自己用SetPixel描点
我用SDK,GDI来画,
LOGBRUSH LogBrush;
LogBrush.lbColor = c_colorGridLine;
LogBrush.lbStyle = PS_SOLID;
CPen penDotted;
penDotted.CreatePen( PS_COSMETIC | PS_ALTERNATE , 1, &LogBrush, 0, NULL );
这段代码我试了一下,没效果,可能是我转得不对
我直接CreatePen(PS_COSMETIC | PS_ALTERNATE ,0,RGB(255,0,0));
应该是:
::ExtCreatePen(PS_COSMETIC | PS_ALTERNATE, 1, &log_brush, 0, NULL);