2在BeginPaint和EndPaint之间调用所有的绘制
计算机图形学实验指导书(vc++版)
实验指导书刘文涛2013目录第一章图形学实验环境和要求 (4)1.1 VC++实验环境 (4)1.1.1 基本环境 (4)1.1.1 开发图形程序的一般流程 (7)1.1.3 基本绘图函数介绍 (11)1.2 OpenGL (22)1.2.1 OpenGL介绍 (22)1.2.2 OpenGL开发环境 (24)1.2.3 OpenGL函数 (24)1.2.4 回调函数 (25)1.2.4 一个典型OpenGL例程 (26)1.3 实验要求 (29)1.3.1 实验内容 (29)1.3.2 实验方法 (29)1.3.3 实验效果 (30)第二章直线生成算法 (30)2.1 实验原理 (30)2.1.1 DDA算法 (30)2.1.2 Bresenham算法 (30)2.2 实验内容 (30)2.3 参考示例程序 (30)第三章圆和椭圆生成算法 (32)3.1 实验原理 (32)3.2 实验内容 (32)3.3 参考示例程序1 (32)3.4 参考示例程序2 (33)第四章裁剪算法 (35)4.1 实验原理 (35)4.2 实验内容 (35)4.3 示例程序 (35)4.3.1 参考例子1 (35)4.3.2参考例子2 (38)第五章二维变换 (40)5.1 实验原理 (40)5.2 实验内容 (40)5.3 示例程序 (40)5.3.1参考例子1 (40)第六章三维变换 (44)6.1 实验原理: (44)6.2 实验内容 (45)6.3示例程序 (45)第七章填充算法 (47)7.1 实验原理: (47)7.2 实验内容 (47)7.3示例程序 (47)第八章曲线曲面 (50)8.1 实验原理 (50)8.2 实验内容 (50)8.3示例程序 (51)8.3.1 参考例子(1) (51)8.3.2 参考例子(2) (52)8.3.3 参考例子(3) (54)8.3.4 参考例子(4) (56)第九章真实感图形绘制 (59)9.1 实验原理 (59)9.2 实验内容 (59)9.3示例程序 (59)9.3.1参考例子(1) (59)9.3.2参考例子(2) (61)9.3.3参考例子(3) (63)第十章动画 (66)10.1 实验原理 (66)10.2 实验内容 (66)10.3示例程序 (66)10.3.1 参考例子 (66)参考文献: (72)第一章图形学实验基础1.1 VC++实验环境1.1.1 基本环境Microsoft Visual C++ 6.0 是微软推出的功能强大的可视化C/C++语言编译器,运行在Windows 9x/2000/NT等平台上,可以建立32位应用程序。
关于WM ERASEBKGND和WM AINT的深刻理解
一直以来,对于WM_PAINT和WM_ERASEBKGND消息不是很清楚,从书上和网上找了很多资料,大体上有以下几点说法:1>WM_PAINT先产生,WM_ERASEBKGND后产生2.WM_PAINT产生后,在调用BeginPaint时hdc = BeginPaint(hWnd, &ps);如果ps.fErase为true,则BeginPaint会产生WM_ERASEBKGND消息3.BeginPaint函数用来擦除窗口背景4.WM_ERASEBKGND用来绘制背景经过调试、分析,发现上面的说法并不正确。
以下是一些测试代码,代码后面附上一些分析。
最后总结出几点,可以解释程序中出现的所有关于窗口重绘的问题。
如有不正确的地方,大家可以指正。
为了说明问题,在此不说WM_NCPAINT消息(非客户区消息),只说WM_ERASEBKGND消息和客户区的WM_PAINT消息//此段代码摘自vc6应用程序向导自动生成的代码,并添加了一些测试代码LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;TCHAR szHello[MAX_LOADSTRING];LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);switch (message){case WM_COMMAND:wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);// Parse the menu selections:switch (wmId){case IDM_ABOUT:DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}break;case WM_ERASEBKGND: //如果处理了这个消息,则默认消息处理函数不会调用,背景就不会绘制{static int iCount=0;char ch[MAX_PATH];sprintf(ch,"%d ---------WM_ERASEBKGND\n",iCount);//这个函数需要包含#include<stdio.h>OutputDebugString(ch); //调试时便于观察iCount ;break;}case WM_PAINT:{OutputDebugString(" -------------WM_PAINT\n");hdc = BeginPaint(hWnd, &ps); //使无效区域变得有效,并填充ps结构// TODO: Add any drawing code here...//绘制一个蓝色椭圆,ps.rcPaint保存了客户区矩形HBRUSH hbrush=::CreateSolidBrush(RGB(0,0,255));::SelectObject(hdc,hbrush);::Ellipse(hdc,ps.rcPaint.left,ps.rcPaint.top,ps.rcPaint.right,ps.r cPaint.bottom);::DeleteObject(hbrush);EndPaint(hWnd, &ps);break;}case WM_LBUTTONDOWN: //调用DefWindowProc擦除客户区背景{HDC hdc;hdc=::GetDC(hWnd);WPARAM w=(WPARAM)hdc;LPARAM l=0;DefWindowProc(hWnd, WM_ERASEBKGND, w, l);}break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}先说一下程序运行时发现的一些现象:1.上面的代码:如果添加了WM_ERASEBKGND消息,里面什么也不做,如下case WM_ERASEBKGND:break;则当程序运行时,如果收到WM_ERASEBKGND消息,则这个switch-case结构中就不会执行默认消息处理函数DefWindowProc,运行时发现,窗口的背景就没有了,即背景为空。
Delphi如何使用基本的绘图函数绘制统计图
一个windows自带的画图工具是无论如何也不能满足我们的画图需要的,很多效果都需要我们在另外的工具中来实现。
这些高级的功能是如何实现的呢,如何操纵一些基本的属性和函数,让它们最终能作出我们想要的效果呢?这里我们以绘制统计图来说明这些问题。
解决思路――这里,我们暂且先撇开具体的问题,综合地一下讨论画图的问题。
画图工具是基本元素的具体实现,对于我们初学者来说,还是有很好的参考价值的,在delphi 5中有一个自带的工程例子“……Borland\Delphi5\Demos\Doc\Graphex”,这个例子可以实现一些基本的绘图功能。
对这个例子多加修改,一定会有所收获的。
这里就不列出它的详细代码了,有心的读者可以自己找到这个例子。
我这里只是想综合地讨论这方面的问题。
使用DELPHI编写绘图软件的灵魂就在于操作画布,画笔和刷子,尽可能地挖掘它们的属性和相关参数的设置。
(一)画布画布,画笔和刷子之间的关系很明了.其实,画笔和刷子都是画布的一个属性.而画布也只是TForm,TImage,TShape等组件对象的一个属性,专门负责与图象相关的信息打交道.它的主要作用可以概括如下几点:1.指定使用画笔,刷子和字体的使用类型;2.绘制和填充指定形状的线或图形;3.修饰和改变图象;画布的主要属性有:Brush--指定填充图形和背景的样式CanvasOrientation--指定画布的定位类型,有coLeftToRight, coRightToLeft两个属性;ClipRect--指定剪切矩形的边界;CopyMode--指定图形图象的复制模式;Font--指定画布上使用的字体;Handle--为画布指定窗口GDI对象的设备描述表;LockCount--指定画布被别的线程锁定的次数;Pen--指定画布上使用的画笔,具体见下面描述;PenPos--指定画笔当前的位置;Pixels--指定当前剪切矩形的象素颜色;TextFlags--指定字体在画布上的显示方式,有ETO_CLIPPED,ETO_OPAQUE,ETO_RTLREADING,ETO_GL YPH_INDEX,ETO_IGNORELANGUAGE,ETO_NUMERICSLOCALETO_NUMERIC SLATIN等值可选;画布相关的API函数及其注释如下:Arc--按指定方式画一条弧;BrushCopy--把位图复制到指定的画布的矩形中,用画布刷子颜色替换位图的颜色;Chord--按指定方式画弦;CopyRect--从一个矩形区域复制部分图象到另一个矩形区域;Draw--用指定参数在指定位置画图;DrawFocusRect--按指定焦点风格,通过异或操作来绘制一焦点矩形;Ellipse--按指定参数画一椭圆;FillRect--按指定的刷子填充一矩形;FloodFill--使用当前选定的刷子填充指定设备描述表中的一块区域;FrameRect--使用指定的方式画一矩形的边框;LineTo--使用当前画笔从当前位置到指定点画一条直线;Lock--防止其它线程在画布上绘图;MoveTo--指定一新的当前画笔位置;Pie--按指定方式画饼状图;PolyBezier--按指定方式画多条贝塞尔线;PolyBezierTo--按指定方式画多条贝塞尔线并更新当前的画笔位置值; Polygon--绘制一个由多个顶点的任意序列组成的多边形;Polyline--使用当前画笔画一系列的多边形;Rectangle--绘制矩形;RoundRect--绘制圆角矩形;StretchDraw--在指定的矩形区域通过指定的绘图参数来绘制图形; TextExtent--返回使用当前字体设置的字符的象素宽度和高度等参数; TextHeight--返回使用当前字体设置的字符的象素高度;TextOut--在指定位置绘制文本,并更新画笔的当前位置;TextRect--在一剪切矩形区域中绘制文本;TextWidth--返回使用当前字体设置的字符的象素宽度;TryLock--对当前没加锁的画布进行加锁;Unlock--对当前加锁的画布进行解锁;例如以下是两个小例子:procedure TForm1.Button2Click(Sender: TObject);varARect: TRect;begin //实现了剪切效果;with Image1.Canvas dobeginCopyMode := cmWhiteness; //设置复制模式;ARect := Rect(0, 0, Image1.Width, Image1.Height);CopyRect(ARect, Image1.Canvas, ARect);CopyMode := cmSrcCopy; //恢复复制模式;end;end;procedure TForm1.Button3Click(Sender: TObject);varW: Word;begin //在窗口中画一条彩线;for W := 10 to 200 doCanvas.Pixels[W, 10] :=RGB(random(255),random(255),random(255));; end;灵活使用这些函数及其内部参数会让我们得到意想不到的效果;(二) 画笔画笔是一个GDI对象,定义了绘制直线或轮廓形状的方法.画笔内部共有五种属性:颜色,句柄,模式,风格和宽度.Color--决定指定直线或轮廓形状的RGB颜色。
cass命令
CASS命令新建图形文件...new打开已有图形...open图形存盘...qsave图形改名存盘...saveas电子传递...etransmit网上发布...publishtoweb输出...export图形核查...audit修复破坏的图形...recover清理图形......purge编组....managroup页面设置...pagesetup打印机管理器...plottermanager打印样式管理器...stylesmanager打印预览...preview打印...plot宗地图表批量打印.....zdtbplot图形属性....dwgpropsCASS6.1参数配置.....setparaCASS6.1系统配置文件.....setsimboldef AutoCAD系统配置.....preferences操作回退......U取消回退......redo物体捕捉....OSNAP捕捉圆心点......CEN端点......endp插入点......ins交点......int中间点 (i)最近点......nea节点......nod垂直点......per四分圆点......qua切点......tan取消捕捉............non前方交会......qfjh边长交会......intersu方向交会......angdist支距量算......zhiju画直线........line徒手画........sketch画弧..........arc画圆..........circle画椭圆........ellipse;画多边形......polygon画点..........point画曲线........quxian画复合线......pline多功能复合线..Pdjf3画圆环........donut制作图块......wblock插入图块......ddinsert批量插入图块..plinsert插入光栅图象..image光栅图象纠正..rectify光栅图象赋予..imageattach光栅图象剪裁..imageclip光栅图象调整..imageadjust光栅图象质量..imagequality光栅图象透明度...transparency 光栅图象框架....imageframe写文字...dtext编辑文字...ddedit批量写文字..mtext沿线条注记...linetext插入文本文件..rtext炸碎文字......TXTEXP MTEXTTEXT...MTEXTTOTEXT文字消隐......textmask取消文字消隐..textunmask查找替换文字..find定义字型......style变换字体... fonts1查询列图形表..list查询工作状态..status编缉文本文件..notepad对象特性管理..properties图元编辑......ddmodify图层设定yer目标实体层ymch当前层ycur仅留实体所在层yiso冻结实体所在层yfrz关闭实体所在层yoff锁定实体所在层ylck解锁实体所在层yulk转移实体所在层ymrg删除实体所在层ydel打开所有图层yon解冻所有图层ythw图层叠放顺序.....draworder删除多重目标选择..erase删除单个目标选择..erase;_si; 删除上个选定目标...erase;_l; 删除实体所在图层...scsd删除实体所在编码...scdaima延伸 ....extend修剪 ....trim对齐 ....align移动 ....move旋转 ....rotate比例缩放....scale伸展 ....stretch阵列 ....array复制 ....copy镜像 ....mirror圆角 ....nfillet偏移拷贝....offset局部偏移....partoffset批量选目标..mssx修改性质....change修改颜色....scsc炸开实体....explode重画屏幕....redraw显示缩放....zoom鹰眼....dsviewer视口........+vports 1命名视图....view平面视图....plan文本窗口....textscr工具栏......toolbar查看实体编码...GETP加入实体编码...PUTP生成用户编码...changecode编辑实体地物编码...modifycode 生成交换文件...INMAP读入交换文件...OUTMAP屏幕菜单功能切换...PP导线记录....ADJRECORD导线平差....ADJUST读取全站仪数据...totalstation微机-E500....stran微机-南方NTS-320...r_nts320;微机-拓普康GTS-211...r_gts211;微机-拓普康GTS-602...r_gts602;微机-索佳SET系列.....r_set500;微机-宾得PCS-300 CSV.R_PCS300;南方RTK格式..NGK300;南方GPS后处理格式...gpshcl;南方S-CASS GRP格式...s_cass;南方S-CASS HTT格式...readhtt;索佳SET2C LST格式....SET2C;索佳SET2C DAT格式....SET2CDAT;索佳POWERSET坐标格式.SET2010;索佳POWERSET SDR2X格式..POWERSDR;杰科全站数据格式........JIEKE测图精灵格式转换读入...readspda转出...writespda原始测量数据录入需要控制点坐标文件...inputsource;1;不需控制点坐标文件...inputsource;2; 原始数据格式转换需要控制点坐标文件...data;1;不需控制点坐标文件...data;2;批量修改坐标数据.....CHDATA数据合并.......SJHB数据分幅.......SJFF坐标显示与打印.......SHOWGPS设置..............jihuo实时GPS跟踪..........gpsin定显示区..........HTCS改变当前图形比例尺...gbblc1展高程点.........zhkzd;1;高程点建模设置...gcddtm;高程点过滤.......gcdguolv水上高程点一般注记法.......zhkzd;2旋转注记.........xiewater海图注记法.......zhkzd;3;打散高程注记.....explodegcd合成打散的高程注记....resumegcd展野外测点点号.....zhdm;2;展野外测点代码.....zhdm;3;展野外测点点位.....zhdm;4;切换展点注记.......changezdh;展控制点.......drawkzd;编码引导....bmyd;简码识别....bmsb;图幅网格(指定长宽).....tfwg;加方格网...............hfgw;方格注记...............FGZJ;建立格网...............fenfu;批量输出...............fenfuout;普通分幅...............plxietf;700米公路分幅..........fenfu700;标准图幅 (50X50cm).....tfzs;2;标准图幅 (50X40cm).....tfzs;1;任意图幅...............tfzs;3;小比例尺图幅...........XBLTF;倾斜图幅...............tfzs;4;工程0 号图框...........HZTK;0;工程1 号图框...........hztk;1;工程2 号图框...........hztk;2;工程3 号图框.........hztk;3;图纸空间图幅youtprint;1; youtprint;2;任意图幅youtprint;3; 图形梯形纠正......ROTA地籍参数设置.....CADAPARA绘制权属线.......JZLINE权属合并.........QSHB由图形生成.......HANDQS由复合线生成.....PLINEQS由界址线生成.....JIEZHIQS;权属信息文件合并......UNITEQS;依权属文件绘权属图....hqst;修改界址点号..........JZNUMBER重排界址点号..........requeuejzp设置最大界址点号......setmaxjzd修改界址点号前缀......setprefix删除无用界址点........delunusejzd注记界址点点名注记..............zjzdm删除..............delzjzdm界址点圆圈修饰剪切.........xiushijzd;1;消隐.........xiushijzd;2;调整宗地内界址点顺序......arrangejzd界址点生成数据文件........jzptofile;查找宗地..............zhizong查找界址点............zhijzp宗地合并..............joinjzx宗地分割..............splitjzx;宗地重构..............regenzd;修改建筑物属性设置结构和层数.............jzwxx注记建筑物边长.............bianchang计算宗地内建筑面积.............jmdmj注记建筑占地面积.............jsmj;4建筑物注记重构.............regenbuildtext修改宗地属性.............setjiezhi修改界址线属性.............jzxinfo修改界址点属性.............jzdinfo输出宗地属性.............zdinfomdb绘制地籍表格界址点成果表.............hjzdb界址点成果表(excel).............jzdcgb_excel界址点坐标表.............jzdzb以街坊为单位界址点坐标表.............jzdtable以街道为单位宗地面积汇总表.............huizong城镇土地分类面积统计表.............chenzhen街道面积统计表.............TONGJI;1街坊面积统计表.............TONGJI;2面积分类统计表.............FENLEI;1街道面积分类统计表.............FENLEI;2街坊面积分类统计表.............FENLEI;3绘制宗地图框32开单块宗地.............hzdtk;1批量处理.............pltf;116开单块宗地.............hzdtk;4批量处理.............pltf;4A4竖单块宗地.............hzdtk;2批量处理.............pltf;2A4横单块宗地.............hzdtk;5批量处理.............pltf;5A3竖单块宗地.............hzdtk;3批量处理.............pltf;3A3横单块宗地.............hzdtk;6批量处理.............pltf;6自定义尺寸单块宗地.............hzdtk;0批量处理.............pltf;0土地详查行政区村界绘制.............drawxzq;1村界内部点.............xzqinsert;1乡镇界绘制.............drawxzq;2乡镇界内部点.............xzqinsert;2县区界绘制.............drawxzq;3县区界内部点.............xzqinsert;3权属区绘制.............qsline内部点生成.............qsinside图斑绘图生成.............dljline内部点生成.............dljinside统计面积.............dljarea线状地类.............linedlj零星地类.............pointdlj地类要素属性修改.............dljinfo线状地类扩面.............fromlinedlj检查线状地类.............checklinedlj分级面积控制.............areacontrol统计土地利用面积.............statdlj等高线(&S)建立DTM.............LINKSJX图面DTM完善.............APPENDSJX删除三角形_erase过滤三角形.............filter_sjx增加三角形.............jsjw三角形内插点.............insert_sjx删三角形顶点.............erase_sjx重组三角形.............re_sjx加入地性线.............valley删三角网.............delsjx三角网存取写入文件.............writesjw读出文件.............readsjw修改结果存盘.............ssjw绘制等高线.............dzx绘制等深线.............dsx等高线内插.............CONTOUR等值线过滤.............dgxguolv删全部等高线.............deldgx查询指定点高程.............height等高线修剪批量修剪等高线.............pltrdgx切除指定二线间等高线.............trtwoline切除指定区域内等高线.............tregion取消等高线消隐.............(arxload "wipeout");erasewipeout 等高线注记单个高程注记.............GCZJ沿直线高程注记.............GCSPZJ;1单个示坡线.............spzj沿直线示坡线.............GCSPZJ;2等高线局部替换已有线.............dgxsegment新画线.............dgxsegment1复合线滤波.............jjjd三维模型绘制三维模型.............vshow低级着色方式.............SHADE;高级着色方式.............RENDER;返回平面视图.............VEND;坡度分析颜色配置.............slopeconfig颜色填充.............slopecolor低级着色方式.............SHADE;高级着色方式.............RENDER;地物编辑(&A)重新生成.............recass;线型换向.............huan修改墙宽.............wallwidth修改坎高.............askan电力电信 >.............$i=dldxx $i=*--植被填充稻田 .............tian;211100;211102旱地 .............tian;211200;211202菜地 .............tian;211400;211402果园 .............tian;212100;212102桑园 .............tian;212200;212202茶园 .............tian;212300;212302橡胶园 .............tian;212400;212402其他园林.............tian;212500;212502有林地 .............tian;213100;213102灌木林 .............tian;213201;213204疏林 .............tian;213300;213302未成林 .............tian;213400;0苗圃 .............tian;213500;213502迹地 .............tian;213600;0竹林 .............tian;213901;213903天然草地.............tian;214100;214102改良草地.............tian;214200;0人工草地.............tian;214300;214302芦苇地 .............tian;215100;215102半荒植物地.............tian;215200;215202植物稀少地.............tian;215300;215302花圃 .............tian;215400;215402水生经济作物地.............tian;211300;211302土质填充肥气池.............tian;153901;0沙地 .............tian;206100;0石块地.............tian;206300;206302盐碱地.............tian;206400;206402小草丘地.............tian;206502;206504龟裂地.............tian;206600;206602能通行沼泽地.............tian;206701;0不能通行沼泽地.............tian;206702;0小比例房屋填充.............tian;141103;0图案填充.............sotian--符号等分内插.............neicha批量缩放文字 .............ctext符号 .............cblock圆圈 ircle复合线处理批量拟合复合线.............plind批量闭合复合线.............plbihe批量修改复合线高.............changeheight批量改变复合线宽.............linewidth--线型规范化.............pludd--复合线编辑............._pedit复合线上加点.............polyins复合线上删点.............erasevertex移动复合线顶点.............movevertex--相邻的复合线连接.............polyjoin;分离的复合线连接.............sepapolyjoin;重量线轻量线.............tolwpoly;--直线复合线.............linetopline;圆弧复合线.............arctopline;SPLINE复合线.............splinetopline;椭圆复合线.............ellipsetopline;图形接边.............mapjoin--图形属性转换图层图层单个处理.............cetoce;1批量处理.............cetoce;2图层编码单个处理.............cetoce;3批量处理.............cetoce;4编码编码单个处理.............bmtobm;1批量处理.............bmtobm;2编码图层单个处理.............bmtobm;3批量处理.............bmtobm;4编码颜色单个处理.............bmtobm;5批量处理.............bmtobm;6编码线形单个处理.............bmtobm;7批量处理.............bmtobm;8编码图块单个处理.............bmtobm;9批量处理.............bmtobm;10图块图块单个处理totk;1批量处理totk;2图块图层单个处理totk;3批量处理totk;4图块编码单个处理totk;5批量处理totk;6线形线形单个处理.............xxtoxx;1批量处理.............xxtoxx;2线形图层单个处理.............xxtoxx;3批量处理.............xxtoxx;4线形编码单个处理.............xxtoxx;5批量处理.............xxtoxx;6字型字型单个处理.............zxtozx;1批量处理.............zxtozx;2字型图层单个处理.............zxtozx;3批量处理.............zxtozx;4--坐标转换.............transform测站改正.............modizhan二维图形.............toplane房檐改正.............changeeaves直角纠正整体纠正.............rightangle单角纠正.............singleangle--批量删剪窗口删剪.............cksj依指定多边形删剪.............plsj批量剪切窗口剪切.............ckjq依指定多边形剪切.............pljq局部存盘窗口内的图形存盘.............savet;2多边形内图形存盘.............savet;1--打散独立图块.............explodeblock打散复杂线型.............explodeline检查入库(&G)地物属性结构设置.............attsetup编辑实体附加属性.............modiappinfo--图形实体检查.............checkdwg--过滤无属性实体.............guolv删除伪结点.............check_node删除复合线多余点.............jjjd;2删除重复实体.............check_repeat--等高线穿越地物检查.............checkdgxcross等高线高程注记检查.............checkdgxtext等高线拉线高程检查.............checkfromline等高线相交检查.............checkdgxinter--坐标文件检查.............check_datfile点位误差检查.............checkcoorderror边长误差检查.............checksideerror--输出ARC/INFO SHP格式.............casstoshp输出MAPINFO MIF/MID格式.............mifmid输出国家空间矢量格式.............vctout工程应用(&C)查询指定点坐标.............CXZB查询两点距离及方位.............distuser查询线长.............getlength查询实体面积.............areauser计算表面积根据坐标文件.............surfacearea;1根据图上高程点.............surfacearea;2 --生成里程文件由纵断面线生成新建.............hdmcreate添加.............hdmadd变长.............hdmlength剪切.............hdmtrim设计.............hdmdesign生成.............fromzdline由复合线生成普通断面.............plptdm隧道断面.............plsddm由等高线生成.............dmfromdgx;1由三角网生成.............dmfromdgx;2由坐标文件生成.............getlicheng--DTM法土方计算根据坐标文件.............DTMTF;1根据图上高程点.............DTMTF;2根据图上三角网.............tstf;--计算两期间土方.............twosjw断面法土方计算道路设计参数文件.............roadpara;--道路断面.............transect;1;场地断面.............transect;2;任意断面.............transect;3;--图上添加断面线.............appenddmx--修改设计参数.............designpara编辑断面线.............editdmx修改断面里程.............chglicheng图面土方计算.............mapretf--二断面线间土方计算.............betweendmx方格网法土方计算.............fgwtf;等高线法土方计算.............dgxtf;区域土方量平衡根据坐标文件.............tfbalance;1根据图上高程点.............tfbalance;2--绘断面图根据已知坐标.............dmt_dat根据里程文件.............dmt_licheng根据等高线.............dmt_dgx;1根据三角网.............dmt_dgx;2--绘设计线.............sjline计算断面面积.............dmarea查询断面点.............dmpoint--公路曲线设计单个交点处理.............pointcurve;--要素文件录入.............putroadata;要素文件处理.............roadcurve;--计算指定范围的面积.............jsmj统计指定区域的面积.............tjmj指定点所围成的面积.............parea--线条长度调整.............linefy面积调整调整一点.............movept调整一边.............mjfy在一边调整一点.............ptatside--指定点生成数据文件.............shzht高程点生成数据文件有编码高程点.............LINKSJX1无编码高程点.............gcdtodat控制点生成数据文件.............kzdtodat等高线生成数据文件.............datincontour图幅管理(&M)图幅信息操作.............MAPMANAGE图幅显示.............SELMAP图幅列表.............MAPBAR--绘超链接索引图.............hypertfgl移动............._move镜像............._mirror旋转............._rotate缩放............._scale拉伸............._stretch基点.............base复制.............copy参照.............reference放弃.............._u特性............._properties转至 ................_gotourl退出................_exit剪切............._cutclip复制............._copyclip带基点复制............._copybase粘贴............._pasteclip粘贴为块............._pasteblock粘贴到原坐标............._pasteorig放弃(&U)............._u重做..............._redo平移................pan缩放.............._zoom--快速选择................_qselect查找................_find选项................_options剪切............._cutclip复制............._copyclip带基点复制............._copybase粘贴............._pasteclip粘贴为块............._pasteblock粘贴到原坐标............._pasteorig--删除............._erase移动..................move复制选择..............copy缩放................._scale旋转................._rotate全部不选(&A).............(ai_deselect)--快速选择(&Q)................_qselect查找(&F)................_find特性(&S)............._properties平移.......................pan缩放......................_zoom标注对象的上下文菜单标注文字位置在尺寸线上............._ai_dim_textabove置中............._ai_dim_textcenter默认位置............._ai_dim_texthome单独移动文字............._aidimtextmove _2与引线一起移动............._aidimtextmove _1 与尺寸线一起移动............_aidimtextmove _0精度0............._aidimprec _00.0............._aidimprec _10.00............._aidimprec _20.000............._aidimprec _30.0000............._aidimprec _40.00000............._aidimprec _50.000000............._aidimprec _6标注样式(&D)另存为新样式(&S)................_aidimstyle _S 标注样式 MRU1............._aidimstyle _1标注样式 MRU2............._aidimstyle _2标注样式 MRU3............._aidimstyle _3标注样式 MRU4............._aidimstyle _4标注样式 MRU5............._aidimstyle _5标注样式 MRU6............._aidimstyle _6其他......................_aidimstyle _O视口对象的上下文菜单视口剪裁(&V)............._vpclip显示视口对象是............._-vports _on _p;; 否............._-vports _off _p;;显示锁定是(&Y)............._-vports _lock _on _p否(&N)............._-vports _lock _off _p消隐出图(&H)是(&Y)............._-vports _hide _on _p否(&N)............._-vports _hide _off _p外部参照对象的上下文菜单外部参照剪裁(&I)............._xclip外部参照管理器(&N)................_xref多行文字对象的上下文菜单编辑多行文字(&I)................_mtedit文字对象的上下文菜单编辑文字(&I)................_ddedit图案填充对象的上下文菜单编辑图案填充................_hatchedit多段线对象的上下文菜单编辑多段线............._pedit样条曲线对象的上下文菜单编辑样条曲线............._splinedit多段线对象的上下文菜单编辑多段线............._pedit标注线性标注............_dimlinear对齐标注............._dimaligned坐标标注............._dimordinate--半径标注............._dimradius直径标注............._dimdiameter角度标注.............._dimangular--快速标注............._qdim基线标注............._dimbaseline连续标注............._dimcontinue快速引线............._qleader公差............._tolerance圆心标记............._dimcenter--编辑标注............._dimedit编辑标注文字............._dimtedit标注更新............._-dimstyle _apply 标注样式...............dimstyle绘图直线............._line构造线............._xline多线............._mline多段线............._pline正多边形............._polygon矩形............._rectang圆弧............._arc 圆............._circle样条曲线............._spline椭圆............_ellipse椭圆弧............_ellipse _a块创建块............._block 点.................point图案填充............._bhatch面域............._region多行文字............._mtext查询距离........................dist面积..............area面域/质量特性............._massprop列表......................_list点坐标 (i)插入插入块............._insert外部参照............._xref图像............._image输入............._importOLE 对象............._insertobj布局新建布局....................._layout _n 来自样板的布局............._layout _t页面设置............._pagesetup显示“视口”对话框............_vports修改删除............._erase复制对象........................copy)镜像.............................mirror) 偏移............._offset阵列............_array移动..............move旋转..............rotate缩放..............scale拉伸..............stretch拉长............._lengthen修剪............._trim延伸............._extend打断于点............._break \f \@打断............._break倒角............_chamfer圆角............._fillet分解............._explode修改_II显示顺序............._draworder--编辑图案填充............._hatchedit编辑多段线............._pedit编辑样条曲线............._splinedit编辑多线............._mledit--编辑属性............._eattedit块属性管理器............._BattMan同步属性............._AttSync属性提取............._EAttExt对象特性将对象的图层置为当前............_ai_molc图层yer 上一个图层............._LayerP对象捕捉临时追踪点............................tt 捕捉自..................from捕捉到端点................endp捕捉到中点 (i)捕捉到交点................int捕捉到外观交点............appint捕捉到延长线 (x)捕捉到圆心................cen捕捉到象限点..............qua捕捉到切点................tan捕捉到垂足................per捕捉到平行线..............par捕捉到插入点..............ins捕捉到节点................nod捕捉到最近点..............nea无捕捉....................non对象捕捉设置..............dsettings 2三维动态观察器三维平移..................3dpan三维缩放".................3dzoom三维动态观察...............3dorbit三维连续观察...............3dcorbit三维旋转...................3dswivel三维调整距离...............3ddistance三维调整剪裁平面...........3dclip前向剪裁开/关............._dview后向剪裁开/关............._dview着色二维线框...............shademode _2三维线框...............shademode _3消隐...................shademode _h平面着色...............shademode _f体着色.................shademode _g带边框平面着色.........hademode _l带边框体着色...........shademode _o参照编辑编辑块或外部参照............._refedit;向工作集添加对象..............refset _add从工作集删除对象..............refset _rem放弃对参照的修改..............refclose _disc 将修改保存到参照..............refclose _sav参照外部参照............_xref附着外部参照............._xattach外部参照剪裁............._xclip外部参照绑定............._xbind外部参照剪裁边框......xclipframe 1--图像.................image附着图像............imageattach图像剪裁.............imageclip图像调整............._imageadjust图像质量"............._imagequality图像透明............._transparency图像边框............._imageframe渲染消隐............._hide渲染............._render场景............._scene光源............._light材质............_rmat材质库............._matlib贴图............._setuv背景............._background雾化............._fog新建配景............._lsnew编辑配景............._lsedit配景库............._lslib--渲染系统配置............._rpref统计信息................._stats实体长方体............._box球体............._sphere圆柱体............._cylinder圆锥体............._cone楔体............._wedge圆环............._torus拉伸............._extrude旋转............._revolve剖切............._slice切割............._section干涉............._interfere设置图形............._soldraw设置视图"............._solview设置轮廓............._solprof实体编辑并集............._union差集............._subtract交集............._intersect拉伸面............._solidedit _face _extrude 移动面............._solidedit _face _move偏移面............._solidedit _face _offset 删除面............._solidedit _face _delete 旋转面............._solidedit _face _rotate 倾斜面............._solidedit _face _taper 复制面............._solidedit _face _copy着色面............._solidedit _face _color --复制边............._solidedit _edge _copy着色边............._solidedit _edge _color --压印............._solidedit _body _imprint 清除............._solidedit _body _clean分割............._solidedit _body _separate 抽壳............._solidedit _body _shell检查............._solidedit _body _check标准新建............._new打开............._open保存............._qsave打印............._plot打印预览............._preview查找和替换............._find剪切到剪贴板............._cutclip复制到剪贴板............._copyclip从剪贴板粘贴............._pasteclip特性匹配................_matchprop--放弃............._u重做............._redo--今日............._Today三维动态观察器.......3dorbit实时平移.............._pan实时缩放.............zoom标准配置标准............._Standards检查标准............._CheckStandards图层转换............._LayTrans曲面二维填充............._solid三维面............._3dface--长方体表面............._ai_box楔体表面............._ai_wedge圆锥面............._ai_cone球面............._ai_sphere上半球面............._ai_dome下半球面............._ai_dish圆环面............._ai_torus-- 边............_edge三维网格............._3dmesh旋转曲面............._revsurf平移曲面............._tabsurf直纹曲面............._rulesurf边界曲面............._edgesurf文字多行文字............._mtext单行文字............._dtext编辑文字............._ddedit查找和替换............._find文字样式................style缩放文字............._scaletext对正文字............._justifytext在空间之间转换距离...._spacetransUCSUCS............._ucs显示 UCS 对话框............._+ucsman 0上一个 UCS............._ucs _p--世界 UCS............._ucs _w对象 UCS............._ucs _ob面 UCS"............._ucs _fa视图 UCS............._ucs _v原点 UCS............._ucs _oZ 轴矢量 UCS............._ucs _zaxis 三点 UCS............._ucs _3X 轴旋转 UCS............._ucs _xY 轴旋转 UCS............._ucs _yZ 轴旋转 UCS............._ucs _z应用 UCS............._ucs _apply显示 UCS 对话框............._+ucsman 0移动 UCS 原点............._ucs _move视图命名视图", "ICON_16_DDVIEW", "ICON_16_DDVIEW")............._view俯视图", "ICON_16_VIETOP", "ICON_16_VIETOP")............._-view _top仰视图", "ICON_16_VIEBOT", "ICON_16_VIEBOT")............._-view _bottom左视图", "ICON_16_VIELEF", "ICON_16_VIELEF")............._-view _left右视图", "ICON_16_VIERIG", "ICON_16_VIERIG")............._-view _right主视图", "ICON_16_VIEFRO", "ICON_16_VIEFRO")............._-view _front后视图", "ICON_16_VIEBAC", "ICON_16_VIEBAC")............._-view _back西南等轴测视图", "ICON_16_VIESWI", "ICON_16_VIESWI")............._-view _swiso 东南等轴测视图", "ICON_16_VIESEI", "ICON_16_VIESEI")............._-view _seiso 东北等轴测视图", "ICON_16_VIENEI", "ICON_16_VIENEI")............._-view _neiso 西北等轴测视图", "ICON_16_VIENWI", "ICON_16_VIENWI")............._-view _nwiso 相机", "ICON_16_CAMERA", "ICON_16_CAMERA")............._camera视口显示“视口”对话框............._vports单个视口.......................-vports剪裁现有视口 ............._vpclipWEB后退..........................._hyperlinkBack前进..........................._hyperlinkFwd停止浏览......................._hyperlinkStop浏览 Web......................._browser缩放窗口缩放.........................zoom _w动态缩放.........................zoom _d比例缩放.........................zoom _s中心缩放.........................zoom _c放大.............................zoom 2x缩小.............................zoom .5x全部缩放.........................zoom _all范围缩放.........................zoom _e标准工具栏图层管理yer把对象的图层置为当前.............ai_molc线型管理.........................linetype 编组选择关.......................PICKSTYLE 0 编组选择开.......................PICKSTYLE 1 打开老图.............open图形存盘.............qsave重画屏幕.............redraw平移.................pan缩放.................zoom窗选.................zoom _w全图.................zoom _e前图.................zoom _p回退.................u取消回退.............redo对象特性.............properties设计中心.............adcenter删除.................erase移动.................move复制.................copy修剪............._trim延伸............._extendCASS实用工具栏查看实体编码.............getp加入实体编码.............putp重新生成.............recass批量选目标线型换向.............huan修改坎高.............askan查询坐标.............cxzb查询距离和方位角.............distuser注记文字.............wzzj多点房屋.............drawddf四点房屋.............fourpt依比例围墙...........drawwq陡坎.................drawdk自然斜坡等...........xp交互展点.............drawgcd图根点...............drawtgd电力线...............drawdlx道路.................drawdl地籍地籍参数设置.............CADAPARA绘制权属线.................JZLINE权属线生成依权属文件绘权属图.............hqst修改界址点号.............JZNUMBER重排界址点号.............requeuejzp设置最大界址点号.............setmaxjzd 删除无用界址点号.............delunusejzd 注记界址点点名界址点圆圈修饰.............xiushijzd调整界址点顺序.............arrangejzd界址点生成数据文件.............jzptofile 查找指定宗地.............zhizong查找指定界址点.............zhijzp宗地合并.............joinjzx宗地分割.............splitjzx宗地重构.............regenzd--修改宗地属性.............setjiezhi修改界址线属性.............jzxinfo修改界址点属性.............jzdinfo输出宗地属性.............zdinfomdb等高线由数据文件建立.............LINKSJX图面DTM完善.............APPENDSJX删除三角形.............._erase过滤三角形.............filter_sjx增加三角形.............jsjw三角形内插点.............insert_sjx删三角形顶点.............erase_sjx重组三角形.............re_sjx删三角网.............delsjx三角网存取修改结果存盘.............ssjw绘制等高线.............dzx绘制等深线.............dsx等高线内插.............CONTOUR等值线过滤.............dgxguolv删全部等高线.............deldgx查询指定点高程.............height等高线修剪切除穿建筑物等高线.............plsx切除穿坡坎等高线.............trkan切除穿围墙等高线.............trwall切除指定二线间等高线.............trtwoline切除指定区域内等高线.............tregion切除穿控制点注记等高线.............kzdtrim消隐穿独立地物等高线.............(ARXLOAD "WIPEOUT");blockmask 切除穿独立地物等高线.............blocktrim消隐穿文字注记等高线.............(ARXLOAD "WIPEOUT");textmask 取消穿注记等高线消隐.............(arxload "wipeout");textunmask 切除穿文字注记等高线.............btxt单个示坡线...............spzj沿直线示坡线.............GCSPZJ;2复合线滤波...............jjjd三维模型绘制三维模型.............vshow低着色方式.............SHADE;高级着色方式.............RENDER;返回平面视图.............VEND;地物编辑修改墙宽.............wallwidth修改坎高.............askan图案填充.............sotian符号等分内插.............neicha线型规范化.............pludd图形接边.............mapjoin坐标转换.............transform测站改更.............modizhan质量控制打散独立图块.............explodeblock。
turtle库的进入绘制状态函数
turtle库的进入绘制状态函数Turtle库是Python语言中的一个绘图库,它可以让我们通过编写代码来绘制各种图形,如线条、圆形、矩形等等。
在使用Turtle库时,我们需要先进入绘制状态,才能开始绘制图形。
本文将介绍Turtle库的进入绘制状态函数,并详细讲解如何使用它来绘制图形。
一、Turtle库的基本概念在介绍Turtle库的进入绘制状态函数之前,我们先来了解一下Turtle库的基本概念。
1. TurtleTurtle是Turtle库中的一个类,它代表了一个绘图窗口中的一只海龟。
我们可以通过控制这只海龟的移动来绘制各种图形。
2. ScreenScreen是Turtle库中的另一个类,它代表了一个绘图窗口。
我们可以在这个窗口中绘制图形。
3. Turtle GraphicsTurtle Graphics是Turtle库中的一个概念,它指的是使用Turtle 类来绘制图形的过程。
二、进入绘制状态函数在Turtle库中,我们可以使用Turtle类的penup()函数和pendown()函数来控制海龟的绘制状态。
其中,penup()函数用于将海龟的笔抬起,pendown()函数用于将海龟的笔放下。
具体来说,当我们调用penup()函数时,海龟的笔会被抬起,此时海龟移动时不会绘制任何图形。
而当我们调用pendown()函数时,海龟的笔会被放下,此时海龟移动时会绘制图形。
下面是penup()函数和pendown()函数的使用方法:```pythonimport turtle# 创建一个Turtle对象t = turtle.Turtle()# 将海龟的笔抬起t.penup()# 将海龟的笔放下t.pendown()```在使用penup()函数和pendown()函数时,我们需要注意以下几点:1. penup()函数和pendown()函数只对当前海龟有效,不会影响其他海龟。
2. 当我们创建一个Turtle对象时,海龟的笔默认是放下的,即绘制状态。
C语言Windows程序开发—CreateWindow函数介绍【第03天】
C语⾔Windows程序开发—CreateWindow函数介绍【第03天】(⼀)CreateWindow函数的参数介绍:1 HWND CreateWindow(2 LPCTSTR lpClassName, //Windows窗⼝中预定义的控件结构体,包括:BUTTON(按钮),EDIT(⽂本框),LISTBOX(列表),MDICLIENT(⼦窗⼝),SCROLLBAR(滚动条),RICHEDIT(富⽂本),STATIC(静态控件);3 LPCTSTR lpWindowName, //窗⼝控件中显⽰的内容,即Caption属性;4 DWORD dwStyle, //控件样式,包括:WS_CHILD | WS_VISIBLE | WS_BORDER,还可以根据具体控件类型添加相应样式5int x, //窗⼝或控件左上⾓(X,Y)的X坐标6int y, //窗⼝或控件左上⾓(X,Y)的Y坐标7int nWidth, //窗⼝或控件的宽度8int nHeight, //窗⼝或控件的⾼度9 HWND hWndParent, //⽗窗⼝句柄10 HMENU hMenu, //菜单或者⼦窗⼝或控件的ID11 HANDLE hInstance, //实例12 PVOID lpParam //13 );函数调⽤⽰例:(1)创建窗⼝1/* 创建窗⼝ */2 hwnd = CreateWindow ( szAppName, TEXT ("输出字符串演⽰"),3 WS_OVERLAPPEDWINDOW,4 CW_USEDEFAULT, CW_USEDEFAULT,5 CW_USEDEFAULT, CW_USEDEFAULT,6 NULL, NULL, hInstance, NULL ) ;第1个参数:szAppName是字符串变量,如TEXT ("MyWindow"),表⽰为程序名称;第2个参数:窗⼝标题名称;第3个参数:窗⼝样式;第4个参数:窗⼝左上⾓(X,Y)的X坐标,CW_USEDEFAULT表⽰使⽤缺省值;第5个参数:窗⼝左上⾓(X,Y)的Y坐标,CW_USEDEFAULT表⽰使⽤缺省值;第6个参数:窗⼝宽度,CW_USEDEFAULT表⽰使⽤缺省值;第7个参数:窗⼝⾼度,CW_USEDEFAULT表⽰使⽤缺省值;第8个参数:如果有⽗窗⼝,则是⽗窗⼝句柄,NULL表⽰没有⽗窗⼝;第9个参数:如果有菜单,则是菜单的ID,NULL表⽰没有菜单;第10个参数:执⾏实例代码;第11个参数:(2)创建控件1/* 创建编辑区 */2 hwndChild[ID_EDITBOX] = CreateWindow( TEXT("edit"), NULL,3 WS_CHILD | WS_VISIBLE | WS_BORDER |4 ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,50, 0, 0, 0,6 hwnd, (HMENU)ID_EDITBOX, hInst, NULL ) ;第1个参数:创建控件所属的预定义控件结构体,TEXT ("edit")表⽰创建⽂本框,如果是TEXT("button"),则表⽰创建按钮;第2个参数:控件的标题名称,在创建⽂本框时,该参数不为空(如TEXT(“UserName”)),则创建成功后会在⽂本框中显⽰UserName;第3个参数:在创建控件或⼦窗⼝时,必须样式WS_CHILD | WS_VISIBLE和该控件具有的特有样式,ES_LEFT表⽰⽂本框中内容左对齐;第4~7个参数:控件的左上⾓(X,Y)坐标,宽度与⾼度,可以在回调函数的WM_SIZE中通过MoveWindow函数进⾏调整;第8个参数:⽗窗⼝句柄,表⽰控件⽂本框所在的窗⼝句柄;第9个参数:控件ID,并强制转换为HMENU类型;第10个参数:执⾏实例代码第11个参数:通过对⽐创建窗⼝或⼦窗⼝(或控件)时CreateWindow函数的参数赋值,发现:第1个参数在创建控件时尤为重要,其作⽤是声明正在创建控件的预定义控件结构体;第4~7个参数是来限定窗⼝或控件的尺⼨;第8个参数都表⽰其⽗窗⼝句柄,若是控件,则是控件所在窗⼝的句柄;第10个参数都是执⾏实例代码,但是⼦窗⼝(或控件)的执⾏实例代码hInst = ((LPCREATESTRUCT) lParam) -> hInstance;(⼆)CreateWindow函数实例应⽤1/* 创建Login窗⼝*/2 #include <windows.h>3 #include <stdio.h>45#define ID_UserName 10006#define ID_Password 10017#define ID_btnLogin 100289/* 声明回调函数 */10 LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM ) ;1112/* 声明创建窗⼝控件 */13int CreateChildWindow ( HWND, HWND *, LPARAM ) ;1415/* 主函数 */16int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )17 {18static TCHAR szAppName [] = TEXT ("Demo") ;19 HWND hwnd ;20 MSG msg ;21 WNDCLASS wndclass ;2223 wndclass.style = CS_HREDRAW | CS_VREDRAW ; //窗⼝样式24 wndclass.lpfnWndProc = WndProc ; //窗⼝的回调函数25 wndclass.hInstance = hInstance ; //窗⼝实例句柄26 wndclass.cbClsExtra = 0 ; //窗⼝结构体扩展:⽆27 wndclass.cbWndExtra = 0 ; //窗⼝实例扩展:⽆28 wndclass.hbrBackground = ( HBRUSH ) GetStockObject ( WHITE_BRUSH ) ; //窗⼝背景29 wndclass.hIcon = LoadIcon ( NULL, IDI_APPLICATION ) ; //窗⼝图标30 wndclass.hCursor = LoadCursor ( NULL, IDC_ARROW ) ; //窗⼝中的⿏标样式31 wndclass.lpszClassName = szAppName ; //窗⼝结构体名称32 wndclass.lpszMenuName = NULL ; //主菜单名称:⽆3334/* 注册窗⼝结构体 */35if ( !RegisterClass ( &wndclass ) )36 {37 MessageBox ( NULL, TEXT ("⽆法注册窗⼝结构体!"), TEXT ("错误"), MB_OK | MB_ICONERROR) ;38return0 ;39 }4041/* 创建Login窗⼝ */42 hwnd = CreateWindow ( szAppName, TEXT ("登录"),43 WS_OVERLAPPEDWINDOW,44 CW_USEDEFAULT, CW_USEDEFAULT,45400, 300,46 NULL, NULL, hInstance, NULL ) ;4748/* 显⽰与更新窗⼝ */49 ShowWindow ( hwnd, iCmdShow ) ;50 UpdateWindow ( hwnd ) ;5152/* 从消息队列中获取消息 */53while ( GetMessage ( &msg, NULL, 0, 0 ) )54 {55 TranslateMessage ( &msg ) ; //将虚拟键消息转换为字符消息56 DispatchMessage ( &msg ) ; //将消息传递给回调函数处理57 }5859return msg.wParam ;60 }6162/* 回调函数 */63 LRESULT CALLBACK WndProc (HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam )64 {65static HWND hChild [2] ;66 HDC hdc ;67 PAINTSTRUCT ps ;68 RECT rect ;6970static int cxChar, cyChar ;7172switch ( umsg )73 {74case WM_CREATE : //处理窗⼝创建成功后发来的消息75/* 创建窗⼝控件 */76 CreateChildWindow ( hwnd, hChild, lParam ) ;7778 cxChar = LOWORD (GetDialogBaseUnits ()); //获得窗⼝中内定字体字元宽度(低字组)79 cyChar = HIWORD (GetDialogBaseUnits ()); //或得窗⼝中内定字体字元⾼度(⾼字组)80return0 ;8182case WM_SIZE : //处理窗⼝尺⼨发⽣改变后发来的消息83 GetClientRect ( hwnd, &rect ) ;84 MoveWindow ( hChild [ ID_UserName ], rect.left + cxChar * 12, 110, cxChar * 24, cyChar * 5 / 4, TRUE ) ;85 MoveWindow ( hChild [ ID_Password ], rect.left + cxChar * 12, 160, cxChar * 24, cyChar * 5 / 4, TRUE ) ;86 MoveWindow ( hChild [ ID_btnLogin ], rect.left + cxChar * 12, 210, cxChar * 12, cyChar * 7 / 4, TRUE ) ; 87return0 ;8889case WM_PAINT : //处理窗⼝产⽣⽆效区域时发来的消息90 GetClientRect ( hwnd, &rect ) ;91 hdc = BeginPaint ( hwnd, &ps ) ;92 TextOut ( hdc, rect.left + cxChar * 12, 95, TEXT ("UserName:"), lstrlen ( TEXT ("UserName:") ) ) ;93 TextOut ( hdc, rect.left + cxChar * 12, 145, TEXT ("Password:"), lstrlen ( TEXT ("Password:") ) ) ;94 EndPaint ( hwnd, &ps ) ;95return0 ;9697case WM_DESTROY : //处理窗⼝关闭时发来的消息98 PostQuitMessage (0) ;99return0 ;100 }101102return DefWindowProc ( hwnd, umsg, wParam, lParam ) ;103 }104105/* 创建控件 */106int CreateChildWindow ( HWND hwnd, HWND * hChild, LPARAM lParam )107 {108 HINSTANCE hInst = ( ( LPCREATESTRUCT ) lParam ) -> hInstance ;109110/* 创建UserName⽂本框 */111 hChild [ ID_UserName ] = CreateWindow ( TEXT ("edit"), NULL,112 WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,1130, 0, 0 , 0,114 hwnd, ( HMENU ) ID_UserName, hInst, NULL ) ;115116/* 创建Password⽂本框 */117 hChild [ ID_Password ] = CreateWindow ( TEXT ("edit"), NULL,118 WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,1190, 0, 0, 0,120 hwnd, ( HMENU ) ID_Password, hInst, NULL ) ;121122/* 创建Login按钮 */123 hChild [ ID_btnLogin ] = CreateWindow ( TEXT ("button"), TEXT ("Login"),124 WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_CENTER,1250, 0, 0, 0,126 hwnd, ( HMENU ) ID_btnLogin, hInst, NULL ) ;127128return0 ;129 }View Code运⾏结果:代码说明:(1)WndProc回调函数中的消息处理<1>WM_SIZE消息处理1case WM_SIZE : //处理窗⼝尺⼨发⽣改变后发来的消息2 GetClientRect ( hwnd, &rect ) ;3 MoveWindow ( hChild [ ID_UserName ], rect.left + cxChar * 12, 110, cxChar * 24, cyChar * 5 / 4, TRUE ) ;4 MoveWindow ( hChild [ ID_Password ], rect.left + cxChar * 12, 160, cxChar * 24, cyChar *5 / 4, TRUE ) ;5 MoveWindow ( hChild [ ID_btnLogin ], rect.left + cxChar * 12, 210, cxChar * 12, cyChar * 7 / 4, TRUE ) ;6return0 ;GetClientRect函数获取登录窗⼝的矩形区域,即登录窗⼝中除去标题栏的矩形区域,MoveWindow函数调整控件的尺⼨(即CreateWindow函数中的第4~7个参数);<2>WM_PAINT消息处理1case WM_PAINT : //处理窗⼝产⽣⽆效区域时发来的消息2 GetClientRect ( hwnd, &rect ) ;3 hdc = BeginPaint ( hwnd, &ps ) ;4 TextOut ( hdc, rect.left + cxChar * 12, 95, TEXT ("UserName:"), lstrlen ( TEXT ("UserName:") ) ) ;5 TextOut ( hdc, rect.left + cxChar * 12, 145, TEXT ("Password:"), lstrlen ( TEXT ("Password:") ) ) ;6 EndPaint ( hwnd, &ps ) ;7return0 ;BeginPaint函数与EndPaint函数必须成对出现,BeginPaint函数表⽰开始绘制窗⼝,同时使整个显⽰区域变为有效,更新显⽰区域的内容,例如在窗⼝中⽤TextOut函数输出内容。
ondraw函数的运用
这两个函数有区别也有联系:
1、区别:OnDraw是一个纯虚函数,定义为virtual void OnDraw( CDC* pDC ) = 0;而OnPaint是一个消息响应函数,它响应了WM_PANIT消息,也是是窗口重绘消息。
如下所示
BOOL CMyDlg::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
以上本來是會呼叫CDialog::OnEraseBkgnd()但是如果我們不呼叫的話
程式便不會畫上灰色的底色了
Q:基于对话框的程序中如何重载OnEraseBkGnd()函数
A:这是一个消息WM_ERASEBKWND
{
CMyDoc* pDoc = GetDocument();
CString s = pDoc->GetData();
GetClientRect( &rect ); // Returns a CString CRect rect;
pDC->SetTextAlign( TA_BASELINE | TA_CENTER );
都挺简单的.
在MFC中任何一個window元件的繪圖都是放在這兩個member function中
在設定上OnEraseBkgnd()是用來畫底圖的而OnPaint()是用來畫主要物件的
舉例說明一個按鈕是灰色的上面還有文字
則OnEraseBkgnd()所做的事就是把按鈕畫成灰色
而OnPaint()所做的事就是畫上文字
1)在mfc结构里OnPaint是CWnd的成员函数. OnDraw是CView的成员函数.
函数DrawDib和DrawDibdraw区别
DrawDib的操作通过使用DrawDibOpen函数初始化DrawDib函数组。
DrawDibOpen负责装载动态连接库(DLL),申请内存资源,DrawDib设备环境(DC),并且维持初始化相关的设备环境计数。
DrawDibOpen同时返回一个其它DrawDib函数所需要使用的新的DC句柄。
当使用完DrawDib DC后,可以用DrawDibClose函数释放它。
DrawDibClose同时减少存取DLL的应用的计数。
在应用程序中,DrawDibClose函数应是最后的DrawDib操作。
可以创建任意多的DrawDib DC,也可以同时使用多个DrawDib DC来绘制几幅位图。
在应用程序中可以创建多个不同性质的DrawDib DC,这样就可以选择最合适的DC设置。
例如,在同一应用程序中,创建两个不同的DrawDib DC,一个用来显示图象的正常分辨率,另一个用来显示图象的放大部分。
为了更有效地运行,DrawDib函数组需要知道显示适配器及其驱动的信息。
显示配置信息是在第一次使用包含DrawDib函数组的DLL时,对显示适配器通过了一系列的测试之后得到的。
DrawDib函数组的所有应用都要用到这个配置信息。
可以通过调用DrawDibProfileDisplay函数来强制重新进行这些测试。
memset为内存填充函数,包含在<string.h>头文件中,可以用它对一片内存空间进行初始化memcpy函数用法解析结构如下:void *memcpy( void *dest, const void *src, size_t count );作用:在dest处拷贝src处的字节,并以count来计算需要拷贝的字节数量,进行内存的拷贝。
参数:dest:新的存贮区的开始部位src:需要拷贝的开始部位count:需要拷贝的字节数备注:dest,src,它们都是从各自的地址处进行写入,如果是p而不是&p,那么奖会取得p的值(地址),在该值的地址处进行读出或写入。
beginpaint函数
beginpaint函数(最新版)目录1.beginpaint 函数的作用和用途2.beginpaint 函数的参数和返回值3.beginpaint 函数的使用方法和示例4.beginpaint 函数的优点和局限性正文beginpaint 函数是计算机图形学中的一个重要函数,主要用于在屏幕或者打印机上绘制图形和文字。
该函数可以用于各种编程语言和图形库,例如 C++的 SGI 图形库和 Python 的 PIL 图形库。
beginpaint 函数的作用和用途主要是在指定的区域或者设备上开始一次绘制操作。
在使用 beginpaint 函数之前,需要进行一些初始化操作,例如创建一个画布或者选择一个颜色。
在调用 beginpaint 函数之后,就可以使用各种绘制函数来绘制图形和文字,例如绘制线条、矩形、多边形、文本等等。
绘制完成后,可以使用 endpaint 函数来结束绘制操作,并将结果保存到指定的区域或者设备上。
beginpaint 函数的参数和返回值因编程语言和图形库的不同而有所不同。
一般来说,beginpaint 函数需要以下参数:1.设备句柄:表示要在哪个设备上进行绘制操作,例如屏幕、打印机等等。
2.画布:表示要在哪个画布上进行绘制操作,例如窗口、画布对象等等。
3.颜色:表示绘制的颜色,可以是一个颜色值或者一个颜色名称。
beginpaint 函数的返回值通常是一个布尔值,表示是否成功开始绘制操作。
如果返回值为真,则表示成功开始绘制操作;如果返回值为假,则表示绘制操作失败,需要进行错误处理。
beginpaint 函数的使用方法和示例可以参考以下代码:```pythonimport pygame# 初始化 pygamepygame.init()# 创建一个窗口screen = pygame.display.set_mode((640, 480))# 开始绘制操作pygame.draw.rect(screen, (255, 0, 0), (10, 10, 600, 400))# 结束绘制操作pygame.display.flip()```在这段代码中,我们首先使用 pygame 库初始化,然后创建一个窗口。
闪烁的烁有什么组词
《元宵节》节日春节节目欢乐欢笑吃力小吃吃饭口吃正月方正欢庆庆祝团圆团体《看花灯》花朵开花鲜花金鱼金子金色立正站立各种各样各位明年《老树的故事》老树老师老人老百姓百岁一百安全安家平安天安门说话讲话童话话语告诉告示广告布告诉说上诉《一粒种子》一粒米粒颗粒种子品种各种去年年岁第2单元《小山村》大家家人有时小时中间山间《水乡歌》水乡家乡纸条小河清明清洁首先首长第3单元《春天》欢乐快乐友好友谊《插秧》水田田地乌云云朵人民农民吐泡泡家乡树林时钟看到方向远方乡村乡下河水黄河一片纸片生活活动拍手节拍拉手拉花映照反映云彩大树村民渔民森林时间看见看书方正方法一条长条清水清早瓦片一首活鱼拍打朋友拉车放映白云树叶树林一点有点点头大声小声声音音乐音色说话小说传说听说赶快赶上第5单元《小鱼的梦》游玩玩笑好玩怀里关怀怀念怀旧星星五星明星星期歌曲乐曲弯曲车把把手一把做人做梦做工《大熊猫》在乎胖乎乎黑乎乎四肢四方黑色乌黑耳朵双耳木耳两只两个两人爪子鸟爪鸡爪呼吸呼气呼叫招呼第6单元《纪念》应该响应相应答应名气名声名字写字打字台阶窗台台风台湾站立车站五颜六色六个《特别的作业》作业工作作用工业农业业主产业事业昨天今天今年今宵玉兰玉石宝玉兰花护士爱护保护让给让座让人《燕子妈妈笑了》冬瓜西瓜瓜果瓜子认真认字认识认可真心真相真好一次次要次日皮毛羊皮牛皮瓜皮皮衣皮包细毛仔细细心《丁丁写字》写字书写写作好人好事不好《雨铃铛》下雨雨点雨水响声响应房子房屋房檐挂起一串肉串招呼飞快快乐《美丽的彩虹》天空空气一丁点园丁一定定时七彩巨大巨人彩色颜色很好对手一对对错拿手拿笔拿起毛笔铅笔钢笔比肩丢失丢人丢掉身体身子一身坐正正确第8单元认识识字公共汽车公园公开共同电车火车马车卡车面包车手电电话电视电灯汽车汽水拖拉机手机洒水车司机公司人员员工请勿专心专座专用专业火车着火灯火车辆一辆交通第9单元《东东读课文》课文功课上课语文文字文明老师师长请坐请客请人同学同意相同同样笑声欢笑大笑这里这些这样《池塘边的叫声》岸边一边身边半天一半半年过去过来过河转动转圈连忙连队每天每人讲话听讲讲课干活干什么好奇爱好背上背着第11单元《丁丁和牵牛花》王八大王王者知足满足足够一路走路大路《想飞的乌龟》听见听写听说想到心想方法沉重太重掉下第12单元《数星星的孩子》重复重新重来作为坐下坐直很多很大祖先组织还是还有《问银河》闪电闪光闪烁没有没事没完那样胡子胡须做客能力万能长久久远往事以往马路公路想要不要办法丢掉教书教课一直笔直先后一组遥远远方那里那些胡说客人能手能干不久往常高兴想法成为很好小组远近那个请客不能《长歌行》山川四川到来到处大海东海海洋如何何时为何努力力量力气有力大力伤心悲伤受伤伤口《大家都快乐》可以以为以后广播广大广场故事故乡故土故意群众众人大众学生学问文学学习许多许可也许更好更快更多《小闹钟》闹钟吵闹热闹闹市钟表时钟钟声完成完全完美已经经常经书经文院子书院大院医院院长劲头使劲有劲一行银行第14单元《丁丁冬冬学识字》树木森林树枝树根杏树枫树拍数松树木材木材木棍木板木条休息桌椅木床衣柜书架桃李李子《竹乡之歌》竹子竹叶竹筒竹笛笛子笛声爸爸起来一起吃饭早饭午饭晚饭香味香草香山香气传说传人传来第15单元《我的名字》知道道路一道阿姨红色红领巾奶奶牛奶爷爷大爷但是记住记录笔记《好事情》生气气体于是等于对于好事做事事情心情感情如果不如比如别人告别送别送给给你给我《快乐的小公鸡》怎样样子跑来水牛奶牛帮助助人虫子害虫跑步长跑帮忙助理草丛树丛老牛助力得到篇二:屏幕闪烁的问题以下是网摘的可参考方法:如果一个程序出现闪烁现象,会让人觉得程序编写人员很马虎,缺乏对细节的足够重视。
窗口刷新问题(WMPAINT、BeginPaint、EndPaint的说明)
窗口刷新问题(WMPAINT、BeginPaint、EndPaint的说明)窗口刷新问题(WMPAINT、BeginPaint、EndPaint的说明)在某些情况下,显示区域的一部分被临时覆盖,Windows试图保存一个显示区域,并在以后恢复它,但这不一定能成功。
在以下情况下,Windows可能发送WM_PAINT消息:Windows擦除覆盖了部分窗口的对话框或消息框。
菜单下拉出来,然后被释放。
显示工具提示消息。
在某些情况下,Windows总是保存它所覆盖的显示区域,然后恢复它。
这些情况是:鼠标光标穿越显示区域。
图标拖过显示区域。
处理WM_PAINT消息要求程序写作者改变自己向显示器输出的思维方式。
程序应该组织成可以保留绘制显示区域需要的所有信息,并且仅当「响应要求」-即Windows给窗口消息处理程序发送WM_PAINT消息时才进行绘制。
如果程序在其它时间需要更新其显示区域,它可以强制Windows产生一个WM_PAINT消息。
这看来似乎是在屏幕上显示内容的一种舍近求远的方法。
但您的程序结构可以从中受益。
1. 系统何时发送WM_PAINT消息?系统会在多个不同的时机发送WM_PAINT消息:当第一次创建一个窗口时,当改变窗口的大小时,当把窗口从另一个窗口背后移出时,当最大化或最小化窗口时,等等,这些动作都是由系统管理的,应用只是被动地接收该消息,在消息处理函数中进行绘制操作;大多数的时候应用也需要能够主动引发窗口中的绘制操作,比如当窗口显示的数据改变的时候,这一般是通过InvalidateRect和InvalidateRgn函数来完成的。
InvalidateRect和InvalidateRgn把指定的区域加到窗口的Update Region中,当应用的消息队列没有其他消息时,如果窗口的Update Region不为空时,系统就会自动产生WM_PAINT消息。
系统为什么不在调用Invalidate时发送WM_PAINT消息呢?又为什么非要等应用消息队列为空时才发送WM_PAINT消息呢?这是因为系统把在窗口中的绘制操作当作一种低优先级的操作,于是尽可能地推后做。
OnDraw与OnPaint有什么区别
OnDraw中可以绘制用户区域。OnPaint中只是当窗口无效时重绘不会保留CClientDC绘制的内容。
这两个函数有区别也有联系:
1、区别:OnDraw是一个纯虚函数,定义为virtual void OnDraw( CDC* pDC ) = 0; 而OnPaint是一个消息响应函数,它响应了WM_PANIT消息,也是是窗口重绘消息。
当没有添加WM_PAINT消息处理时,窗口重绘时,由OnDraw来进行消息响应...当添加WM_PAINT消息处理时,窗口重绘时,WM_PAINT消息被投递,由OnPaint来进行消息响应.这时就不能隐式调用OnDraw了.必须显式调用( CDC *pDC=GetDC(); OnDraw(pDC); )..
其次:我们在第《每天跟我学MFC》3的开始部分已经说到了。要想在屏幕上绘图或显示图形,首先需要建立设备环境DC。其实DC是一个数据结构,它包含输出设备(不单指你17寸的纯屏显示器,还包括打印机之类的输出设备)的绘图属性的描述。MFC提供了CPaintDC类和CWindwoDC类来实时的响应,而CPaintDC支持重画。当视图变得无效时(包括大小的改变,移动,被遮盖等等),Windows 将 WM_PAINT 消息发送给它。该视图的OnPaint 处理函数通过创建 CPaintDC 类的DC对象来响应该消息并调用视图的 OnDraw 成员函数。通常我们不必编写重写的 OnPaint 处理成员函数。
至于CPaintDC和CClientDC根本是两回事情 CPaintDC是一个设备环境类,在OnPaint中作为参数传递给OnPrepareDC来作设备环境的设置。真正和CClientDC具有可比性的是CWindowDC,他们一个是描述客户区域,一个是描述整个屏幕。
context.background()用法
context.background()用法context.background()是Dart编程语言中Flutter框架的一部分,用于设置画布(Canvas)的背景色。
在Flutter中,context是一个用于访问当前widget的上下文对象。
context.background()方法用于设置画布的背景颜色。
以下是一个简单的例子:@overridevoid paint(Canvas canvas, Size size) {context.background(); // 设置背景色为白色// 在此之后的绘图操作都会在这个白色背景上进行// ...}在这个例子中,context.background()被用来设置画布的背景色为白色。
之后在这个画布上的所有绘图操作都会在这个白色背景上进行。
注意,context.background()方法实际上是调用了context.beginPaint()和context.endPaint(),它们一起创建了一个新的画布,并设置了背景色。
如果你想要自定义背景色,你可以直接使用context.beginPaint()和context.endPaint(),然后在beginPaint之后设置你想要的背景色。
例如:@overridevoid paint(Canvas canvas, Size size) {final paint = Paint()..color = Colors.blue; // 设置背景色为蓝色canvas.drawRect(Rect.fromLTRB(0, 0, size.width, size.height), paint); // 在画布上绘制一个矩形}在这个例子中,我们创建了一个新的Paint对象,并设置了它的颜色为蓝色,然后用它来绘制一个矩形。
这样,这个矩形就会在一个蓝色的背景上显示出来。
屏幕闪烁的问题
以下是网摘的可参考方法:如果一个程序出现闪烁现象,会让人觉得程序编写人员很马虎,缺乏对细节的足够重视。
Windows程序的任何部分都没有任何理由出现闪烁现象。
这篇文章的目的是告诉读者如何使用相关的技术防止窗口出现闪烁效果。
什么是闪烁闪烁可以这样定义:当后面一幅图像以很快的速度画在前面一幅图像上时,在后面图像显示前,你可以很快看到前面那一个图像,这样的现象就是闪烁。
我认为,闪烁会让使用者对程序很不满,原因是:如果用户接口编码如此糟糕,那么程序的其他部分呢,如何能相信数据的正确性呢?一个具有平滑,快速响应的程序会给用户带来信心,这个道理很简单。
程序出现闪烁可以由多种形式造成,最常见的原因是窗口大小发生改变时,其内容重画造成闪烁。
仅仅画一次这是一个黄金法则,在任何计算机(Windows或者你使用的任何操作系统)上处理画法逻辑都需要遵循,即永远不要将同一像素画两次。
一个懒惰的程序员常常不愿意在画法逻辑上投入过多精力,而是采用简单的处理逻辑。
要避免闪烁,就需要确保不会出现重复绘制的情况发生。
现在,WIndows和计算机还是很笨的,除非你给他们指令,否则他们不会做任何事情。
如果闪烁的现象发生,那是因为你的程序刻意地多绘制了屏幕的某些区域造成的. 这个现象可能是因为一些明确的命令,或者一些被你忽视了的地方。
如果程序有闪烁的现象出现,你需要你知道如何找到好的方案去解决这个问题。
WM_ERASEBKGND通常,首先需要怀疑的是WM_ERASEBKGND消息。
当一个窗口的背景需要被擦除时,这个消息会被发送。
这是因为窗口的绘画通常经历了两个过程·WM_ERASEBKGND: 清除背景·WM_PAINT: 在上面绘制内容这两个过程让窗体在绘制内容时变得很简单,即:每次当收到WM_PAINT 消息时,你知道已经有了一个新画布等待去绘制。
然而,画窗口两次(一次是通过WM_ERASEBKGND画背景,另外一次是WM_PAINT)将会导致窗口出现比较糟糕的闪烁现象。
1C#_调用WIN32的API函数 USER32.DLL实现窗体的多显示效果(四周扩展,中间缩小,折叠显示,淡入淡出效果)
Win32的API函数是微软自己的东西,可以直接在C#中直接调用,在做WinForm 时还是很有帮助的。
有时候我们之直接调用Win32的API,可以很高效的实现想要的效果。
代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;namespace WindowsAPI{class CSharp_Win32Api{#region User32.dll函数///<summary>///该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备上下文环境中绘图。
hWnd:设备上下文环境被检索的窗口的句柄///</summary>[DllImport("user32.dll",CharSet=CharSet.Auto)]public static extern IntPtr GetDC(IntPtr hWnd);///<summary>///函数释放设备上下文环境(DC)供其他应用程序使用。
///</summary>public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);///<summary>///该函数返回桌面窗口的句柄。
桌面窗口覆盖整个屏幕。
///</summary>static public extern IntPtr GetDesktopWindow();///<summary>///该函数设置指定窗口的显示状态。
///</summary>static public extern bool ShowWindow(IntPtr hWnd, short State);///<summary>///通过发送重绘消息WM_PAINT给目标窗体来更新目标窗体客户区的无效区域。
MFC期末复习简答题及答案
MFC 期末复习及答案1 简述MFC 应用程序的执行过程。
2 简述文档/视图与其他类对象的关系。
3 简述MFC 消息映射机制。
4 消息WM_LBUTTONDOWN 的消息映射宏和消息处理函数是什么?5 如何自定义消息?如何发送自定义消息?6 GDI 创建哪几种类型的图形输出?7 什么是设备环境?它的主要功能有哪些?8 什么是GDI,它有什么功能?MFC 将GDI 函数封装在哪个类中?9 请叙述设备无关性的含义,实现设备无关性需要哪几个环节?10 MFC 提供了哪几种设备环境类?它们各自有什么用途?11 简述传统的SDK 获取设备环境的方法。
12 简述创建和使用自定义画笔的步骤。
13 简述采用MFC 方法编程时,显示一个DDB 位图的步骤。
14 简述菜单设计的主要步骤。
15 为应用程序创建快捷菜单主要有哪些方法?16 如何动态创建菜单?17 创建工具栏的基本步骤有哪些?18 简述MFC 创建状态栏所做的工作。
19 简述创建和使用模态对话框的主要步骤。
20 如何向对话框模板资源添加控件?如何添加与控件关联的成员变量?21 什么是DDX 和DDV?编程时如何使用MFC 提供的DDX 功能?22 简述创建属性页对话框的主要步骤。
23 在应用程序中访问控件的方法有哪些?24 单选按钮控件如何成组?25 组合框与列表框相比有什么不同?如何给组合框添加初始的列表项?26 通过哪几个主要成员函数完成文档与视图之间的相互作用?并简述这些成员函数的功能。
27 简述文档序列化与一般文件处理的区别。
28.如何让用户定义的类支持序列化?1 简述MFC 应用程序的执行过程。
MFC 应用程序启动时,首先创建应用程序对象theApp。
这时将自动调用应用程序类的构造函数初始化对象theApp,然后由应用程序框架调用MFC 提供的WinMain( )主函数。
在WinMain( )主函数中,首先通过调用全局函数GetApp( )来获取theApp 的指针pApp,然后通过该指针调用theApp 的成员函数InitInstance( )来初始化应用程序。
WM_PAINT
BeginPaint和GetDC的区别(转)2009-03-05 11:07这是个windows编程问题。
第一种情况显示出来的字很正常。
case WM_PAINT:gdc = BeginPaint (hwnd, &ps);TextOut (gdc, 0, 0, s, strlen (s));EndPaint (hwnd, &ps);break;第二种情况显示的字不停闪烁。
case WM_PAINT:gdc = GetDC (hwnd);TextOut (gdc, 0, 0, s, strlen (s));ReleaseDC (hwnd, gdc);break;请教两种函数的作用?BeginPaint() 和EndPaint() 可以删除消息队列中的WM_PAINT消息,并使无效区域有效。
GetDC()和ReleaseDC()并不删除也不能使无效区域有效,因此当程序跳出WM_PAINT 时,无效区域仍然存在。
系统就回不断发送WM_PAINT消息,于是程序不断处理WM_PAINT消息。
相当于BeginPaint、EndPaint会告诉GDI内部,这个窗口需要重画的地方已经重画了,这样WM_PAINT处理完返回给系统后,系统不会再重发WM_PAINT,而GetDC 没有告诉系统这个窗口需要重画的地方已经画过,在你把程序返回给系统后,系统一直以为通知你的重画命令你还没有乖乖的执行或者执行出错,所以在消息空闲时,它还会不断地发WM_PAINT催促你画,导致程序卡死。
无效区域:无效区域就是指需要重画的区域,无效的意思是:当前内容是旧的,过时的。
假设A是新弹出的一个对话框或被激活的现有对话框,A对话框置于原来的活动对话框B前面,造成对话框B的部分或全部被覆盖,当对话框A移开或关闭后,使对话框B原来被覆盖的地方重新可见。
那部分被覆盖的地方就称为无效区域。
只有当一个窗口消息空闲时,系统才会抽空检查一下这个窗口的无效区域是否为非空(WM_PAINT的优先级是最低的。
VC++深入详解(孙鑫)学习笔记
wnd.lpfnWndProc = WinProc;//消息响应函数
wnd.lpszClassName = "gaojun";//窗口类的名子,在注册时会使用到
wnd.lpszMenuName = NULL;//默认为NULL没有标题栏
LPARAM lParam // second message parameter
);
//(1) WinMain函数,程序入口点函数
int WINAPI WinMain(
4. 创建一个完整的Win32程序,该程序实现创建一个窗口,其中主要步骤为
A. WinMain函数的定义
B. 创建一个窗口 创建一个完整的窗口的四个步骤SDK,1设计窗口类,2注册窗口类,3创建窗口,4显示窗口
C. 进行消息循环
wnd.style = CS_HREDRAW | CS_VREDRAW;//定义为水平和垂直重画
//二.注册窗口类
RegisterClass(&wnd);
//三.根据定制的窗口类创建窗口
HWND hwnd;//保存创建窗口后的生成窗口句柄用于显示
if (-1 == bSet)
{
return -1;
}
else{
TranslateMessage(&msg);
//如果是多文档程序,则最后一个参数lParam必须指向一个CLIENTCREATESTRUCT结构体
hwnd = CreateWindow("gaojun", "WIN32应用程序", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL);
第04课 绘制文本
您必须了解的另一个概念是“无效区域”。Windows 把一个最小的需要重绘的正方形区域叫做“无效区域”。当 Windows 发现了一个”无效区域“后,它就会向该应用程序发送一个 WM_PAINT 消息,在 WM_PAINT 的处理过程中,窗口首先得到一个有关绘图的结构体,里面包括无效区的坐标位置等。您可以通过调用BeginPaint 让“无效区”有效,如果您不处理 WM_PAINT 消息,至少要调用缺省的窗口处理函数 DefWindowProc ,或者调用 ValidateRect 让“无效区”有效。否则您的应用程序将会收到无穷无尽的 WM_PAINT 消息。
hInst,NULL
mov hwnd,eax
invoke ShowWindow, hwnd,SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
当应用程序需要绘制时,您必须得到一个“设备环境”的句柄。通常有几种方法。
在 WM_PAINT 消息中使用 call BeginPaint
在其他消息中使用 call GetDC
call CreateDC 建立你自己的 DC
您必须牢记的是,在处理单个消息后你必须释放“设备环境”句柄。不要在一个消息处理中获得 “设备环境”句柄,而在另一个消息处理中在释放它。