GDI+ 中用自定义线帽花了一个三角形,不知如何填充??

木黑神 2014-10-24 01:34:21
1. 自定义线帽花了一个三角形,不知如何填充??
2. 还有三角形有一个角不是尖的,不知如何处理??
如图:


代码:
	
case WM_LBUTTONUP:
{
y.x = LOWORD(lParam);
y.y = HIWORD(lParam);

hdc = GetDC(hwnd);
Graphics hh(hdc);

Pen pen(Color(255,0,255,255));
pen.SetWidth(5);
pen.SetLineJoin(LineJoinMiterClipped);
GraphicsPath EndPath;

EndPath.AddLine(0,0,5,-10);
EndPath.AddLine(0,0,-5,-10);
EndPath.AddLine(5,-10,-5,-10);

CustomLineCap EndCap(NULL,&EndPath);
pen.SetCustomEndCap(&EndCap);

hh.DrawLine(&pen,x.x,x.y,y.x,y.y);
}
return 0;
case WM_LBUTTONDOWN:
x.x = LOWORD(lParam);
x.y = HIWORD(lParam);
return 0;
...全文
317 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
木黑神 2015-08-04
  • 打赏
  • 举报
回复
自己的代码,还是没有API 好。

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	
	HDC hdc;
	static POINT x, y;
 	
	switch(uMsg)
	{
	case WM_LBUTTONUP:
		{
			y.x = LOWORD(lParam);
			y.y = HIWORD(lParam);
			
			hdc = GetDC(hwnd);
			Graphics hh(hdc);
			hh.SetSmoothingMode(SmoothingModeAntiAlias);   //抗锯齿

			Pen pen(Color(255,255,0,0));
			pen.SetWidth(3);
		
			AdjustableArrowCap cap(5,5,TRUE);		//调整箭头(长度,宽度,是否闭合)
			pen.SetCustomEndCap(&cap);				//选定	

			hh.DrawLine(&pen,x.x,x.y,y.x,y.y);
			
			ReleaseDC(hwnd, hdc);
		}
		break;
	case WM_LBUTTONDOWN:
		x.x = LOWORD(lParam);
		x.y = HIWORD(lParam);
		break;
		
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

木黑神 2015-07-30
  • 打赏
  • 举报
回复
问题还是要自己解决: 我把方法和源码共享给大家。 用的是 GDI+ 自定义线冒。 多画几个三角形,即可把中间的空隙填充,再画点直线填充。 不要全用三角形填充,不然会很尖很尖。 自我感觉很完美,不管画笔宽度怎么改变,都不会有问题。

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  
	HDC hdc;

	static POINT x, y;

	Point pts[3] = {
		Point(0, 0),
		Point(2, -5),
        Point(-2, -5),
	};

	Point pts1[3] = {
			Point(0, 0),
			Point(0, -5),
			Point(0, -5),
	};

	switch(uMsg)
	{
	case WM_LBUTTONUP:
		{
			y.x = LOWORD(lParam);
			y.y = HIWORD(lParam);
	
 			hdc = GetDC(hwnd);
			Graphics hh(hdc);

 			Pen pen(Color(255,0,255,255));
 			pen.SetWidth(4);

			GraphicsPath EndPath, EndPath1;

			EndPath.AddPolygon(pts, 3);
			EndPath.AddPolygon(pts1, 3);

			EndPath.AddLine(0,-1,1,-5);
			EndPath.AddLine(0,-1,-1,-5);

   			CustomLineCap EndCap(NULL,&EndPath);
 			pen.SetCustomEndCap(&EndCap);

 			hh.DrawLine(&pen,x.x,x.y,y.x,y.y);
	
			ReleaseDC(hwnd, hdc);
		}
		break;
	case WM_LBUTTONDOWN:
		x.x = LOWORD(lParam);
		x.y = HIWORD(lParam);
		break;

	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
Trent1985 2014-11-17
  • 打赏
  • 举报
回复
FloodFill填充算法http://bbs.csdn.net/topics/390256087
木黑神 2014-10-24
  • 打赏
  • 举报
回复
引用 1 楼 lx624909677 的回复:
用一个POINT结构体记录下你那个三角的坐标,然后创建一个brush,用这个brush来画那个三角
不知道POINT如何才能把三角形的那两个点保存起来。 windows内部也不知道如何实现的,我想看看自定义函数内部是如何完成的。 可惜不会看,只看到一个return返回值
lx624909677 2014-10-24
  • 打赏
  • 举报
回复
用一个POINT结构体记录下你那个三角的坐标,然后创建一个brush,用这个brush来画那个三角

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧