zoukankan
html css js c++ java
VC 和 GDI+ 实现仿ibook 翻页效果
void CGdiplusTestView::OnDraw(CDC* pDC) { CGdiplusTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here // device context for painting CDC dcMemory; dcMemory.CreateCompatibleDC(NULL); CRect bkRect; GetClientRect(&bkRect); CBitmap bitmap; bitmap.CreateCompatibleBitmap(pDC, bkRect.Width(), bkRect.Height()); SelectObject(dcMemory.GetSafeHdc(), bitmap); topFrame =(bkRect.Height() - height)/2; leftFrame = (bkRect.Width()-2*width)/2; Image L1Image(L"pages/1.jpg",false), L2Image(L"pages/2.jpg",false), L3Image(L"pages/1.jpg",false), L4Image(L"pages/2.jpg",false); Graphics graphics(dcMemory.m_hDC); graphics.DrawImage(&L1Image,leftFrame,topFrame,width,height); graphics.DrawImage(&L2Image,leftFrame+width,topFrame,width,height); Pen pen(Color::Black);//设置画笔 SolidBrush brush(Color::Black);//设置画刷 //设置输出字体 FontFamily fontfamily(L"微软雅黑"); Font font(&fontfamily,12,FontStyleRegular,UnitPoint); StringFormat strfmt; RectF rectf(leftFrame+25, topFrame+25,280,400); RectF rectf2(leftFrame+50+width, topFrame+25,280,450); RectF rectf3(0, 0,280,450); Color clrPen(0,0,0,0); Pen penDraw(clrPen,0); graphics.DrawString(context,1024,&font,rectf,&strfmt,&brush); graphics.DrawString(context,1024,&font,rectf2,&strfmt,&brush); float undersideOffset = width; double a = 45 + (45 * m_x) / width; double radians = a * (3.14 / 180.0); double pageUndersideRotationAngle = (180 - (2 *a)); float calculated_y = (m_x) * (tan(radians)); float calculated_x = 0; GraphicsPath gpLeft,gpRight; //////////////////////////////////////////////////////////////////2 if (calculated_y < height) { gpLeft.AddLine( PointF(abs(width - m_x + undersideOffset),height),PointF(width + undersideOffset, height)); gpLeft.AddLine( PointF(width + undersideOffset, height),PointF(width + undersideOffset,(height - (float)calculated_y))); }else { gpLeft.AddLine(PointF(abs(width - m_x + undersideOffset),height), PointF(width + undersideOffset, height)); gpLeft.AddLine(PointF(width + undersideOffset, height),PointF(width + undersideOffset, 0)); calculated_x = height / tan(radians); gpLeft.AddLine( PointF(width + undersideOffset, 0),PointF(abs(width - (m_x - (float)calculated_x)+undersideOffset),0)); } gpLeft.CloseFigure(); Matrix PathTranslationMatrix; PathTranslationMatrix.Translate((float)leftFrame, (float)topFrame); gpLeft.Transform(&PathTranslationMatrix); Region oldRegion; graphics.GetClip(&oldRegion); graphics.SetClip(&gpLeft); graphics.DrawPath(&penDraw,&gpLeft); graphics.DrawImage(&L4Image,leftFrame+width,topFrame,width,height); graphics.SetClip(&oldRegion); //////////////////////////////////////////////////////////////////////3 Bitmap pageUndersideImage(width,height); undersideOffset = width; // if (height < calculated_y) { gpRight.AddLine( PointF(abs(width - m_x - undersideOffset), height), PointF(width - undersideOffset, height)); gpRight.AddLine( PointF(width - undersideOffset, height), PointF(width - undersideOffset, (height - (float)calculated_y))); }/*else { gpRight.AddLine(PointF(abs(width - m_x - undersideOffset), height),PointF(width - undersideOffset, height)); gpRight.AddLine(PointF(width - undersideOffset, height), PointF(width - undersideOffset, 0)); calculated_x = height / tan(radians); gpRight.AddLine( PointF(width - undersideOffset, 0), PointF(abs(width - (m_x - (float)calculated_x)-undersideOffset), 0)); }*/ gpRight.CloseFigure(); Graphics ug(&pageUndersideImage); ug.SetClip(&gpRight); ug.DrawPath(&penDraw,&gpRight); ug.DrawImage(&L3Image,0,0,width,height); ug.DrawString(context,1024,&font,rectf3,&strfmt,&brush); Matrix PathTranslationMatrix1; PathTranslationMatrix1.Translate(leftFrame+width*2-m_x,topFrame+height); PathTranslationMatrix1.Rotate((float)(pageUndersideRotationAngle)); graphics.SetTransform(&PathTranslationMatrix1); graphics.DrawImage(&pageUndersideImage, -int(m_x) ,-height ,width, height ); pDC->BitBlt(0,0,bkRect.Width(),bkRect.Height(),&dcMemory,0, 0,SRCCOPY); graphics.ReleaseHDC(dcMemory.m_hDC); }
查看全文
相关阅读:
[转载]qemu-kvm安装配置
Hadoop通过c语言API访问hdfs
hadoop和hdfs环境搭建
OpenCV installation for Ubuntu 12.04
homework-01
linux命令2
压缩tar
anaconda 安装opencv
anconda安装第三方库
开源代码
原文地址:https://www.cnblogs.com/javawebsoa/p/2458418.html
最新文章
Linux系统(CentOS7)安装JDK 文图详解(jdk1.8.0_201)
JDK开发环境搭建及环境变量配置
MyEclipse2018.9.0设置全局编码
Oracle 进入数据库 新增用户 修改密码方法
mysql-8.0.15-winx64 解压版安装 图文详解
p24 响应式导航栏 关闭按钮
p19 响应式布局 流动布局 #2
p18 响应式布局#1
17节课前归纳
操作符 not 否定 p17
热门文章
操作符and 和 or -- p16
14-resolution
09-设备宽高比 aspect-ratio
media feature 媒体特性 9
购物车程序-练习
HTML-表单
如何计算团队贡献
采访~
Project提议
会议记录2013/9/24
Copyright © 2011-2022 走看看