调用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
分享到:
相关推荐
WNDCLASSEX GetStockObject CreateWindow MessageBox CreatePen GetClientRect SelectObject DeleteObject MoveToEx LineTo SetPixel GetPixel CreateSolidBrush CreateHatchBrush CreatePatternBrush Rectangle ...
易语言API画曲线源码,API画曲线,GetDC,GetClientRect,MoveToEx,LineTo,Polyline,ReleaseDC
易语言API绘图函数源码,GetDC,GetWindowDC,ReleaseDC,MoveToEx,LineTo,SetROP2,GetWindowRect
::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,...
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
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,CRect,CreatePen,CreateSolidBrush,FillRect,GetDC,LineTo,MoveToEx,ReleaseDC,DeleteObject
易语言透明叠加图片源码,透明叠加图片,画板_透明叠加图像,RGB_Alpha,CreatePen,CreateSolidBrush,FillRect,GetDC,LineTo,MoveToEx,ReleaseDC,DeleteObject
选择颜色,初始化颜色组,初始化块组,显示主体颜色块,是否在块内,CreateCompatibleDC,CreateSolidBrush,FillRect,FrameRect,SelectObject,StretchBlt,CreateCompatibleBitmap,DeleteDC,CreatePen,LineTo,MoveToEx,...
正在打印,结束打印,设置打印信息,打印预览,打印,是否预览模式,取当前页,设置起始页,设置结束页,取起始页,取结束页,取绘图矩形区域,关于,TextOutA,GetStockObject,SelectObject,DeleteObject,CreatePen,LineTo,...
易语言打印预览源码,打印预览,开始打印,正在打印,结束打印,设置打印信息,打印,是否预览模式,取当前页,设置起始页,设置结束页,取起始页,取结束页,取绘图矩形区域,关于,TextOutA,...CreatePen,LineTo,MoveToEx,CreateFon
加枫简易绘图器可以绘制直线,圆,长方形,圆角矩形,可以选择绘图颜色.作者信息:顾加平(浙江平湖师范) 关键字:CreatePen,Rectangle,MoveToEx,RoundRect,Ellipse,SetCapture,sdk,简易绘图器