教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 文秘资料 >

Windows实验报告第二次实验

来源:网络收集 时间:2026-07-17
导读: Windows实验报告 计算机科学与技术学院 计112 1113022032 康照玲 一、实验一 1、题目:在一个窗口中央加载一个任意位图,位图尺寸为窗口面积的四分之一,当单击鼠标左键或键盘上的向上箭头时,位图向上移动,当移动到窗口的上边界时,在模式对话框中显示“不

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(iX>0&&iX<iWindowWidth/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(iY>0&&iY<iWindowHeight/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,wParam,lParam));

}

return 0;

3、模式对话框的设置,相关代码如下:

IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 187, 96

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "对话"

FONT 10, "System"

BEGIN

PUSHBUTTON "确定",IDCANCEL,130,82,50,14

LTEXT "不能再向上移动了"IDC_STATIC,50,35,170,10

END

IDD_DIALOG2 DIALOG DISCARDABLE 0, 0, 187, 96

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "对话"

FONT 10, "System"

BEGIN

PUSHBUTTON "确定",IDCANCEL,130,82,50,14

LTEXT "不能再向下移动了"IDC_STATIC,50,35,170,10

END

IDD_DIALOG3 DIALOG DISCARDABLE 0, 0, 187, 96

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "对话"

FONT 10, "System"

BEGIN

PUSHBUTTON "确定",IDCANCEL,130,82,50,14

LTEXT "不能再向左移动了"IDC_STATIC,50,35,170,10

END

IDD_DIALOG4 DIALOG DISCARDABLE 0, 0, 187, 96

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "对话"

FONT 10, "System"

BEGIN

PUSHBUTTON "确定",IDCANCEL,130,82,50,14

LTEXT "不能再向右移动了"IDC_STATIC,50,35,170,10

END

二、实验二

1、题目:建立两套菜单,第一套菜单

单击menu2,窗口加载第二套

菜单:给每套菜单的每个菜单项放置热键和加速键,单击menu1后,加载第一套菜单。

2、关键代码分析:

首先设置两套菜单,在窗口中分别加载菜单,在点击相应的菜单选项是出现菜单的转换。在需要点击图形时,设置相关画图标志以及填充颜色标志,点击时出现的相应图形和相应颜色的填充。

int wmId, wmEvent;

PAINTSTRUCT ps;

HDC hdc;

HBRUSH hbrush;

static BOOL bColorR=FALSE,bColorY=FALSE;

static BOOL bCircle = FALSE,bRect = FALSE; //设置绘制圆和矩形的标志变量 switch (message)

{

case WM_COMMAND:

wmId= LOWORD(wParam);

wmEvent = HIWORD(wParam);

// 分析菜单选择:

switch (wmId)

{

case ID_MENU1:

hmenu1 = LoadMenu(hInst,MAKEINTRESOURCE(IDC_MY7_91)); //得到菜单句柄

SetMenu(hWnd,hmenu1);

DrawMenuBar(hWnd);

bCircle = FALSE; //绘圆标志为假

bRect = FALSE; //绘矩形标志为假 break;

case ID_MENU2:

hmenu2 = LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU1)); //得到菜单句柄

SetMenu(hWnd,hmenu2);

DrawMenuBar(hWnd);

bCircle = FALSE; //绘圆标志为假

bRect = FALSE; //绘矩形标志为假 break;

case ID_CIRCLE: //绘制圆形

bCircle = TRUE; //绘圆标志为真 bRect = FALSE; //绘矩形标志为假

InvalidateRect(hWnd,NULL,TRUE); //发出刷新信息

break;

case ID_RANGLE: //绘制矩形

bCircle = FALSE; //绘圆标志为假

bRect = TRUE; //绘矩形标志为真

InvalidateRect(hWnd,NULL,TRUE); //发出刷新信息

break;

case ID_RED:

…… 此处隐藏:3449字,全部文档内容请下载后查看。喜欢就下载吧 ……
Windows实验报告第二次实验.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/2176413.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)