以前在研究半透明不规则窗口的时候,用的是gdi的TextOut/DrawText绘制字体,但绘制出的字体是透明的,现在我完全放弃了GDI的TextOut()、BitBlt()的方式,而用SetDIBitsToDevice()代替,就是直接贴像素到DC里。
今天尝试用SetDIBitsToDevice()+UpdateLayeredWindow()实现半透明不规则窗口,结果非常顺利!贴出来,共享给需要的朋友.另外,本程序还附带了一个使用MMX汇编优化的32位alpha混合函数(57行,有详尽注释),需要的朋友可以直接copy了。
PS:关于字体的绘制我建议大家用GetGlyphOutline()手动提取字形像素去绘制,因为TextOut这类绘制函数功能有限,只适合初级软件使用,而要想画出丰富多彩的界面,比如字体alpha渐变,就必须自己操作像素,所以GetGlyphOutline()才是专业级的,而且兼容性好,可以抽象出来提供给ddraw、d3d、opengl等使用
2024/6/16 14:41:52 328KB 不规则窗口
1
Badclimatechangemaygreatlyincreasethefragilityofthecountry.Howtoevaluatetheimpactofclimatechangeandmitigatetheimpactofclimatechangehasbecomeanurgentproblem.Withregardtotaskone,adataenvelopmentanalysis(DEA)modelisestablishedtogetthecountry'sfragility.Firstofall,weselected4climatefactorsasinputindicatorsand5outputindicators.Then,weusetheentropymethodtodeterminetheweightandthenthenationalvulnerabilityisdivided.Atthesametime,wegettheconclusionthattemperatureaffectsGDPandthetimesofarmedconflictdirectlyandaffectsthefragilityindirectly.Inviewoftasktwo,wechooseSomaliaasanobjectofstudy.First,alltheindexesaredividedinto5levelsbythemethodofclusteranalysis.Second,weselect10countriesincludingSomalia,tosolvethedecisionunitmatrix.Then,usingthemodeloftheproblemone,itisfoundthattheincreaseintemperatureandrainfallwillcausethenationalvulnerabilitytoriseanddecrease,respectively.Finally,weassign4climateindicatorsto0ofthedecisionunits,anddrawtheconclusionthatnationalvulnerabilitywillbereducedwithouttheimpactofclimatefactors.Whenitcomestotaskthree,weusetheroughsettheorytoreducetheoutputindextothenumberofarmedconflicts.Then,weusetheBPneuralnetworkmodeltopredicttheconclusion:Thereisasignificantincreaseinfragilityincasesofmuchmorearmedconflictandabnormaltemperature.Whentheaverageannualarmedconflictiscertain,thenationalvulnerabilityindexwillfaceanincreasingturningpointatthetemperatureof10.01andtherainfallof1823mm.Astotaskfour,threepoliciesonenergyreductionandemissionreductionissuedbythegovernmenthavebeenselected,andamodelofcarboncycleisestablished.TakingChinaasanexample,wecalculatetheextentofthechangeoftheaveragetemperaturebyreducingthecarbondioxideemiss
2024/1/31 1:50:43 1.21MB mei  sai
1
MedtronicPB560VentilatorSystem–Release2.0(.zip)Includes:ManufacturingfixturesPrintedcircuitboarddrawings(includingmultipleBOMs)3DCADfilesMechanicalpartdrawingsPermissivelicense31-03-2020|296.1MB
2023/10/16 0:23:43 296.15MB 源代码 硬件图纸 设计资料
1
前面几日我重新实现了迷宫的自动生成方法,并且添加了迷宫自动寻路方法。
有了一个独立于GUI的迷宫库,我开始迫不及待地实现三维迷宫了!下面是我在开发迷宫程序中遇到的问题。
1、怎样将迷宫类的行和列映射到真实的三维坐标中?迷宫应该用哪个参考系来描述?其实我在制作的时候为了简化,将二维迷宫的左上角与三维的原点重合,二维迷宫的右对应三维的X轴正方向,迷宫的下对应Z轴的正方向。
2、迷宫的“上、下、左、右”在三维中应该叫做什么?在确定好迷宫的位置后,我们将迷宫的上对应Z轴的负半轴,下对应Z轴的正半轴,左对应X轴的负半轴,右对应Y轴的正半轴。
3、三维点绘制顺序以及OpenGL裁剪模式造成的一些面不可见问题。
这个问题是我在编写二维迷宫没有想到的。
主要是因为二维迷宫中描述墙是用一条直线,而到了三维则是一个面。
由于在OpenGL中有裁剪模式可以选择,我使用了glFrontFace(GL_CW);//顺时针的绘制为正面glEnable(GL_CULL_FACE);//剔除不是正面的面进行设定,也就是说,所有在摄像机看来是逆时针绘制的图形都无法显示。
因此我不得不用同样的顶点绘制两个面。
下面是相关的函数:voidDrawInnerWall(Point3F&p1,Point3F&p2,Point3F&p3,Point3F&p4){glTexCoord2f(0.0f,1.0f);glVertex3fv(p1);glTexCoord2f(1.0f,1.0f);glVertex3fv(p2);glTexCoord2f(1.0f,0.0f);glVertex3fv(p3);glTexCoord2f(0.0f,0.0f);glVertex3fv(p4);}voidDrawOuterWall(Point3F&p1,Point3F&p2,Point3F&p3,Point3F&p4){glTexCoord2f(1.0f,1.0f);glVertex3fv(p1);glTexCoord2f(0.0f,1.0f);glVertex3fv(p2);glTexCoord2f(0.0f,0.0f);glVertex3fv(p3);glTexCoord2f(1.0f,0.0f);glVertex3fv(p4);}在编写这些函数的时候尤其注意纹理坐标的绘制顺序。
可以在纸上绘制一个草图。
下面是我调用的代码:if(Cell_UpWall(cell)){DrawInnerWall(p8,p7,p3,p4);DrawOuterWall(p7,p8,p4,p3);}4、怎样设置阻挡?设置阻挡的基本原则还是先检测后执行。
首先我先尝试着执行走一步,再判断这一步是不是出现了越界问题。
如果出现了越界问题,那么不执行这一步,否则执行这一步。
为了不让我们无限地靠近墙,我设定了一个gap,即摄像机必须与墙保持gap的距离。
下面是我相关的代码:boolView3D::CanGo(Maze&maze,floatstep){staticfloatgap=m_CellSize.w/8.0f;//摄像机与墙最近不能超过的间隔constPoint3F&pos=m_Camera.Pos();Point3FtryPos;if(pos.y>0&&pos.y(row-1)*m_CellSize.w);if(
2023/9/28 16:29:52 737KB opengl 游戏 摄像机
1
第一章Win32API概论…………………………………………………………………………11.1为什么使用Win32API…………………………………………………………………11.2Win32API简介…………………………………………………………………………11.3综述………………………………………………………………………………………11第二章窗口管理函数(WindowsControlFunction)……………………………………132.1易用特性函数(AccessibilityFeatures)…………………………………………132.2按钮函数(Button)……………………………………………………………………202.3插入标记(^)函数(Caret)…………………………………………………………212.4组合框函数(Combobox)……………………………………………………………242.5通用对话框函数(CommonDialogBox)……………………………………………252.6标函数(Cursor)………………………………………………………………………362.7对话框函数(DialogBox)……………………………………………………………402.8编辑控制函数(EditControl)………………………………………………………542.9图标函数(Icon)………………………………………………………………………542.10键盘加速器函数(KeyboardAccelerator)………………………………………612.11键盘输入函数(KeyboardInPut)…………………………………………………632.12列表框函数(Listbox)……………………………………………………………752.13菜单函数(Menu)……………………………………………………………………762.14消息和消息队列函数(MessageandMessageQueue)……………………………902.15鼠标输入函数(MouseInput)……………………………………………………1002.16多文档接口函数(MultipleDocumentInterface)……………………………1032.17资源函数(Resource)………………………………………………………………1052.18滚动条函数(ScrollBar)…………………………………………………………1132.19窗口函数(Window)…………………………………………………………………1192.20窗口类函数(WindowClass)………………………………………………………1442.21窗口过程函数(WindowProcedure)………………………………………………1502.22窗口属性函数(WindowProperty)………………………………………………152第三章图形设备接口函数(GraphicDeviceInterfaceFunction)…………………1553.1位图函数(Bitmap)…………………………………………………………………1553.2笔刷函数(Brush)……………………………………………………………………1713.3剪切函数(Clipping)………………………………………………………………1763.4颜色函数(Color)……………………………………………………………………1793.5坐标空间与变换函数(CoordinateSpaceTransformation)……………………1863.6设备环境函数(DeviceContext)…………………………………………………1953.7填充形态函数(Filledshape)……………………………………………………2113.8字体和正文函数(FontandText)…………………………………………………2153.9ICM2.0函数…………………………………………………………………………2383.10线段和曲线函数(LineandCurve)………………………………………………2953.11图元文件函数(Metafile)…………………………………………………………3003.12多显示器函数(MultipleDisplayMonitors)…………………………………3113.13绘图函数和画图函数(PaintingandDrawing)……………………………
2023/8/31 12:16:21 662KB windowsapi 手册 chm
1
源代码:#include#include#include#include#definePI3.1415926/*定义常量*/#defineUP0x4800/*上移↑键:修改时间*/#defineDOWN0x5000/*下移↓键:修改时间*/#defineESC0x11b/*ESC键:退出系统*/#defineTAB0xf09/*TAB键:移动光标*//*函数声明*/intkeyhandle(int,int);/*键盘按键判断,并调用相关函数处理*/inttimeupchange(int);/*处理上移按键*/inttimedownchange(int);/*处理下移按键*/intdigithour(double);/*将double型的小时数转换成int型*/intdigitmin(double);/*将double型的分钟数转换成int型*/intdigitsec(double);/*将double型的秒钟数转换成int型*/voiddigitclock(int,int,int);/*在指定位置显示时钟或分钟或秒钟数*/voiddrawcursor(int);/*绘制一个光标*/voidclearcursor(int);/*消除前一个光标*/voidclockhandle();/*时钟处理*/doubleh,m,s;/*全局变量:小时,分,秒*/doublex,x1,x2,y,y1,y2;/*全局变量:坐标值*/structtimet[1];/*定义一个time结构类型的数组*/main(){intdriver,mode=0,i,j;driver=DETECT;/*自动检测显示设备*/initgraph(&driver,&mode,"");/*初始化图形系统*/setlinestyle(0,0,3);/*设置当前画线宽度和类型:设置三点宽实线*/setbkcolor(0);/*用调色板设置当前背景颜色*/setcolor(9);/*设置当前画线颜色*/line(82,430,558,430);line(70,62,70,418);line(82,50,558,50);line(570,62,570,418);line(70,62,570,62);line(76,56,297,56);line(340,56,564,56);/*画主体框架的边直线*//*arc(intx,inty,intstangle,intendangle,intradius)*/arc(82,62,90,180,12);arc(558,62,0,90,12);setlinestyle(0,0,3);arc(82,418,180,279,12);setlinestyle(0,0,3);arc(558,418,270,360,12);/*画主体框架的边角弧线*/setcolor(15);outtextxy(300,53,"CLOCK");/*显示标题*/setcolor(7);rectangle(342,72,560,360);/*画一个矩形,作为时钟的框架*/setwritemode(0);/*规定画线的方式。
mode=0,则表示画线时将所画位置的原来信息覆盖*/setcolor(15);outtextxy(433,75,"CLOCK");/*时钟的标题*/setcolor(7);line(392,310,510,310);line(392,330,510,330);arc(392,320,90,270,10);arc(510,320,270,90,10);/*绘制电子动画时钟下的数字时钟的边框架*//*绘制数字时钟的时分秒的分隔符*/setcolor(5);for(i=431;i<=470;i+=39)for(j=317;j<=324;j+=7){setlinestyle(0,0,3);circle(i,j,1);/*以(i,y)为圆心,1为半径画圆*/}setcolor(15);line(424,315,424,325);/*在运行电子时钟前先画一个光标*//*绘制表示小时的圆点*/for(i=0,m=0,h=0;i<=11;i++,h++){x=100*sin(
2023/8/25 8:11:27 142KB c语言实现电子时钟 课程设计
1
NULL博文链接:https://carywei.iteye.com/blog/700128
2023/8/1 19:10:33 521KB 源码 工具
1
HandDrawnShaderPack1.2手绘效果的着色器插件Hand-DrawnShaderPack1.2
2023/7/30 17:22:14 104.64MB shader
1
DDraw实现射击游戏阐发文档要点一:画图自动切割IDirectDrawSurface7::BltFast()方式中不自动切割成果,即当画图元素逾越窗口之外时不会自动切割,DDraw遴选自动漠视不画,组成一旦逾越窗口,画图元素会忽然磨灭。
处置这一下场的方式是手动切割,代码如下://自动切割 RECTscRect; //寄存之后窗口大小地域 ZeroMemory(&scRect,sizeof(scRect)); GetWindowRect(GetActiveWindow(),&scRect); //提防图片左上角逾越窗口左上角 if(xscRect.right?scRect.right:x; y=y>scRect.bottom?scRect.bottom:y; m_rect.right=x+m_rect.right-m_rect.left>scRect.right?scRect.right-x+m_rect.left:m_rect.right; m_rect.bottom=y+m_rect.bottom-m_rect.top>scRect.bottom?scRect.bottom-y+m_rect.top:m_rect.bottom;惟独将上述代码加在CGraphic::BltBBuffer()中的m_bRect=m_rect;前就可。
要点二:配景的滚轴实现 画配景能够分为如下三种情景: 情景一:配景图片与窗口等高 情景二:配景图片高度小于窗口高度 情景三:配景图片高度大于窗口高度上述教学图与代码相对于应地看,有助于约莫知道。
另外,要点一实现之后,由于已经能够自动切割,画配景能够用另外方式。
要点三:精灵图的实普通游戏中,如RPG游戏中的人物图、射击类游戏的飞机、爆炸等,叫做精灵图。
精灵图实际上是将齐全帧的图片放在一个文件中,游戏时靠一个RECT来抑制画图像文件中的哪一部份,进而抑制游戏展现哪一帧图,惟独抑制好RECT的位置就可。
如下图:抑制RECT的四个角的坐标的挪动,有如下代码:if(m_timeEnd–m_timeStart>100) //惟独到了100ms之后才画图 {m_ImageID++; if(m_ImageID-m_beginID>=num) { m_ImageID=m_beginID; //末了一帧的下一帧是第一帧 } m_timeStart=timeGetTime(); } intid=m_ImageID++; SetRect(&m_rect,41*id,0,41*(id+1),41); //飞机精灵图大小是41×41 m_pGraph->BltBBuffer(m_pImageBuffer,true,m_Pos.x,m_Pos.y,m_rect);如许就实现为了精敏捷画的下场。
要点四:拿STL举行枪弹的实现枪弹的实现能够使用STL中的vector,当按下开战键时收回一颗枪弹,就往vector中削减一个结点;
当枪弹飞出窗口或者击中敌机时,再将结点从vector中删除了。
每一帧游戏画面中枪弹翱翔时惟独将vector中的齐全枪弹举行处置、绘画就可。
参考代码如下:1.削减枪弹if(g_ctrlDown) //当ctrl键按下时开炮! { m_BulletEnd=m_Gtime->GetTime(); if((m_BulletEnd-m_BulletStart)*1000>120) //假如络续按着开战键不放,这里抑制不会收回太多枪弹 { m_BulletStart=m_BulletEnd; MBULLETtmpBullet; tmpBullet.pos.x=m_SPos.x-1; //记实开战时的枪弹位置 tmpBullet.pos.y=m_SPos.y-26; tmpBullet.speed=5; //该枪弹的翱翔速率 m_BulletList.push_back(tmpBullet); //将枪弹削减到vector中 } } 2.删除了枪弹vector::iteratoritei; //vector迭代器 for(itei=m_BulletList.begin();itei!=m_BulletList.end();itei++) //遍历齐全枪弹{m_BulletList.erase(itei); //删除了这个枪弹itei=m_BulletList.begin(); //删除了一个结点后,为防止侵蚀下次就重新查验if(m_BulletList.empty()) break; //若删除了结点后枪弹vector已经空则跳出轮回} 3.枪弹遍历处置vector::iteratoritei; //vector迭代器 for(itei=m_BulletList.begin();itei!=m_BulletList.end();itei++) //遍历齐全枪弹{itei->pos.y-=itei->speed; //枪弹翱翔}要点五:碰撞检测使用WindowsAPI函数RectInRegion:vector::iteratoritei; //vector迭代器for(itei=m_EnimyList.begin();itei!=m_EnimyList.end();itei++) //遍历齐全敌机{HRGNhrgn=::CreateRectRgn(m_player->pos.x,m_player->pos.y,m_player->pos.x+41,m_player->pos.y+41); //患上到飞机Region,图宽41高41 SetRect(&m_rect,itej->getPosition().x,itej->getPosition().y,itej->getPosition().x+50,itej->getPosition().y+50) //患上到敌机rect,敌机宽50高50 if(RectInRegion(hrgn,&m_rect)) //两机相撞 { ……………………. //碰撞之后的种种处置 }}让碰撞愈加准确:使用WindowsAPI函数PtInRegion()以及CreatePolygonRgn(),选取配角飞机的三个关键点的坐标放在POINT数组中,并将其作为参数代入CreatePolygonRgn()中天生HRGN,在枪弹与配角飞机做碰撞检测时惟独分辨枪弹的中间点能否在这个Region中就可(PtInRegion())。
留意:CreateRectRgn()与CreatePolygonRgn()等建树Region的函数会占用体系资源,由于游戏的主渲染函数Render()是络续实施的,如许会组成资源糜掷,于是在用完之后未必要释放:DeleteObject(region)要点六:敌机直线翱翔末了想这个下场的时候,感应很好实现,脑子里马上想到以及了。
其实如许实现有下场,当尽头以及尽头的连线斜率不是1或者-1时就会涌现意想不到的责任了,飞机并无直接飞向尽头,而因此斜率相对于值为1的路途飞已经往,再水平或者垂直飞向尽头。
处置这个下场有多少个方式,其中有一个方式是行使盘算机图形学上的Bresenhem直线算法。
该算法用于盘算机画平面上的直线,算法如下:|m|abs(deltaY))//轨迹斜率0)//1 { if(m_bFirstCalculate) { m_Delta=2*abs(deltaX)-abs(deltaY);//d0=2×dx-dy m_bFirstCalculate=false; } //依据轨迹斜率分辨能否要挪动X坐标 if(m_Delta>0)//m_iTempo)break;}//endofwhile(*pStr)
2023/5/1 0:27:02 2.18MB DDraw
1
Microsoft'sWindowsPresentationFoundation(WPF)providesyouwithadevelopmentframeworkforbuildinghigh-qualityuserexperiencesfortheWindowsoperatingsystem.ItblendstogetherrichcontentfromawiderangeofsourcesandallowsyouunparalleledaccesstotheprocessingpowerofyourWindowscomputer.ProWPF4.5inC#providesathorough,authoritativeguidetohowWPFreallyworks.Packedwithno-nonsenseexamplesandpracticaladviceyou'lllearneverythingyouneedtoknowinordertouseWPFinaprofessionalsetting.Thebookbeginsbybuildingafirmfoundationofelementaryconcepts,usingyourexistingC#skillsasaframeofreference,beforemovingontodiscussadvancedconceptsanddemonstratetheminahands-onwaythatemphasizesthetimeandeffortsavingsthatcanbegained.Whatyou’lllearn•UnderstandthefundamentalsofWPFprogra妹妹ingfromXAMLtocontrolsanddataflow.•Developrealisticapplicationscenariostoseenavigation,localizationanddeploymentinaction.•ExploretheadvanceduserinterfacecontrolsthatWPFprovides.•LearntomanagedocumentsfromwithinWPF:Textlayout,printing,anddocumentpackagingareallcovered.•UsegraphicsandmultimediatoaddpunchtoyourapplicationsWhothisbookisforThisbookisdesignedfordevelopersencounteringWPFforthefirsttimeintheirprofessionallives.AworkingknowledgeofC#andthebasicarchitectureof.NETishelpfultofollowtheexampleseasily,butallconceptswillbeexplainedfromthegroundup.TableofContents01.IntroducingWPF02.XAML03.Layout04.DependencyProperties05.RoutedEvents06.Controls07.TheApplication08.ElementBinding09.Co妹妹ands10.Resources11.StylesandBehaviors12.Shapes,Brushes,andTransforms13.GeometriesandDrawings14.EffectsandVisuals15.AnimationBasics16.AdvancedAnimation17.ControlTemplates18.CustomElements19.DataBinding20.Formatting21.BoundData22.DataViews23.Lists,Tre
2017/2/5 16:11:24 50.97MB WPF C# 4.5 MacDonald
1
共 14 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡