#include "stdafx.h"
#include "rdgdi.h"
#include "kVie.h"
kVie::kVie( )
{
ivalid = FALSE;
dnF = FALSE;
drF = FALSE;
}
kVie::~kVie( )
{
}
BEGIN_MESSAGE_MAP( kVie, CStatic )
//{{AFX_MSG_MAP( kVie )
ON_WM_PAINT( )
ON_WM_LBUTTONDOWN( )
ON_WM_LBUTTONUP( )
ON_WM_LBUTTONDBLCLK( )
ON_WM_MOUSEMOVE( )
//}}AFX_MSG_MAP
END_MESSAGE_MAP( )
void kVie::OnPaint( )
{
CPaintDC dc( this ); DrawMap( &dc );
}
void kVie::DrawMap( CDC *pdc )
{
Graphics g( pdc->m_hDC ); g.SetSmoothingMode( SmoothingModeHighQuality );
Pen bpen( Color( 255, 0, 0, 255 ), 1 );
Pen gpen( Color( 255, 0, 255, 0 ), 1 );
for( int i = 0; i < plry.GetSize( ); i ++ )
{
PointF* pTm = new PointF[ plry[ i ].pty.GetSize( ) ];
for( int v = 0; v < plry[ i ].pty.GetSize( ); v ++ )
{
pTm[ v ] = plry[ i ].pty.GetAt( v );
}
GraphicsPath pth; pth.AddLines( pTm, plry[ i ].pty.GetSize( ) ); g.DrawPath( &bpen, &pth );
delete [ ] pTm;
}
if( drF == TRUE && ivalid == TRUE )
{
PointF* pTm = new PointF[ drP.pty.GetSize( ) ];
for( int v = 0; v < drP.pty.GetSize( ); v ++ )
{
pTm[ v ] = drP.pty.GetAt( v );
}
GraphicsPath pth; pth.AddLines( pTm, drP.pty.GetSize( ) ); g.DrawPath( &gpen, &pth );
delete [ ] pTm;
}
}
void kVie::OnLButtonDown( UINT nFlags, CPoint point )
{
dnF = TRUE;
CStatic ::OnLButtonDown( nFlags, point );
}
void kVie::OnLButtonUp( UINT nFlags, CPoint point )
{
if( drF == TRUE && ivalid == TRUE )
{
drP.pty.Add( PointF( REAL( point.x ), REAL( point.y ) ) );
plry.Add( drP ); drP.pty.RemoveAll( );
}
MemDraw( );
dnF = FALSE; drF = FALSE; ivalid = FALSE;
CStatic ::OnLButtonUp( nFlags, point );
}
void kVie::OnLButtonDblClk( UINT nFlags, CPoint point )
{
CStatic ::OnLButtonDblClk( nFlags, point );
}
void kVie::OnMouseMove( UINT nFlags, CPoint point )
{
if( dnF == TRUE ){ drF = TRUE; }else{ drF = FALSE; }
if( drF == TRUE && ivalid == TRUE )
{
drP.pty.Add( PointF( REAL( point.x ), REAL( point.y ) ) );
}
MemDraw( );
CStatic ::OnMouseMove( nFlags, point );
}
void kVie::AcceptMouseIn( BOOL vLid )
{
ivalid = vLid;
}
void kVie::MemDraw( )
{
CDC* pDC = GetDC( );
CDC memdc; memdc.CreateCompatibleDC( pDC ); //声明一个DC//将该DC创建为与pDC兼容的内存DC
CRect rt; GetClientRect( &rt ); //取得当前窗口客户区的大小
CBitmap membmp; membmp.CreateCompatibleBitmap( pDC, rt.right - rt.left, rt.bottom - rt.top ); //声明一个位图//创建一个与pDC匹配的兼容位图
memdc.SelectObject( &membmp ); //声明内存DC使用内存位图
memdc.FillSolidRect( rt, RGB( 255, 255, 255 ) ); //使用画刷清理背景为固定颜色
//------------------------------------------------//
DrawMap( &memdc );
//------------------------------------------------//
pDC->BitBlt( 0, 0, rt.right, rt.bottom, &memdc, 0, 0, SRCCOPY ); //将内存DC拷贝到pDC进行显示
memdc.DeleteDC( ); membmp.DeleteObject( ); //清理临时变量内存
}
void kVie::Calculate( )
{
CDC* pDC = GetDC( ); Graphics g( pDC->GetSafeHdc( ) );
GraphicsPath wPath; wPath.SetFillMode( FillModeWinding );
for( int i = 0; i < plry.GetSize( ); i ++ )
{
PointF* pTm = new PointF[ plry[ i ].pty.GetSize( ) ];
for( int v = 0; v < plry[ i ].pty.GetSize( ); v ++ )
{
pTm[ v ] = plry[ i ].pty.GetAt( v );
}
GraphicsPath pth; pth.AddLines( pTm, plry[ i ].pty.GetSize( ) );
wPath.AddPath( &pth, FALSE );
delete [ ] pTm;
}
Pen woPen( Color( 0, 0, 0, 0 ), 1 );
wPath.Widen( &woPen );
wPath.Outline( );
wPath.Flatten( );
wPath.Flatten( );
wPath.Flatten( );
RectF wboud; wPath.GetBounds( &wboud );
double wsqua = wboud.Width * wboud.Height;
GraphicsPathIterator pathIterator( &wPath );
INT subpathCount = pathIterator.GetSubpathCount( );
GraphicsPath* psub = new GraphicsPath[ subpathCount ];
BOOL ExClose = FALSE;
for( int k = 0; k < subpathCount; k ++ )
{
pathIterator.NextSubpath( &psub[ k ], &ExClose );
RectF boud; psub[ k ].GetBounds( &boud );
double squa = boud.Width * boud.Height;
Pen tpen( Color( 255, k * 64, 0, k * 64 ), 1 );
if( ExClose == TRUE && ( squa < wsqua ) )
{
PathData pDat; psub[ k ].GetPathData( &pDat );
for( int x = 0; x< pDat.Count; x ++ )
{
g.DrawEllipse( &tpen, pDat.Points[ x ].X-1, pDat.Points[ x ].Y - 1, REAL( 2 ),REAL( 2 ) );
}
Region vRgn( &psub[ k ] );
SolidBrush br( Color( 128, 255, 0, 0 ) );
g.FillRegion( &br, &vRgn );
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
rdgdi.zip (48个子文件)
rdgdi
kVie.cpp 4KB
StdAfx.cpp 27B
resource.h 683B
rdgdiDlg.h 690B
rdgdi.h 340B
rdgdi.cpp 705B
kVie.h 694B
StdAfx.h 1KB
rdgdi.clw 934B
rdgdi.dsw 535B
rdgdi.dsp 4KB
res
rdgdi.ico 1KB
rdgdi.rc2 397B
GDI+
GdiPlusPath.h 46KB
GdiPlusFontFamily.h 4KB
GdiPlusTypes.h 16KB
GdiPlusFontCollection.h 3KB
GdiPlusFont.h 6KB
GdiPlusBase.h 833B
GdiPlusEnums.h 47KB
GdiPlusMetaFile.h 12KB
GdiPlus.lib 202KB
GdiPlusGraphics.h 86KB
GdiPlusImageCodec.h 1KB
GdiPlusFlat.h 83KB
GdiPlusInit.h 3KB
wmsstd.h 9KB
GdiPlusHeaders.h 19KB
GdiPlusColor.h 10KB
GdiPlus.dll 1.63MB
GdiPlusPen.h 13KB
GdiPlusimageAttributes.h 13KB
GdiPlusBitmap.h 20KB
GdiPlus.h 2KB
GdiPlusPixelFormats.h 4KB
GdiPlusMetaHeader.h 8KB
GdiPlusRegion.h 15KB
GdiPlusBrush.h 27KB
GdiPlusGpStubs.h 3KB
GdiPlusImaging.h 23KB
GdiPlusMem.h 788B
GdiPlusStringFormat.h 8KB
GdiPlusColorMatrix.h 2KB
GdiPlusMatrix.h 9KB
GdiPlusCachedBitmap.h 1KB
GdiPlusLineCaps.h 7KB
rdgdiDlg.cpp 2KB
rdgdi.rc 5KB
共 48 条
- 1
资源评论
- ll18582022-10-26感谢分享,学习了!
- andychangbiao2015-05-08很实用的程序 对我很大的帮助
Tinary3v0
- 粉丝: 210
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- torchvision resnet18 计算相似度
- mnist手写数据集本地下载链接
- 52193906181644561181711717834527.jpg
- 图片缓冲技术(android)源码
- 花数据集+数据集汇总+标签txt+数据集汇总代码+迁移学习最佳模型+全部迭代最佳模型
- 20240329224412.zip
- switch.docx `switch`语句是C++中的一种流程控制语句,通常用于根据表达式的值选择执行不同的代码块 下面是`
- python绘制直方图-02-进程之间不共享全局变量.ev4.rar
- python绘制直方图-01-第三天知识点回顾.ev4.rar
- 01背包问题动态规划.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功