燕山大学-windows-程序设计-实验报告(共16页).docx

上传人:飞****2 文档编号:13456961 上传时间:2022-04-29 格式:DOCX 页数:16 大小:157.62KB
返回 下载 相关 举报
燕山大学-windows-程序设计-实验报告(共16页).docx_第1页
第1页 / 共16页
燕山大学-windows-程序设计-实验报告(共16页).docx_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《燕山大学-windows-程序设计-实验报告(共16页).docx》由会员分享,可在线阅读,更多相关《燕山大学-windows-程序设计-实验报告(共16页).docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上Windows 程序设计基于Windows API的简单绘图软件 目录2555561 .概述1.1工程简介及窗口框架 项目中一共建立了四个窗口,其中类名为szWindowClass的窗口是父窗口,工作区窗口(szWorkClass)、工具栏(szToolbarClass)以及调色板(szColorbarClass)是子窗口。工作区窗口主要实现基本的绘图功能,工具栏和调色板分别实现绘图工具和颜色的选择功能。另外,为了方便消息的传递,将工作区窗口的句柄hWorkWnd设为全局变量。 项目中MyDrawProj.cpp文件实现主窗口框架的产生及消息处理,function.h

2、和function.cpp实现基本图形的绘制功能,toolbar.h和 toolbar.cpp完成工具栏的产生和消息处理,color.h 和color.cpp实现调色板功能和消息处理。最后file.h和file.cpp完成图像的保存和打开功能主界面截图:1.2 GDI(Graphic Device Interface)绘图概述图形设备接口(GDI)处理来自windows应用程序的图形函数调用,然后把这些调用传递给合适的设备驱动程序,由设备驱动程序来执行与硬件相关的函数,并产生最后的输出结果。设备描述表(DC)是一种windows数据结构,它包含了与一个设备(如显示器)的绘制属性的相关信息。所有

3、的绘制操作通过一个设备上下文对象进行,该对象封装了实现绘制线条,矩形,椭圆等图形windows API函数。设备上下文可以用来向屏幕,打印机和图元件输入结果。1.3 实现绘图的基本原理实验中通过对API函数的调用实现基本图形的绘制,由于窗口大小发生改变或者客户区无效时发生重绘,故采用双缓冲技术绘图,即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样在保持绘图的同时还可以避免闪烁。工具栏和调色板的选择可通过SendMessage函数将用户的选择传到工作区窗口处理,从而画出不同颜色的不同图形。通过对添加bmp文件头将画布保存为

4、bmp图像实现文件的保存功能,通过把打开的bmp图像拷贝到当前工作区实现打开功能,使用OPENFILENAME结构弹出打开和保存对话框。使用一个比当前工作区大以及背景颜色一样的矩形填充当前工作区,实现对图像的清除功能。1.4相关的基本数据类型和函数1.显示窗口的步骤1.注册窗口类typedef struct WNDCLASSEX UINT cbSize; /结构的大小UINT style; /窗口风格WNDPROC lpfnWndProc; /窗口函数指针,指向消息处理函数int cbClsExtra; int cbWndExtra;HINSTANCE hInstance; /实例句柄HICO

5、N hIcon; /图标HCURSOR hCursor; /光标HBRUSH hbrBackground; /背景画刷LPCTSTR lpszMenuName; /菜单LPCTSTR lpszClassName; /窗口类名称HICON hIconSm; /窗口图标 WNDCLASSEX, *PWNDCLASSEX;2.创建窗口HWND CreateWindow(LPCTSTR lpClassName, /窗口类名LPCTSTR lpWindowName, /窗口标题DWORD dwStyle, /指定创建窗口的风格int x, /指定窗口的初始水平位置int y, /指定窗口的初始垂直位置i

6、nt nWidth,/窗口的宽度int nHeight, /窗口的高度HWND hWndParent, /窗口的父窗口HMENU hMenu, /菜单HANDLE hlnstance,/与窗口相关联的模块实例的句柄LPVOID lpParam);3.显示窗口ShowWindow(HWND hWnd, int nCmdShow);hWnd指窗口句柄,nCmdShow指定窗口如何显示,可取SW_HIDE、SW_SHOW等。4.更新客户区UpdateWindow(HWND hWnd);5.进入消息循环WM_CREATE、WM_PAINT、WM_SIZE等消息的处理2.菜单、图标和位图 菜单 Load

7、Menu(HINSTANCE hlnstance,LPCTSTR lpMenuName)图标 LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName)位图 LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int cyDesired,UINT fuLoad)3. 简单.直线MoveToEx(HDC hdc,int x,int y, LPPOINTlpPoint);LineTo(HDC hdc,int x,int y);2.矩形Rectangle(HDC hdc,int

8、nLeftRect,int nTopRect, int nRightRect, int nBottomRect)3.椭圆Ellipse(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)2.工作区窗口2.1. hWorkWnd窗口的产生 (1)在主窗口的WM_CREATE中初始化窗口 hWorkWnd=CreateWindowEx(WS_EX_TRANSPARENT, szWorkClass, NULL,WS_CHILD ,0, 0, 0,0,hWnd,NULL, hInst, NULL);if(!hWo

9、rkWnd)MessageBox(hWnd,_T(创建工作区?失败),NULL,NULL);ShowWindow(hWorkWnd,SW_SHOW);(2)在主窗口WM_SIZE中添加代码使工作区窗口占满客户区SetWindowPos(hWorkWnd,NULL,2,2,LOWORD(lParam)-2*2,HIWORD(lParam)-2*2,SWP_NOACTIVATE | SWP_NOZORDER); SetFocus(hWorkWnd);2.2结构体定义typedef struct tagDRAWSTRUbool bDrawing; /工作区是否在绘图的标志POINT PtStart;

10、 /起点POINT PtEnd; /终点POINT PtPrev; /前一个点HPEN hpen; /当前选中的画笔HPEN hOldPen; /返回的画笔DWORD Color; /当前选中的颜色DRAWSTRU ,*PDRAWSTRU;2.3 function文件中函数定义/定义函数指针类型 typedef void (*PDRAWFUN) (PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);/绘制直线void LineMouseUp(PDRAWSTRU pDrawStruc,H

11、WND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void LineMouseMove(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void LineMouseDown(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);/绘制矩形void RectMouseDown(PDRAWSTRU pDrawSt

12、ruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void RectMouseMove(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void RectMouseUp(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);/绘制椭圆void CircleMouseDown(PDRAWSTRU pD

13、rawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void CircleMouseMove(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void CircleMouseUp(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);/绘制线条void CurveMouseDown(PDRA

14、WSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void CurveMouseMove(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void CurveMouseUp(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);/画刷void BrushMouseDown(

15、PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void BrushMouseMove(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);void BrushMouseUp(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam);2.4 图形的绘制(1)基本原理鼠标按

16、下时,即产生WM_LBUTTONDOWN消息时记录鼠标按下点的坐标,鼠标移动产生WM_MOUSEMOVE时进行相应绘制,为实现橡皮筋效果需要改变绘图模式,将上一次所画图像用背景色擦掉。鼠标弹起产生WM_LBUTTONUP消息,记录相应坐标绘制图形。 另外,处在屏幕绘图外,还要在Windows内存DC中实现相同操作以保持绘图。(2)主要代码(以绘制矩形)1.鼠标按下操作void RectMouseDown(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam)pDrawStruc-bDraw

17、ing=TRUE;pDrawStruc-PtStart.x=LOWORD(lParam);pDrawStruc-PtStart.y=HIWORD(lParam);pDrawStruc-PtEnd=pDrawStruc-PtStart;2.鼠标移动void RectMouseMove(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam)HDC phdc; phdc=GetDC(hWnd); /屏幕DCpDrawStruc-hpen=CreatePen(PS_SOLID ,0,pDrawSt

18、ruc-Color );/创建画笔pDrawStruc-hOldPen=(HPEN)SelectObject(hdc,pDrawStruc-hpen);/选入设备上下文SelectObject(phdc,pDrawStruc-hpen);if(pDrawStruc-bDrawing)/当前正在绘图SetCapture(hWnd);/捕获鼠标SetROP2(hdc,R2_NOTXORPEN);/改变绘图SelectObject(hdc,GetStockObject(NULL_BRUSH);SetROP2(phdc,R2_NOTXORPEN);SelectObject(phdc,GetStockO

19、bject(NULL_BRUSH);/擦掉鼠标上次移动绘制的图形ectangle(hdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);Rectangle(phdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);/获得新的点pDrawStruc-PtEnd.x=LOWORD(lParam);pDrawStruc-PtEnd.y=HIWORD(lParam); /绘制

20、新的图形 Rectangle(hdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);Rectangle(phdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);SelectObject (hdc , pDrawStruc-hOldPen);SelectObject (phdc , pDrawStruc-hOldPen);DeleteObject (pDrawStru

21、c-hpen);ReleaseDC(hWnd,phdc); /释放DC3.鼠标弹起void RectMouseUp(PDRAWSTRU pDrawStruc,HWND hWnd,HDC hdc,UINT Message,WPARAM wParam,LPARAM lParam) HDC phdc;phdc=GetDC(hWnd); /获得屏幕DC/创建画笔并选入pDrawStruc-hpen=CreatePen(PS_SOLID ,0,pDrawStruc-Color );pDrawStruc-hOldPen=(HPEN)SelectObject(hdc,pDrawStruc-hpen);Sel

22、ectObject(phdc,pDrawStruc-hpen);/改变绘图模式SetROP2(hdc,R2_COPYPEN);SelectObject(hdc,GetStockObject(NULL_BRUSH);SetROP2(phdc,R2_COPYPEN);SelectObject(phdc,GetStockObject(NULL_BRUSH);Rectangle(hdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);Rectangle(phdc,pDrawStruc-Pt

23、Start.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);/绘制新的图形pDrawStruc-PtEnd.x=LOWORD(lParam);pDrawStruc-PtEnd.y=HIWORD(lParam);Rectangle(hdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDrawStruc-PtEnd.x,pDrawStruc-PtEnd.y);Rectangle(phdc,pDrawStruc-PtStart.x,pDrawStruc-PtStart.y,pDraw

24、Struc-PtEnd.x,pDrawStruc-PtEnd.y);pDrawStruc-bDrawing=false;/鼠标弹起停止绘图SelectObject (hdc , pDrawStruc-hOldPen);SelectObject (phdc , pDrawStruc-hOldPen);DeleteObject (pDrawStruc-hpen);/释放DC和捕获ReleaseCapture();ReleaseDC(hWnd,phdc);注:由于绘制直线和矩形与之相似,不再赘述,绘制连续线条时,只需保存前一个点然后再画便可实现连续效果,另外由于还得再内存画图,故需要在hdc和phd

25、c上执行相同的绘图操作。3.工具条的实现3.1资源编辑 工具栏的每一个图标都对应两个位图,鼠标按下和弹起对应不同的位图从而实现按钮效果,资源列表如下#define IDB_BRUSHDOWN 140#define IDB_CIRCLEDOWN 141#define IDB_LINEDOWN 142#define IDB_PENDOWN 143#define IDB_RECTDOWN 144#define IDB_BRUSHUP 145#define IDB_CIRCLEUP 146#define IDB_LINEUP 147#define IDB_PEN_UP 148#define IDB_R

26、ECTUP 1493.2.工具栏窗口的产生 void CreateStandardToolbar(HWND hParent,HINSTANCE hInst)if(!RegistToolbar(hInst) return;HWND hWnd=CreateWindow(szToolbarClass,_T(工具栏),WS_POPUP | WS_CLIPSIBLINGS | WS_CAPTION | WS_SYSMENU ,600, 100, 155, 55,hParent,NULL, hInst, NULL);ShowWindow(hWnd,SW_SHOW);在主窗口的WM_CREATE消息中调用以

27、上函数产生工具栏窗口3.3工具栏按钮效果的实现(1)基本原理初始化时将所有弹起时的位图选入设备描述句柄,并拷贝到窗口对应的矩形区域,当鼠标按下时,在指定位置拷贝新的位图将原位图覆盖即可实现按钮效果(2)结构体和数组BUTTON Buttons = IDB_PENDOWN,IDB_PEN_UP,IDB_LINEDOWN,IDB_LINEUP,IDB_BRUSHDOWN,IDB_BRUSHUP,IDB_CIRCLEDOWN,IDB_CIRCLEUP, IDB_RECTDOWN,IDB_RECTUP; /定义一个Button数组保存按钮位图的IDtypedef struct tagBUTTON IN

28、T DownID; /鼠标按下的位图 INT UpID; /鼠标弹起的位图BUTTON,*PBUTTON;(3)实现的部分代码case WM_PAINT:hdc = BeginPaint(hWnd, &ps);HDC hdcMem;hdcMem=CreateCompatibleDC(hdc);/创建内存兼容DCHBITMAP hbmp,hbmpOld; for(int i=0;i5;i+)if(Statei)hbmpOld=(HBITMAP)SelectObject(hdcMem,LoadBitmap(hInst,MAKEINTRESOURCE(Buttonsi.DownID);BitBlt(

29、hdc,30*i,0,32,32,hdcMem,0,0,SRCCOPY);hbmp=(HBITMAP)SelectObject(hdcMem,hbmpOld);DeleteObject(hbmp);elsehbmpOld=(HBITMAP)SelectObject(hdcMem,LoadBitmap(hInst,MAKEINTRESOURCE(Buttonsi.UpID);BitBlt(hdc,30*i,0,32,32,hdcMem,0,0,SRCCOPY);hbmp=(HBITMAP)SelectObject(hdcMem,hbmpOld);DeleteObject(hbmp);EndPai

30、nt(hWnd, &ps);break;注: 将代码放入WM_PAINT消息中,每当有鼠标在按钮位置按下时,指定窗口无效进行重绘,实现动态显示。 State数组标识按钮的状态,Statei=true表示鼠标按下,Statei=false表示鼠标弹起,从而根据State状态选入响应的位图。3.4消息传递(1)实现原理 由鼠标按下的点的位置计算出对应的按钮索引,自定义TOOL_CHANGE消息采用SendMessage将消息和整型的索引值传递给hWorkWnd窗口,由工作区窗口响应做出响应的绘图处理。(2)部分代码case WM_LBUTTONDOWN: index=LOWORD(lParam)/

31、32; for(int i=0;i5;i+) if(i=index) Statei=true; else Statei=false;SendMessage(hWorkWnd,TOOL_CHANGE,index,lParam);InvalidateRect(hWnd,NULL,TRUE);break;工作区窗口的处理:case TOOL_CHANGE: switch(int(wParam) case 0: /连续线条 Down=CurveMouseDown; Move=CurveMouseMove; Up=CurveMouseUp; break; case 1: /画直线Down=LineMou

32、seDown;Move=LineMouseMove;Up=LineMouseUp;break; case 2: /刷子 Down=BrushMouseDown; Move=BrushMouseMove; Up=BrushMouseUp; break; case 3: /画椭圆 Down=CircleMouseDown; Move=CircleMouseMove; Up=CircleMouseUp; break;4.调色板的实现4.1窗口的产生(1)注册调色板窗口类,然后在主窗口的WM_CREATE消息中调用以下函数产生调色板窗口。void CreateColorbar(HWND hParent

33、,HINSTANCE hInst) if(!RegistColorbar(hInst) MessageBox(hParent,_T(注册颜色条失败),NULL,NULL); HWND hWnd=CreateWindow(szColorbarClass, _T(颜色板), WS_BORDER |WS_CAPTION|WS_SYSMENU ,200, 100, 250, 105,hParent,NULL, hInst, NULL);if(!hWnd)MessageBox(hParent,_T(创建颜色条失败),NULL,NULL);ShowWindow(hWnd,SW_SHOW);(2)截图4.2

34、调色功能实现(1)创建颜色数组DWORD Colors= RGB(0,0,0), RGB(0,255,0), RGB(0,0,255), RGB(0,255,255), RGB(255,0,0),RGB(255,0,255),RGB(255,255,0),RGB(255,192,192);(2)实现原理 初始化时,在指定位置绘制不用颜色的矩形,即为颜色板。鼠标单击响应颜色时,由鼠标位置计算出对应颜色数组里的颜色值,把相应颜色选入设备描述表,并且在右侧指定位置画出相应颜色的矩形。(3)部分代码case WM_LBUTTONDOWN:x=LOWORD(lParam);y=HIWORD(lParam

35、);if(x/404&y/402) /在有颜色的区域内处理 index=x/40+y/40*4;/把用户选择的颜色交给工作区窗口处理SendMessage(hWorkWnd,COLOR_CHANGE,index,lParam); HBRUSH hbr1;HBRUSH hbrOld1;hdc=GetDC(hWnd);hbr1 = CreateSolidBrush(Colorsindex);hbrOld1 =(HBRUSH)SelectObject(hdc, hbr1); /右侧绘制相应颜色的矩形Rectangle(hdc, 175, 10, 235, 70);SelectObject(hdc,

36、hbrOld1);DeleteObject(hbr1);ReleaseDC(hWnd,hdc);else break;break;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);HBRUSH hbr;HBRUSH hbrOld; /绘制不同颜色的矩形for(int i=0;i8;i+)hbr = CreateSolidBrush(Colorsi);hbrOld =(HBRUSH)SelectObject(hdc, hbr);Rectangle(hdc, i%4*40, i/4*40, i%4*40+40, i/4*40+40);if(i=0) Rectang

37、le(hdc, 175, 10, 235, 70);SelectObject(hdc, hbrOld);DeleteObject(hbr);EndPaint(hWnd, &ps);break;4.3消息处理 Color数组设置为全局变量,自定义消息COLOR_CHANGE,工作区窗口收到消息后,在DRAWSTRU数组中改变相应的颜色进行绘图case COLOR_CHANGE:DrawStru.Color=Colors(int)wParam;break;5.保存与打开功能的实现5.1保存与打开窗口(1)实现方式 使用OPENFILENAME结构,GetOpenFileName和GetSaveFi

38、leName函数用来初始化打开或保存对话框的信息,获得打开和保存路径,做出相应处理(2)截图(3)部分代码OPENFILENAME sfn;TCHAR szSaveFileMAX_PATH;ZeroMemory(&sfn,sizeof(sfn); /初始化置0sfn.lStructSize = sizeof(sfn);sfn.lpstrFile = szSaveFile;sfn.lpstrFile0 = TEXT(0);sfn.nMaxFile = sizeof(szSaveFile);sfn.lpstrFilter = TEXT(*.bmp0); /定义选项sfn.nFilterIndex

39、= 1; /首选项sfn.lpstrFileTitle = NULL;sfn.nMaxFileTitle = 0;sfn.lpstrInitialDir = NULL;sfn.lpstrDefExt=_T(bmp); /默认后缀名sfn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;5.2保存功能(1)实现原理概述 创建bmp文件头和信息头,把内存兼容位图写入文件(2)功能及部分代码CreateBitmapInfoStruct()创建bmp文件头的功能,SaveHBITMAP2File()函数将一个HITBMP保存到指定

40、路径的文件。自定义消息Save,主窗口在收到菜单中的相应时,用SendMessage将Save消息传递给工作区窗口进行保存处理。部分代码:hdc=GetDC(hWorkWnd);if(GetSaveFileName(&sfn) SaveHBITMAP2File(hwnd,szSaveFile,hBMP,hDC);return true;ReleaseDC(hWorkWnd,hdc);5.3打开功能(1)实现原理概述 创建内存兼容DC和兼容位图,用LoadImage函数将指定路径的bmp图像选入内存,然后用BitBlt函数拷贝到当前屏幕(2)功能及部分代码自定义消息Open,主窗口在收到菜单中的

41、响应时,用SendMessage将Open消息传递给工作区窗口进行保存处理。内存加载位图后指定客户区无效发生重绘,从而显示要打开的图像。部分代码:case Open: Image=(HBITMAP)LoadImage(NULL,getOpenFileName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);SelectObject(bufDC,Image);InvalidateRect(hWnd,NULL,false); 6.总结通过本次的Windows 程序设计,我收获了很多。首先,更加深刻的了解了消息处理机制,理解了消息队列和消息循环的相关知识,由以前的直接在MFC

42、框架上增加代码到可以自己写窗口函数,同时也加深了对窗口过程的了解,能够熟练的对各种窗口消息的处理和响应。双缓冲绘图技术是这次设计的核心,通过练习,我能够很熟练的掌握在Windows 内存中绘图的过程,熟练的对DC、内存DC、位图以及BitBlt函数进行运用,进而扩展利用它实现对图片的保存功能。在窗口的设计上,图标,光标,菜单等资源的加载在MFC中要复杂一些,通过对API函数的学习,我能够熟练的加载这些资源。另外,在调试技术上我也学到了很多,对窗口过程的学习让我能够准确定位程序出现错误的地方,进而采取相应的调试手段。这次的简单的设计让我学到了很多,同时也认识到了自己的不足,我会进一步努力学习更多的Windows API知识,努力做出优秀的作品。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁