`
tempsitegoogle
  • 浏览: 867944 次
文章分类
社区版块
存档分类
最新评论

MoveToEx, LineTo, Ellipse实例

 
阅读更多

调用MoveToEx,LineTo,Ellipse函数,实现如下实例:

使用WTL框架,选择Dialog类型,在MainDlg中定义两个private方法:

// draw arrow
void draw_arrow(int nStartX, int nStartY, int nLength) throw()
{
	::MoveToEx(m_hdc, nStartX, nStartY, NULL);
	::LineTo(m_hdc, nStartX + nLength, nStartY);
	::LineTo(m_hdc, nStartX + nLength - 5, nStartY - 5);
	::MoveToEx(m_hdc, nStartX + nLength, nStartY, NULL);
	::LineTo(m_hdc, nStartX + nLength - 5, nStartY + 5);
}
// draw node
void draw_node(int nCenterX, int nCenterY, int nRadius, LPCTSTR szTag, BOOL bCurrent = FALSE) throw()
{
	::Ellipse(m_hdc, nCenterX - nRadius, nCenterY - nRadius,
			nCenterX + nRadius, nCenterY + nRadius);
	if(bCurrent)
		::Ellipse(m_hdc, nCenterX - nRadius*0.4, nCenterY - nRadius*0.4, 
				nCenterX + nRadius*0.4, nCenterY + nRadius*0.4);
	::TextOut(m_hdc, nCenterX - 15, nCenterY + nRadius + 5, szTag, 2);
}

draw_arrow方法的作用是绘制带箭头的线段。draw_node方法的作用是绘制节点,它包含圆形及其下方的标记字符串。参数bCurrent表示本次所绘制的节点是否为当前阶段,本例选择“青年”为当前阶段,该节点的由两个同心圆与普通节点区分开来。

为MainDlg添加对WM_PAINT的消息处理,其响应方法如下所示:

LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
	PAINTSTRUCT ps;
	BeginPaint(&ps);
	m_hdc = ps.hdc;
	// draw life stages
	TCHAR* strStages[] = { _T("婴儿"), _T("幼儿"), _T("童年"), _T("少年"),
							_T("青年"), _T("中年"), _T("老年") };
	int nX = 20;
	RECT rc;
	GetClientRect(&rc);
	int nY = rc.bottom / 2;
	int nArrowLength = 50;
	int nRadius = 18;
	int nCurrent = 4; // current is "青年"
	draw_node(nX + nRadius, nY, nRadius, strStages[0], nCurrent == 0);
	for( int i = 0; i < 6; ++i ) {
		draw_arrow(nX + nRadius * 2 + i * nArrowLength + 2 * i * nRadius, nY, nArrowLength);
		draw_node(nX + nRadius * 3 + nArrowLength + i * nArrowLength + 2 * i * nRadius,
				nY, nRadius, strStages[i+1], nCurrent == i + 1);
	} // end for
	EndPaint(&ps);
	return 0;
}


在绘制的时候,除第一个节点之前不带有arrow外,其余6个节点都含有arrow,因此需对第一个节点进行特殊处理,将它的绘制放在for循环之外。整个工程的源码可点击下列链接下载:

http://pan.baidu.com/netdisk/singlepublic?fid=559720_2849936413

分享到:
评论

相关推荐

    Win32编程常用函数

    WNDCLASSEX GetStockObject CreateWindow MessageBox CreatePen GetClientRect SelectObject DeleteObject MoveToEx LineTo SetPixel GetPixel CreateSolidBrush CreateHatchBrush CreatePatternBrush Rectangle ...

    易语言API画曲线

    易语言API画曲线源码,API画曲线,GetDC,GetClientRect,MoveToEx,LineTo,Polyline,ReleaseDC

    易语言API绘图函数

    易语言API绘图函数源码,GetDC,GetWindowDC,ReleaseDC,MoveToEx,LineTo,SetROP2,GetWindowRect

    用VC++绘制等边三角形的实例方法

    ::LineTo(hdc,130,200); EndPaint(hwnd,&ps); DeleteObject(hP); DeleteObject(hB); break; case WM_DESTROY: PostQuitMessage(0); default: //默认时采用系统消息默认处理函数 ...

    易语言自绘时钟

    易语言自绘时钟源码,自绘时钟,处理子程序,BeginPaint,DeleteObject,FillRect,CreateSolidBrush,SelectObject,GetStockObject,Ellipse,CreatePen,LineTo,MoveToEx,DrawText,SetTimer,SetWindowLong,CallWindowProc,...

    易语言模拟心电图

    易语言模拟心电图源码,模拟心电图,创建字体,CreateCompatibleBitmap,CreateCompatibleDC,GetDC,DeleteDC,DeleteObject,SelectObject,BitBlt,CreatePen,SetBkColor,MoveToEx,LineTo,ReleaseDC,SetBkMode,...

    Windows 60个常用API

    LineTo() LoadLibraryA() mciSendStringA() MessageBoxA() Mouse_Event() MoveToEx() MoveWindow() Pie() Polygon() PostMessageA() Rectangle() ReleaseCapture() SendMessageA() SetCapture() SetComputerNameA() ...

    易语言半黑月自绘时钟

    易语言半黑月自绘时钟源码,半黑月自绘时钟,创建完毕,时钟周期事件,处理子程序,BeginPaint,DeleteObject,FillRect,CreateSolidBrush,SelectObject,GetStockObject,Ellipse,CreatePen,LineTo,MoveToEx,DrawText,...

    易语言简易画图

    易语言简易画图源码,简易画图,屏幕画线,GetDC,LineTo,SetROP2,ReleaseDC,RedrawWindow,GetCursorPos,MoveToEx

    易语言自绘列表框

    易语言自绘列表框源码,自绘列表框,自绘列表框_初始化,自绘列表框_释放,自绘列表框_消息处理,MakeRect,自绘列表框_清空,自绘列表框_加入项目,SetWindowLong,CallWindowProc,...MoveToEx,LineTo,SelectObject,CreateP

    易语言透明的文字

    易语言透明的文字源码,透明的文字,透明,BeginPath,EndPath,PathToRegion,GetWindowDC,SetWindowRgn,GetPixel,LineTo,MoveToEx,GetWindowRgn

    C++面向对象与可视化教程

    LineTo(hdc,300,130); MoveToEx(hdc,200,30,NULL); LineTo(hdc,200,230); EndPaint(hwnd,&ps); //释放设备环境句柄 DeleteObject(hP); //删除画笔句柄 DeleteObject(hB); //删除黑色画刷...

    易语言RGB颜色Alpha混合

    易语言RGB颜色Alpha混合源码,RGB颜色Alpha混合,RGB_Alpha,CRect,CreatePen,CreateSolidBrush,FillRect,GetDC,LineTo,MoveToEx,ReleaseDC,DeleteObject

    易语言透明叠加图片

    易语言透明叠加图片源码,透明叠加图片,画板_透明叠加图像,RGB_Alpha,CreatePen,CreateSolidBrush,FillRect,GetDC,LineTo,MoveToEx,ReleaseDC,DeleteObject

    高仿OFFICE2007颜色选择器

    选择颜色,初始化颜色组,初始化块组,显示主体颜色块,是否在块内,CreateCompatibleDC,CreateSolidBrush,FillRect,FrameRect,SelectObject,StretchBlt,CreateCompatibleBitmap,DeleteDC,CreatePen,LineTo,MoveToEx,...

    打印打印预览例程凌晨孤星

    正在打印,结束打印,设置打印信息,打印预览,打印,是否预览模式,取当前页,设置起始页,设置结束页,取起始页,取结束页,取绘图矩形区域,关于,TextOutA,GetStockObject,SelectObject,DeleteObject,CreatePen,LineTo,...

    易语言打印预览

    易语言打印预览源码,打印预览,开始打印,正在打印,结束打印,设置打印信息,打印,是否预览模式,取当前页,设置起始页,设置结束页,取起始页,取结束页,取绘图矩形区域,关于,TextOutA,...CreatePen,LineTo,MoveToEx,CreateFon

    加枫简易绘图器VC源代码(SDK)

    加枫简易绘图器可以绘制直线,圆,长方形,圆角矩形,可以选择绘图颜色.作者信息:顾加平(浙江平湖师范) 关键字:CreatePen,Rectangle,MoveToEx,RoundRect,Ellipse,SetCapture,sdk,简易绘图器

Global site tag (gtag.js) - Google Analytics