




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
windows程序设计实验报告模板 副本 一、实验目的 一、实验目的掌握用C/C+语言采用API在Windows平台下编写软件的方法,熟悉消息驱动的本质;熟悉Windows平台基本控件的本质、熟悉动态链接库的使用,加深对课堂知识的掌握。 二、实验内容仿照Windows操作系统附件的绘图软件设计一个绘图程序,依次为程序增加绘图函数、菜单选择、工具选择、颜色选择、文件操作等功能,可以在此基础上进行扩充,最终完成一个相对完整的绘图程序。 三、功能分析1.实现曲线,直线,矩形,椭圆图形的绘制;2.实现图形线条宽度,颜色的改变以及矩形和椭圆的填充;3.对绘制图形的保存以及,对以保存的文件的打开和另存;4.清屏功能。 四、窗口窗口类对应的处理函数szWindowClass(主窗口)WndProc()szDrawWndClass(工作区窗口)WndDrawProc()szColorBoxClass(颜色选择窗口)ColorBoxProc()szToolBtnClass(工具选择窗口)ToolBtWndProc()szToolboxClass(工具栏窗口)ToolboxWndProc()Windows程序设计实验报告3 五、模块分解根据程序运行时的操作来划分,本程序可大致分为三大功能模块,分别为调色板,工具箱,工作区绘图,如下1调色板模块本模块用来提供绘图时的颜色的选择,并将改变后的颜色显示在调色板颜色示例的矩形区域中。 2工具箱模块本模块用来提供绘图时工具的选择,当选择了某一工具后,该工具按钮是选中状态,其他按钮是凸起状态。 3工作区绘图模块本模块用来提供鼠标完成各种图形的绘制的区域。 2.主窗口 一、菜单的创建case WM_MAND:wmId=LOWORD(wParam);wmEvent=HIWORD(wParam);/Parse themenu selections:switch(wmId)case IDM_ABOUT:DialogBox(hInst,(LPCTSTR)IDD_ABOUTBOX,hWnd,(DLGPROC)About);break;case IDM_EDIT_PENWIDTH:/把线的宽度传到对话框里if(DialogBoxParam(hInst,(LPCTSTR)IDD_DLG_PENWIDTH,hWnd,(DLGPROC)DlgPenWidth,(LPARAM)&iPenWidth)=IDOK)SendMessage(hWndDraw,WM_CHANGEPENWIDTH,(WPARAM)0,(LPARAM)iPenWidth);break;case IDM_VIEW_COLOR:/如果颜色被选中则显示,如果不被选中则不显示if(IsWindowVisible(hWndColor)Windows程序设计实验报告4ShowWindow(hWndColor,SW_HIDE);CheckMenuItem(hMenu,IDM_VIEW_COLOR,MF_BYMAND|MF_UNCHECKED);elseShowWindow(hWndColor,SW_SHOWNORMAL);CheckMenuItem(hMenu,IDM_VIEW_COLOR,MF_BYMAND|MF_CHECKED);break;case IDM_VIEW_TOOLS:/如果工具被选中则显示,如果不被选中则不显示if(IsWindowVisible(Tb.hwndToolbox)ShowWindow(Tb.hwndToolbox,SW_HIDE);CheckMenuItem(hMenu,IDM_VIEW_TOOLS,MF_BYMAND|MF_UNCHECKED);elseShowWindow(Tb.hwndToolbox,SW_SHOWNORMAL);CheckMenuItem(hMenu,IDM_VIEW_TOOLS,MF_BYMAND|MF_CHECKED);break;case IDM_FILE_NEW:/新建SendMessage(hWndDraw,message,wParam,lParam);break;case IDM_FILE_OPEN:/打开SendMessage(hWndDraw,message,wParam,lParam);break;case IDM_FILE_SAVE:/保存SendMessage(hWndDraw,message,wParam,lParam);break;case IDM_FILE_SAVEAS:/另存为SendMessage(hWndDraw,message,wParam,lParam);break;Windows程序设计实验报告5case IDM_EDIT_CLEAR:/清空/MessageBox(hWnd,TEXT(INMain),TEXT(Msg),MB_OK);SendMessage(hWndDraw,message,wParam,lParam);break;case IDM_EXIT:SendMessage(hWnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);break;default:return DefWindowProc(hWnd,message,wParam,lParam);break; 二、子窗口创建1.case WM_CREATE:hWndDraw=CreateDrawWindod(hWnd,(LPCREATESTRUCT)(lParam)-hInstance,2);hWndColor=CreateColorSelectDlg(NULL,(WS_CHILD|WS_VISIBLE),hWnd,NULL,hWndDraw);InitToolBox(&Tb,(LPCREATESTRUCT)(lParam)-hInstance,hWnd,hWndDraw);hMenu=GetMenu(hWnd);break;2.HWND CreateDrawWindod(HWND hWndParent,HINSTANCE hInstance,UINT controlId)return CreateWindow(szDrawWndClass,NULL,WS_CHILD|WS_BORDER|WS_VISIBLE,0,0,0,0,hWndParent,(HMENU)controlId,hInstance,NULL);3.HWND CreateColorSelectDlg(LPCTSTR lpWindowName,DWORD dwStyle,HWND hWndParent,HINSTANCE hInstance,HWND hWndSendTo)return CreateWindow(szColorBoxClass,lpWindowName,dwStyle,0,0,0,0,hWndParent,NULL,hInstance,(LPVOID)hWndSendTo);Windows程序设计实验报告6 三、画笔宽度对话框LRESULT CALLBACKDlgPenWidth(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)HWND hWndSpin;INT wmId;static INT*piPenWidth;switch(message)case WM_INITDIALOG:piPenWidth=(INT*)(lParam);hWndSpin=GetDlgItem(hDlg,IDC_SPIN_PENWIDTH);SetDlgItemInt(hDlg,IDC_PENWIDTH,*piPenWidth,FALSE);SendMessage(hWndSpin,UDM_SETRANGE,(WPARAM)0,(LPARAM)MAKELONG(10,1);return TRUE;case WM_MAND:BOOL bSuessed;wmId=LOWORD(wParam);switch(wmId)case IDOK:*piPenWidth=GetDlgItemInt(hDlg,IDC_PENWIDTH,&bSuessed,FALSE);EndDialog(hDlg,LOWORD(wParam);break;case IDCANCEL:EndDialog(hDlg,LOWORD(wParam);break;return TRUE;break;return FALSE;Windows程序设计实验报告7 四、主要代码LRESULT CALLBACKWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)int wmId,wmEvent;PAINTSTRUCT ps;HDC hdc;static HWND hWndColor,hWndDraw;static DRAWSTRUds;static TOOLBOXTb;static HMENUhMenu;static INT iPenWidth=2;switch(message)case WM_MAND:wmId=LOWORD(wParam);wmEvent=HIWORD(wParam);/Parse themenu selections:switch(wmId)case IDM_ABOUT:DialogBox(hInst,(LPCTSTR)IDD_ABOUTBOX,hWnd,(DLGPROC)About);break;case IDM_EDIT_PENWIDTH:/把线的宽度传到对话框里if(DialogBoxParam(hInst,(LPCTSTR)IDD_DLG_PENWIDTH,hWnd,(DLGPROC)DlgPenWidth,(LPARAM)&iPenWidth)=IDOK)SendMessage(hWndDraw,WM_CHANGEPENWIDTH,(WPARAM)0,(LPARAM)iPenWidth);break;case IDM_VIEW_COLOR:/如果颜色被选中则显示,如果不被选中则不显示if(IsWindowVisible(hWndColor)ShowWindow(hWndColor,SW_HIDE);Windows程序设计实验报告8CheckMenuItem(hMenu,IDM_VIEW_COLOR,MF_BYMAND|MF_UNCHECKED);elseShowWindow(hWndColor,SW_SHOWNORMAL);CheckMenuItem(hMenu,IDM_VIEW_COLOR,MF_BYMAND|MF_CHECKED);break;case IDM_VIEW_TOOLS:/如果工具被选中则显示,如果不被选中则不显示if(IsWindowVisible(Tb.hwndToolbox)ShowWindow(Tb.hwndToolbox,SW_HIDE);CheckMenuItem(hMenu,IDM_VIEW_TOOLS,MF_BYMAND|MF_UNCHECKED);elseShowWindow(Tb.hwndToolbox,SW_SHOWNORMAL);CheckMenuItem(hMenu,IDM_VIEW_TOOLS,MF_BYMAND|MF_CHECKED);break;case IDM_FILE_NEW:/新建SendMessage(hWndDraw,message,wParam,lParam);break;case IDM_FILE_OPEN:/打开SendMessage(hWndDraw,message,wParam,lParam);break;case IDM_FILE_SAVE:/保存SendMessage(hWndDraw,message,wParam,lParam);break;case IDM_FILE_SAVEAS:/另存为SendMessage(hWndDraw,message,wParam,lParam);break;case IDM_EDIT_CLEAR:/清空/MessageBox(hWnd,TEXT(INMain),TEXT(Msg),MB_OK);SendMessage(hWndDraw,message,wParam,lParam);Windows程序设计实验报告9break;case IDM_EXIT:SendMessage(hWnd,WM_CLOSE,(WPARAM)0,(LPARAM)0);break;default:return DefWindowProc(hWnd,message,wParam,lParam);break;case TOOLHIDE:CheckMenuItem(hMenu,IDM_VIEW_TOOLS,MF_BYMAND|MF_UNCHECKED);break;case WM_HIDECOLORBOX:CheckMenuItem(hMenu,IDM_VIEW_COLOR,MF_BYMAND|MF_UNCHECKED);break;case WM_SIZE:if(GetWindowLong(hWndColor,GWL_STYLE)&WS_CHILD)RECT rt;GetWindowRect(hWndColor,&rt);ScreenToClient(hWnd,(LPPOINT)&rt);ScreenToClient(hWnd,(LPPOINT)&rt+1);MoveWindow(hWndDraw,0,rt.bottom,LOWORD(lParam),HIWORD(lParam)-rt.bottom,TRUE);else MoveWindow(hWndDraw,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);break;case WM_PAINT:hdc=BeginPaint(hWnd,&ps);RECT rt;GetClientRect(hWnd,&rt);EndPaint(hWnd,&ps);break;case WM_CLOSE:if(MessageBox(hWnd,TEXT(确定退出吗?),TEXT(提示信息Windows程序设计实验报告10),MB_YESNO)=IDYES)DestroyWindow(hWnd);break;case WM_CREATE:hWndDraw=CreateDrawWindod(hWnd,(LPCREATESTRUCT)(lParam)-hInstance,2);hWndColor=CreateColorSelectDlg(NULL,(WS_CHILD|WS_VISIBLE),hWnd,NULL,hWndDraw);/hWndColor=CreateColorSelectDlg(TEXT(调色板),(WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_VISIBLE),hWnd,NULL,hWndDraw);InitToolBox(&Tb,(LPCREATESTRUCT)(lParam)-hInstance,hWnd,hWndDraw);hMenu=GetMenu(hWnd);break;case WM_DESTROY:PostQuitMessage (0);break;default:return DefWindowProc(hWnd,message,wParam,lParam);return0;3.工作区窗口 一、结构体定义typedef structtagDrawStruPOINT ptStart,ptEnd,ptPrev;COLORREF color;BOOL bMouseDown;HPEN hPen;HBRUSH hBr;Windows程序设计实验报告11BOOL bFill;INT iPenWidth;PDRAWFUN pMouseDown,pMouseMove,pMouseUp;GRAPHICS g;PDRAWSHAPE pCurShp;DRAWSTRU,*PDRAWSTRU; 二、绘图函数(drawfun.cpp)注矩形,椭圆,曲线与直线实现相似,以下就直展开了直线1.鼠标落下VOID LineMouseDown(PVOID pV,HWND hWnd,WPARAM wParam,LPARAM lParam)/直线PDRAWSTRU pDs;pDs=(PDRAWSTRU)pV;pDs-ptStart.x=GET_X_LPARAM(lParam);pDs-ptStart.y=GET_Y_LPARAM(lParam);pDs-ptEnd.x=pDs-ptStart.x;pDs-ptEnd.y=pDs-ptStart.y;pDs-bMouseDown=TRUE;/-新建DRAWSHAPE对象以存储线条的信息PDRAWLINE pLine;PDRAWSHAPE pShp;pShp=new DRAWSHAPE;pDs-pCurShp=pShp;pShp-color=pDs-color;pShp-shape=SHAPELINE;pShp-penWidth=pDs-iPenWidth;pLine=new DRAWLINE;pShp-pData=pLine;pLine-ptStart=pDs-ptStart;pLine-ptEnd=pDs-ptEnd;/-新建DRAWSHAPE对象以存储线条的信息SetCapture(hWnd);VOID RectMouseDown(PVOID pV,HWND hWnd,WPARAM wParam,LPARAM lParam);/矩形VOID EllipseMouseDown(PVOID pV,HWND hWnd,WPARAM wParam,LPARAM lParam);/椭圆Windows程序设计实验报告12VOID PenMouseDown(PVOID pV,HWND hWnd,WPARAM wParam,LPARAM lParam);/曲线2.鼠标弹起VOID LineMouseUp(PVOID pV,HWND hWnd,WPARAM wParam,LPARAM lParam)PDRAWSTRU pDs;pDs=(PDRAWSTRU)pV;HDC hdc;pDs-bMouseDown=FALSE;ReleaseCapture();hdc=GetDC(hWnd);SetROP2(hdc,R2_NOT);MoveToEx(hdc,pDs-ptStart.x,pDs-ptStart.y,NULL);LineTo(hdc,pDs-ptEnd.x,pDs-ptEnd.y);pDs-ptEnd.x=GET_X_LPARAM(lParam);pDs-ptEnd.y=GET_Y_LPARAM(lParam);SetROP2(hdc,R2_COPYPEN);HPEN hPenOld=(HPEN)SelectObject(hdc,pDs-hPen);/增加的画笔选择代码MoveToEx(hdc,pDs-ptStart.x,pDs-ptStart.y,NULL);LineTo(hdc,pDs-ptEnd.x,pDs-ptEnd.y);SelectObject(hdc,hPenOld);/增加的选出画笔的代码ReleaseDC(hWnd,hdc);/-取得DRAWSHAPE对象以存储线条的信息PDRAWLINE pLine;PDRAWSHAPE pShp;pShp=pDs-pCurShp;pLine=(PDRAWLINE)pShp-pData;if(pDs-ptStart.x=pDs-ptEnd.x)&(pDs-ptEnd.y=pDs-ptStart.y)/如果起点与终点相同则删除线段delete pLine;delete pShp;pDs-pCurShp=NULL;else/存储线段pLine-ptEnd=pDs-ptEnd;pDs-g.AddTail(pShp);pDs-pCurShp=NULL;Windows程序设计实验报告13/-将新建DRAWSHAPE对象添加到g中VOID RectMouseUp(PVOID pV,HWND hWnd,WPARAM wParam,LPARAM lParam);VOID EllipseMouseUp(PVOID pDs,HWND hWnd,WPARAM wParam,LPARAM lParam);VOID PenMouseUp(PVOID pDs,HWND hWnd,WPARAM wParam,LPARAM lParam);3.鼠标移动VOID LineMouseMove(PVOID pV,HWND hWnd,WPARAM wParam,LPARAM lParam)PDRAWSTRU pDs;pDs=(PDRAWSTRU)pV;HDC hdc;if(pDs-bMouseDown)hdc=GetDC(hWnd);SetROP2(hdc,R2_NOT);MoveToEx(hdc,pDs-ptStart.x,pDs-ptStart.y,NULL);LineTo(hdc,pDs-ptEnd.x,pDs-ptEnd.y);pDs-ptEnd.x=GET_X_LPARAM(lParam);pDs-ptEnd.y=GET_Y_LPARAM(lParam);MoveToEx(hdc,pDs-ptStart.x,pDs-ptStart.y,NULL);LineTo(hdc,pDs-ptEnd.x,pDs-ptEnd.y);ReleaseDC(hWnd,hdc);VOID RectMouseMove(PVOID pDs,HWND hWnd,WPARAM wParam,LPARAM lParam);VOID EllipseMouseMove(PVOID pDs,HWND hWnd,WPARAM wParam,LPARAM lParam);VOID PenMouseMove(PVOID pDs,HWND hWnd,WPARAM wParam,LPARAM lParam); 三、重绘1.drawfun.cpp VOIDDrawShape(HDC hdc,PDRAWSHAPE&pShp)HPEN hPen,hOldPen;HBRUSH hBr,hOldBr;Windows程序设计实验报告14PDRAWLINE pLine;PDRAWRECT pRect;PDRAWCURVE pCurve;hPen=CreatePen(PS_SOLID,pShp-penWidth,pShp-color);hBr=CreateSolidBrush(pShp-color);hOldPen=(HPEN)SelectObject(hdc,hPen);switch(pShp-shape)case SHAPELINE:pLine=(PDRAWLINE)(pShp-pData);MoveToEx(hdc,pLine-ptStart.x,pLine-ptStart.y,NULL);LineTo(hdc,pLine-ptEnd.x,pLine-ptEnd.y);break;case SHAPECIRCLE:pRect=(PDRAWRECT)(pShp-pData);if(pRect-bFill)hOldBr=(HBRUSH)SelectObject(hdc,hBr);elsehOldBr=(HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH);Ellipse(hdc,pRect-rect.left,pRect-rect.top,pRect-rect.right,pRect-rect.bottom);SelectObject(hdc,hOldBr);break;case SHAPERECT:pRect=(PDRAWRECT)(pShp-pData);if(pRect-bFill)hOldBr=(HBRUSH)SelectObject(hdc,hBr);elsehOldBr=(HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH);Windows程序设计实验报告15Rectangle(hdc,pRect-rect.left,pRect-rect.top,pRect-rect.right,pRect-rect.bottom);SelectObject(hdc,hOldBr);break;case SHAPECURVE:pCurve=(PDRAWCURVE)(pShp-pData);POSITION pos;POINT pt;pos=pCurve-GetHeadPosition();pt=pCurve-GetNext(pos);MoveToEx(hdc,pt.x,pt.y,NULL);while(pos)pt=pCurve-GetNext(pos);LineTo(hdc,pt.x,pt.y);SetPixel(hdc,pt.x,pt.y,pShp-color);break;SelectObject(hdc,hOldPen);VOID DrawGraphics(HDC hdc,GRAPHICS&g)POSITION pos;PDRAWSHAPE pShp;pos=g.GetHeadPosition();while(pos)pShp=g.GetNext(pos);DrawShape(hdc,pShp);Windows程序设计实验报告162.graphicfile.cpp VOIDSaveGraphic(LPCTSTR lpszFilename,GRAPHICS&g)INT iCount;SHORT iShape;SHAPE shape;POSITION pos;PDRAWSHAPE pShp;CFile File(lpszFilename,CFile:modeWrite|CFile:modeCreate);CArchive ar(&File,CArchive:store);PDRAWLINE pLine;PDRAWRECT pRect;PDRAWCURVE pCurve;iCount=g.GetCount();arshape;iShape=(SHORT)shape;arpenWidth;arpData;arptStart;arpData;arbFill;arpData;pCurve-Serialize(ar);break;VOID OpenGraphic(LPCTSTR lpszFilename,GRAPHICS&g)INT iCount,i;SHORT iShape;SHAPE shape;PDRAWSHAPE pShp;CFile File(lpszFilename,CFile:modeRead);CArchive ar(&File,CArchive:load);PDRAWLINE pLine;PDRAWRECT pRect;PDRAWCURVE pCurve;ariCount;/pos=g.GetHeadPosition();for(i=0;iiShape;shape=pShp-shape=(SHAPE)iShape;arpShp-penWidth;arpShp-color;switch(shape)case SHAPELINE:pShp-pData=pLine=new DRAWLINE;arpLine-ptStart;arpLine-ptEnd;break;case SHAPECIRCLE:Windows程序设计实验报告18case SHAPERECT:pShp-pData=pRect=new DRAWRECT;arpRect-bFill;arpRect-rect;break;case SHAPECURVE:pShp-pData=pCurve=new DRAWCURVE;pCurve-Serialize(ar);break;g.AddTail(pShp);VOID ClearGraphic(GRAPHICS&g)PDRAWSHAPE pShp;while(!(g.IsEmpty()pShp=g.RemoveHead();delete pShp; 四、文件打开与保存1.drawwnd.cpp case WM_MAND:wmId=LOWORD(wParam);wmEvent=HIWORD(wParam);/Parse themenu selections:switch(wmId)case IDM_FILE_NEW:_tcscpy(szFullFileName,TEXT();case IDM_EDIT_CLEAR:/MessageBox(hWnd,TEXT(INDraw),TEXT(Msg),MB_OK);Windows程序设计实验报告19ClearGraphic(ds.g);InvalidateRect(hWnd,NULL,TRUE);break;case IDM_FILE_OPEN:ClearGraphic(ds.g);if(!PopFileOpenDlg(hWnd,szFullFileName,szFileName)break;OpenGraphic(szFullFileName,ds.g);InvalidateRect(hWnd,NULL,TRUE);break;case IDM_FILE_SAVEAS:if(!PopFileSaveDlg(hWnd,szFullFileName,szFileName)break;SaveGraphic(szFullFileName,ds.g);break;case IDM_FILE_SAVE:if(_tcslen(szFullFileName)=0)if(!PopFileSaveDlg(hWnd,szFullFileName,szFileName)break;SaveGraphic(szFullFileName,ds.g);break;break;2.PopFile.cpp BOOLPopFileOpenDlg(HWND hwnd,PTSTR pstrFileName,PTSTR pstrTitleName)ofn.hwndOwner=hwnd;ofn.lpstrFile=pstrFileName;ofn.lpstrFileTitle=pstrTitleName;ofn.Flags=OFN_HIDEREADONLY|OFN_CREATEPROMPT;return GetOpenFileName(&ofn);Windows程序设计实验报告20BOOL PopFileSaveDlg(HWND hwnd,PTSTR pstrFileName,PTSTR pstrTitleName)ofn.hwndOwner=hwnd;ofn.lpstrFile=pstrFileName;ofn.lpstrFileTitle=pstrTitleName;ofn.Flags=OFN_OVERWRITEPROMPT;return GetSaveFileName(&ofn);3.Graphicfile.cpp3.Graphicfile.cpp 五、主要代码static TCHARszDrawWndClass=TEXT(DrawWndClass);LRESULT CALLBACKWndDrawProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)INT wmId,wmEvent;PAINTSTRUCT ps;HDC hdc;static DRAWSTRUds;static TCHARszFullFileName300,szFileName300;/static HMENUhMenu;PTOOLBOX pTb;switch(message)case WM_MAND:wmId=LOWORD(wParam);wmEvent=HIWORD(wParam);/Parse themenu selections:switch(wmId)case IDM_FILE_NEW:_tcscpy(szFullFileName,TEXT();case IDM_EDIT_CLEAR:/MessageBox(hWnd,TEXT(INDraw),TEXT(Msg),MB_OK);ClearGraphic(ds.g);InvalidateRect(hWnd,NULL,TRUE);Windows程序设计实验报告21break;case IDM_FILE_OPEN:ClearGraphic(ds.g);if(!PopFileOpenDlg(hWnd,szFullFileName,szFileName)break;OpenGraphic(szFullFileName,ds.g);InvalidateRect(hWnd,NULL,TRUE);break;case IDM_FILE_SAVEAS:if(!PopFileSaveDlg(hWnd,szFullFileName,szFileName)break;SaveGraphic(szFullFileName,ds.g);break;case IDM_FILE_SAVE:if(_tcslen(szFullFileName)=0)if(!PopFileSaveDlg(hWnd,szFullFileName,szFileName)break;SaveGraphic(szFullFileName,ds.g);break;break;case WM_CREATE:PopFileInitialize(hWnd);ds.hBr=CreateSolidBrush(RGB(255,0,0);ds.color=RGB(255,0,0);ds.iPenWidth=2;ds.hPen=CreatePen(PS_SOLID,ds.iPenWidth,RGB(255,0,0);ds.bMouseDown=FALSE;ds.pCurShp=NULL;break;case WM_PAINT:hdc=BeginPaint(hWnd,&ps);DrawGraphics(hdc,ds.g);EndPaint(hWnd,&ps);break;Windows程序设计实验报告22case WM_LBUTTONDOWN:(ds.pMouseDown)(&ds,hWnd,wParam,lParam);break;case WM_LBUTTONUP:(ds.pMouseUp)(&ds,hWnd,wParam,lParam);break;case WM_MOUSEMOVE:(ds.pMouseMove)(&ds,hWnd,wParam,lParam);break;case WM_TOOLCHANGE:pTb=(PTOOLBOX)wParam;/DrawStru.hCur=pTb-aToolspTb-icurTool.hcur;ds.bFill=pTb-bFill;ds.pMouseDown=pTb-pMouseDown;ds.pMouseMove=pTb-pMouseMove;ds.pMouseUp=pTb-pMouseUp;break;case WM_CHANGECOLOR:DeleteObject(ds.hBr);DeleteObject(ds.hPen);ds.color=(COLORREF)(lParam);ds.hBr=CreateSolidBrush(ds.color);ds.hPen=CreatePen(PS_SOLID,ds.iPenWidth,ds.color);break;case WM_CHANGEPENWIDTH:ds.iPenWidth=(INT)(lParam);DeleteObject(ds.hPen);ds.hPen=CreatePen(PS_SOLID,ds.iPenWidth,ds.color);break;case WM_DESTROY:DeleteObject(ds.hPen);DeleteObject(ds.hBr);break;default:return DefWindowProc(hWnd,message,wParam,lParam);return0;Windows程序设计实验报告23ATOM RegisterDrawWndClass(HINSTANCE hInstance)WNDCLASSEX wcex;wcex.cbSize=sizeof(WNDCLASSEX);wcex.style=CS_HREDRAW|CS_VREDRAW;wcex.cbClsExtra=0;wcex.cbWndExtra=0;wcex.hInstance=hInstance;wcex.hIcon=NULL;wcex.hCursor=LoadCursor(NULL,IDC_ARROW);wcex.lpszMenuName=NULL;wcex.hIconSm=NULL;/*注册工作区窗口*/wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);wcex.lpfnWndProc=(WNDPROC)WndDrawProc;wcex.lpszClassName=szDrawWndClass;if(!RegisterClassEx(&wcex)return FALSE;return TRUE;HWND CreateDrawWindod(HWND hWndParent,HINSTANCE hInstance,UINT controlId)return CreateWindow(szDrawWndClass,NULL,WS_CHILD|WS_BORDER|WS_VISIBLE,0,0,0,0,hWndParent,(HMENU)controlId,hInstance,NULL);4.颜色选择窗口 一、颜色选择窗口创建case WM_PAINT:hdc=BeginPaint(hWnd,&ps);x=xColorBoxStart;y=yColorBoxStart;Windows程序设计实验报告24for(i=1;i=0&nCol=0&nRow 三、主要代码#includestdafx.h#includecolorselectdlgs.hWindows程序设计实验报告25static TCHARszColorBoxClass=TEXT(ColorBoxClass);ATOM ColorSelectDlgRegisterClass(HINSTANCE hInstance)WNDCLASSEX wcex;wcex.cbSize=sizeof(WNDCLASSEX);wcex.style=CS_HREDRAW|CS_VREDRAW;wcex.cbClsExtra=0;wcex.cbWndExtra=0;wcex.hInstance=hInstance;wcex.hIcon=NULL;wcex.hCursor=LoadCursor(NULL,IDC_ARROW);wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);wcex.hIconSm=NULL;wcex.lpfnWndProc=(WNDPROC)ColorBoxProc;wcex.lpszClassName=szColorBoxClass;wcex.lpszMenuName=NULL;if(!RegisterClassEx(&wcex)return FALSE;return TRUE;/-颜色选择窗口-L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智慧医疗趋势分析报告:精准医疗与大数据融合应用
- 2025年基因治疗药物临床研发新趋势分析:市场前景与产业布局报告
- 2025年工业互联网平台网络切片技术在智慧工厂生产安全中的应用报告
- 2025年干细胞治疗神经系统疾病临床应用案例分析及启示报告
- 日照航海考试题及答案
- 癌症耐药凋亡机制-洞察及研究
- 设备技术服务合同范本
- 装修材料保证合同范本
- 酒店供货付款合同范本
- 风场道路维修合同范本
- 2025四川蜀道养护集团有限公司招聘15人考试参考题库及答案解析
- 股权转让担保责任及权益保护合同
- 1 学习伴我成长(教学设计)-2024-2025学年统编版(2024)道德与法治三年级上册
- 2025年安全工程师《安全生产管理》考前模拟卷(一)
- 2024年青海省行政执法资格考试备考题库及答案(题型)
- 2025-2026学年第一学期校园“1530”安全教育记录表
- 2025年注册安全工程师考试(初级)安全生产法律法规试卷及答案
- 开发基于多模态大模型的CST2差异化评课模型及其应用案例
- 人教版3到6年级单词表打印版(小学必背单词3000打印版)
- MOOC 研究生学术规范与学术诚信-南京大学 中国大学慕课答案
- 110KV变电站负荷及短路电流计算及电气设备的选择及校验
评论
0/150
提交评论