- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告实验一
实验报告
实验一
《可视化编程技术》实验报告
——实验四
一、实验目的和要求
了解Windows 系统是如何将键盘与鼠标的输入转换成消息的;
掌握应用程序如何处理键盘消息;
掌握应用程序如何处理鼠标消息; 二、实验内容 :
问题描述:
设计一个鼠标键盘相应程序,在按下 Ctrl 键的同时按下鼠标左键,在窗口中拖动鼠标,可画出一个红色的圆;在按下 Shift 键的同时按下鼠标左键,在窗口中拖动鼠标,画出一个绿色的矩形。在画出相应的图形后,若按下键盘的“向右”键时,图形按照一定步长向右移动,当移 动到窗口的右边框时,则停止移动,并弹出警告对话框;若按下键盘的“向左”键时,图形按照 一定步长向左移动,当移动到窗口的左边框时,则停止移动,并弹出警告对话框;若按下键盘的 “向上”键时,图形按照一定步长向上移动,当移动到窗口的上边框时,则停止移动,并弹出警 告对话框;若按下键盘的“向下”键时,图形按照一定步长向下移动,当移动到窗口的下边框时, 则停止移动,并弹出警告对话框;效果图如下:
窗口标题栏写明姓名和学号。
三、程序代码
#include windows.h #include stdlib.h #include string.h
long WINAPI WndProc(HWND hWnd,
UINT iMessage, UINT wParam,
LONG lParam); //消息处理函数声明.
BOOL InitWindowsClass(HINSTANCE hInstance); //初始化窗口类声明BOOL InitWindows(HINSTANCE hInstance, int nCmdShow);//初始化窗口声明. HWND hWndMain; //定义全局窗口句柄.
RECT rect1; //定义矩形结构体.记录了图形的信息. RECT ClientRect;
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance, LPSTR lpCmdLine,
{
MSG Message;
int nCmdShow)
//主函数
if(!InitWindowsClass(hInstance)) return FALSE;
//初始化窗口类.
if(!InitWindows(hInstance,nCmdShow)) //初始化窗口. return FALSE;
while(GetMessage(Message,0,0,0))
{
TranslateMessage(Message); DispatchMessage(Message);
}
//消息循环.
return Message.wParam;
}
long WINAPI WndProc(HWND hWnd,
UINT
iMessage,
UINT
wParam,
{
LONG
lParam) //消息处理函数.
HDC hDC;
HBRUSH hB1,hB2;
定/义/设备环境句柄.
WORD x,y; //定义鼠标的位置坐标.
static BOOL bCircle=FALSE,bRect=FALSE; //设置绘制圆和矩形的标志变
量.
PAINTSTRUCT ps; //定义绘图结构体变量. x = LOWORD(lParam); //得到鼠标的位置.
y = HIWORD(lParam); GetClientRect(hWnd,ClientRect); //获得窗口大小static int flag=0;
switch(iMessage)
{
case WM_LBUTTONDOWN:
flag=0;
//处理按下鼠标左键消息.
if(wParamMK_CONTROL) //同时按下 Ctrl 键时.
{
bCircle = TRUE; bRect = FALSE; rect1.left = x; rect1.top = y;
}
//画圆.
//圆的左上角坐标为当前鼠标位置.
else if(wParamMK_SHIFT) //同时按下 shift 键时.
{
bRect = TRUE; bCircle = FALSE; rect1.left = x; rect1.top = y;
}
//画矩形.
//矩形的左上角坐标为当前鼠标位置.
else
{
bRect = FALSE; bCircle = FALSE;
}
break;
case WM_KEYDOWN: switch(wParam)
{
case VK_UP: //按 UP 键时,向上移动. rect1.top -=10;
rect1.bottom -=10;
if(bRect
文档评论(0)