资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
集美大学计算机工程学院实验报告课程名称:TCP/IP 协议及程序设计 班级: 实验成绩:实验项目名称:Windows API 窗口矩形绘制程序设计学号: 上机实践日期:2016-04-14实验项目编号:04 组号:1 上机实践时间: 2 学时一、实验目的熟悉 Windows 程序的运行脉络,掌握运用 Win32 API 技术进行编程的方法。二、实验内容与设计思想设计一个简单的 Win32 程序,该程序窗口内正上方居中显示“Windows API 绘制矩形程序演示”字样,在程序窗口内任意位置 A 按下鼠标左键、并拖动鼠标到任意位置 B 松开,可以 AB 为主对角线绘制矩形。并且用红色填充该矩形。三、实验使用环境操作系统: Microsoft Windows XP SP2编程环境: Visual C+ 6.0 中文企业版四、实验步骤和调试过程详细给出源码以及实现的效果图,并配有代码解释#include #include static POINT pt_star,pt_end;LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)static TCHAR szAppName = TEXT (HelloWin) ;HWND hwnd ;MSG msg ;WNDCLASS wndclass ;wndclass.| CS_VREDRAW ;wndclass.lpfnWndProc = WndProc ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = szAppName ;if (!RegisterClass (&wndclass)MessageBox (NULL, TEXT (This program requires Windows NT!), szAppName, MB_ICONERROR) ;return 0 ;hwnd = CreateWindow (szAppName, / window class nameTEXT (3062,3076,3080,3083,43073), / window captionWS_OVERLAPPEDWINDOW , / window styleCW_USEDEFAULT, / initial x positionCW_USEDEFAULT, / initial y positionCW_USEDEFAULT, / initial x sizeCW_USEDEFAULT, / initial y sizeNULL, / parent window handleNULL, / window menu handlehInstance, / program instance handleNULL) ; / creation parametersShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;while (GetMessage (&msg, NULL, 0, 0)TranslateMessage (DispatchMessage (return msg.wParam ;LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)HDC hdc ;PAINTSTRUCT ps ;static bool bJude = false;TCHAR szBuffer = ;RECT rect ;switch (message)case WM_LBUTTONDOWN:pt_end.x = pt_star.x = LOWORD(lParam);pt_end.y = pt_star.y = HIWORD(lParam);/获得按下坐标;掩盖掉第一次按下时鼠标移动bJude = true;return 0;case WM_MOUSEMOVE:if(bJude)hdc = GetDC(hwnd);SelectObject(hdc,GetStockObject(NULL_BRUSH);SetROP2(hdc,R2_NOT);/防止重影Rectangle(hdc,pt_star.x,pt_star.y,pt_end.x,pt_end.y);pt_end.x = LOWORD(lParam);pt_end.y = HIWORD(lParam);Rectangle(hdc,pt_star.x,pt_star.y,pt_end.x,pt_end.y);ReleaseDC(hwnd,hdc);return 0;case WM_LBUTTONUP:bJude = false;pt_end.x = LOWORD(lParam);pt_end.y = HIWORD(lParam);InvalidateRect(hwnd,NULL,true);return 0;case WM_PAINT:hdc = BeginPaint(hwnd , SetCursor (LoadCursor (NULL, IDC_WAIT) ;ShowCursor (TRUE) ;GetClientRect (hwnd, DrawText (hdc, TEXT (Windows API 画线程序演示), -1, &rect,DT_SINGLELINE | DT_CENTER) ;SelectObject(hdc,CreateSolidBrush(RGB(255,0,0);Rectangle(hdc,pt_star.x,pt_star.y,pt_end.x,pt_end.y);EndPaint(hwnd,return 0;case WM_DESTROY:PostQuitMessage (0) ;return 0 ;return DefWindowProc (hwnd, message, wParam, lParam) ;图(1) 图(2)五、实验小结图(3)在防重影这一块,如果没有执行这一块代码,会导致画图过程中没有图(1)的框的效果;直接出现图 2 的效果;本次实验过程基于实验 3 之上,做实验的过程中由于有上次实验的经验以及代码,编写代码的过程较快,这次实验主要是一个自制画刷的过程较为深刻,小组成员讨论较久,小组成员也深刻的体会到了 SelectObject(hdc,CreateSolidBrush(RGB(255,0,0);这一语法的应用,以及在选取 brush 和 pen 的过程体会较深。case WM_PAINT:hdc = BeginPaint(hwnd , SelectObject(hdc,GetStockObject(BLACK_BRUSH);Rectangle(hdc,pt_star.x,pt_star.y,pt_end.x,pt_end.y);EndPaint(hwnd,return 0;这块代码是从网上找的实例,刚开始,小组成员以为会有 RED_BRUSH 这类语法,后来程序执行不了,才发现了自定画刷的做法:SelectObject(hdc,CreateSolidBrush(RGB(255,0,0);这是本次实验过程中最为深刻的一个点。图(4)这一块代码是覆盖前一次画的矩形的图,如果缺失这一块代码会出现以下情况: 图(5)无论鼠标从什么坐标开始点击左键,矩形框总是从最左上角开始绘图,而且只需点击一次左键便能画出矩形图。六、附录网络编程技术与应用
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号