Windows实验报告第二次实验.doc
文本预览下载声明
Windows实验报告
计算机科学与技术学院 计112 1113022032 康照玲
一、实验一
1、题目:在一个窗口中央加载一个任意位图,位图尺寸为窗口面积的四分之一,当单击鼠标左键或键盘上的向上箭头时,位图向上移动,当移动到窗口的上边界时,在模式对话框中显示“不能再向上移动了”字样;当单击鼠标右键或键盘上的向下箭头时,位图向下移动,当到达窗口的下边界时,在模式对话框中显示“不能再向下移动了”字样;当单击键盘上的向左箭头时,位图向左移动,当移动到窗口的左边界时,在模式对话框中显示“不能再向左移动了”字样;当单击键盘上的向右箭头时,位图向右移动,当移动到窗口的右边界时,在模式对话框中显示“不能再向右移动了”字样。并要求图片在移动到窗口的任意边界时不消失。
2、关键代码分析
首先设置窗口大小,加载位图,获得位图左上角的坐标,在按下上下左右键的时候对相关坐标进行加减,同时建立相关的模式对话框,在对位图进行移动到相关边界时出现相关对话框。
相关代码:
PAINTSTRUCT ps; //定义包含绘图信息的结构变量
switch(iMessage)
{
case WM_KEYDOWN:
switch(wParam)
{
case VK_UP: //按上箭头时,位置-10
iY=iY-10;
break;
case VK_DOWN: //按下箭头时,位置+10
iY=iY+10;
break;
case VK_LEFT: //按左箭头时,位置-10
iX=iX-10;
break;
case VK_RIGHT: //按右箭头时,位置+10
iX=iX+10;
break;
}
InvalidateRect(hWnd,NULL,1);//刷新用户区
break;
case WM_CREATE: //初始化窗口消息
hDC=GetDC(hWnd); //得到设备环境指针
hdcmem=CreateCompatibleDC(hDC); //得到内存指针
ReleaseDC(hWnd,hDC); //删除设备环境指针
case WM_PAINT: //处理绘图消息
hDC=BeginPaint(hWnd,ps); //得到设备环境指针
if(iX0iXiWindowWidth/2) //当位图完整的在窗口中时
{
SelectObject(hdcmem,hBm); //选入内存句柄
BitBlt(hDC,iX,iY,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);//输出位图
}
else if(iX=0) //当位图的左边界超出了窗口时
{ DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG3),hWnd,(DLGPROC)ModalDlgProc);
}
else //当位图的右边界超出了窗口时
{ DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG4),hWnd,(DLGPROC)ModalDlgProc);
}
if(iY0iYiWindowHeight/2) //当位图完整的在窗口中时
{
SelectObject(hdcmem,hBm); //选入内存句柄
BitBlt(hDC,iX,iY,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY); break; //输出位图
}
else if(iY=0) //当位图的上边界超出了窗口时
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),hWnd,(DLGPROC)ModalDlgProc);
}
else //当位图的下边界超出了窗口时
{ DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG2),hWnd,(DLGPROC)ModalDlgProc);
}
EndPaint(hWnd,ps); //输出环境指针
break;
case WM_DESTROY: //关闭窗口消息
DeleteObject(hBm); //删除内存句柄
PostQuitMessage(0);
return 0;
default:
return(DefWindowProc(hWnd,iMessage,
显示全部