集美大学计算机工程学院实验报告
课程名称:TCP/IP协议与通信程序设计 | 班级: | 实验成绩: |
实验项目名称:Windows API窗口画线程序设计 | 学号: | 上机实践日期:2016—04-07 |
实验项目编号:03 | 组号:1 | 上机实践时间: 2学时 |
一、实验目的
理解并熟悉Windows程序消息映射的思想,熟练掌握运用Win32 API技术进行编程的方法。为Windows通信程序打下坚实的基础。
二、实验内容与设计思想
设计一个简单的Win32程序,该程序窗口内正上方居中显示“Windows API画线程序演示”字样,
在程序窗口内任意位置按下鼠标左键并拖动到窗口范围内任意位置,松开鼠标左键即可绘制一条蓝的直线.
三、实验使用环境
操作系统: Microsoft Windows XP SP2
编程环境: Visual C++ 6。0中文企业版
四、实验步骤和调试过程
详细给出源码以及实现的效果图,并配有代码解释
源码:
#include <windows。h〉
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
TCHAR SoftName[]=TEXT(”划线程序");
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass。lpfnWndProc = WndProc ;
wndclass。cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass。hIcon = LoadIcon (hInstance, SoftName) ;
wndclass。hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass。hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass。lpszClassName = SoftName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
SoftName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (SoftName, SoftName,
WS_OVERLAPPEDWINDOW,
GetSystemMetrics (SM_CXSCREEN) / 4,
GetSystemMetrics (SM_CYSCREEN) / 4,
GetSystemMetrics (SM_CXSCREEN) / 2,
GetSystemMetrics (SM_CYSCREEN) / 2,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static POINT pt[2];//定义存放结构体类型的点的坐标
PAINTSTRUCT ps;//定义指向包含绘图信息的结构体变量
HDC hdc;//定义指向设备的句柄
HPEN hPen;//定义指向画笔的句柄
RECT rect ;//定义指向矩形区域的结构体变量
switch(message)
{
case WM_CREATE:
return 0;
case WM_LBUTTONDOWN://鼠标点击左键后获取该点的坐标病放到POINT结构体内
pt[0].x=LOWORD(lParam);
pt[0].y=HIWORD(lParam);
return 0;
case WM_MOUSEMOVE://按下了左键就获取点的坐标并放到结构体内,只要没按下键或按得不是左键俊不获取坐标
if(wParam & MK_LBUTTON)
{
pt[1]。x=LOWORD(lParam);
pt[1].y=HIWORD(lParam);
}
InvalidateRect(hwnd,NULL,TRUE);//窗体重新绘制(用于下一个WM_PAINT消息到来时)
api设计 return 0;
case WM_PAINT://处理绘图消息
hdc=BeginPaint(hwnd,&ps);//开始窗口绘制
GetClientRect (hwnd, &rect); //获取窗口客户区的尺寸
DrawText (hdc,TEXT("Windows API画线程序演示!"),—1, &rect,
DT_SINGLELINE | DT_CENTER) ;; //显示文本串
hPen=CreatePen(PS_SOLID,2,RGB(0,0,255));//创建画笔,样式为实线,宽度为2.颜为蓝
SelectObject(hdc,hPen);//选择画笔
MoveToEx(hdc,pt[0].x,pt[0]。y,0);//移到刚才存放的鼠标左键按下的坐标点
LineTo(hdc,pt[1]。x,pt[1].y);//从当前坐标连线到pt[1]坐标所在位置即划成一条直线
EndPaint(hwnd,&ps);//释放设备环境句柄,结束窗口绘制
return 0;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
实验结果:
五、实验小结
六、附录
《网络编程技术与应用》
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论