《可视化编程技术》实验报告实验五
更新时间:2024-06-11 07:51:01 阅读量: 综合文库 文档下载
- c#可视化编程技术推荐度:
- 相关推荐
实验报告 实验一
《可视化编程技术》实验报告
—— 实验五
一、实验目的和要求
1.了解资源的的概念;
2.熟练掌握菜单资源的创建过程;
3.掌握加速键资源、光标资源、图标资源的创建过程; 二、实验内容 :
问题描述:
在保持实验四程序功能的基础上进行简单扩充。首先,分别取自己姓名中的一个字作为应用程序的图标和光标。其次,为窗口添加主菜单,主菜单上只有一个弹出式菜单“Move(Alt+M为热键)”,下面分别有四个菜单项Up(Ctrl+U为热键,shift+U为加速键)、Down(Ctrl+D为热键,shift+D为加速键)、Left(Ctrl+L为热键,shift+L为加速键)、Right(Ctrl+R为热键,shift+R为加速键),分别实现键上四个方向键所对应的相同功能。所不同的是,当通过菜单的操作将绘制图形移动至窗口边界时,不再弹出提示消息框,而是使相应的菜单项变为灰色,当可再次向窗口边界移动时,相应菜单项变为激活状态。
窗口标题栏写明姓名和学号。
三、程序代码
#include
实验报告 实验一
#include \
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, int nCmdShow)
//主函数
{
MSG Message;
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)
//消息处理函数.
{
HMENU hMenu;
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_COMMAND:
switch(LOWORD(wParam))
{
case IDM_UP:
rect1.top -=10; rect1.bottom -=10;
if(bRect == TRUE || bCircle == TRUE) {
InvalidateRect(hWnd,NULL,TRUE); //发出重绘信息. {
if(rect1.bottom hMenu=GetMenu(hWnd); EnableMenuItem(hMenu,IDM_DOWN,MF_HILITE); CheckMenuItem(hMenu,IDM_DOWN,MF_UNCHECKED); } if(rect1.top<=0) { hMenu=GetMenu(hWnd); EnableMenuItem(hMenu,IDM_UP,MF_GRAYED); CheckMenuItem(hMenu,IDM_UP,MF_CHECKED); } } } break; case IDM_DOWN: rect1.top +=10; rect1.bottom +=10; if(bRect == TRUE || bCircle == TRUE) { InvalidateRect(hWnd,NULL,TRUE); //发出重绘信息. { if(rect1.top>0) { } if(rect1.bottom>=ClientRect.bottom) { hMenu=GetMenu(hWnd); hMenu=GetMenu(hWnd); EnableMenuItem(hMenu,IDM_UP,MF_HILITE); CheckMenuItem(hMenu,IDM_UP,MF_UNCHECKED); 实验报告 实验一 EnableMenuItem(hMenu,IDM_DOWN,MF_GRAYED); CheckMenuItem(hMenu,IDM_DOWN,MF_CHECKED); } } } break; case IDM_RIGHT: rect1.left +=10; rect1.right +=10; if(bRect == TRUE || bCircle == TRUE) { InvalidateRect(hWnd,NULL,TRUE); //发出重绘信息. { if(rect1.left>0) { hMenu=GetMenu(hWnd); EnableMenuItem(hMenu,IDM_LEFT,MF_HILITE); CheckMenuItem(hMenu,IDM_LEFT,MF_UNCHECKED); } if(rect1.right>=ClientRect.right) { hMenu=GetMenu(hWnd); EnableMenuItem(hMenu,IDM_RIGHT,MF_GRAYED); CheckMenuItem(hMenu,IDM_RIGHT,MF_CHECKED); } } } break; case IDM_LEFT: rect1.left -=10; rect1.right -=10; if(bRect == TRUE || bCircle == TRUE) { InvalidateRect(hWnd,NULL,TRUE); //发出重绘信息. { if(rect1.right { hMenu=GetMenu(hWnd); EnableMenuItem(hMenu,IDM_RIGHT,MF_HILITE); CheckMenuItem(hMenu,IDM_RIGHT,MF_UNCHECKED); } if(rect1.left<=0) { 实验报告 实验一 } } hMenu=GetMenu(hWnd); EnableMenuItem(hMenu,IDM_LEFT,MF_GRAYED); CheckMenuItem(hMenu,IDM_LEFT,MF_CHECKED); } break; } break; //处理按下鼠标左键消息. if(wParam&MK_CONTROL) //同时按下Ctrl键时. { flag=0; bCircle = TRUE; bRect = FALSE; //画圆. //圆的左上角坐标为当前鼠标位置. case WM_LBUTTONDOWN: rect1.left = x; rect1.top = y; } else if(wParam&MK_SHIFT) //同时按下shift键时. { flag=0; bRect = TRUE; bCircle = FALSE; rect1.left = x; rect1.top = y; //画矩形. //矩形的左上角坐标为当前鼠标位置. } break; case WM_KEYDOWN: switch(wParam) { case VK_UP: rect1.top -=10; //按UP键时,向上移动. rect1.bottom -=10; if(bRect == TRUE || bCircle == TRUE) { InvalidateRect(hWnd,NULL,TRUE); //发出重绘信息. { if(rect1.top<=0) { MessageBox(hWnd,\已经到达顶点\ } } } break; 实验报告 实验一 case VK_DOWN: //按DOWN键,向下移动. rect1.top +=10; rect1.bottom +=10; if(bRect == TRUE || bCircle == TRUE) { InvalidateRect(hWnd,NULL,TRUE); //发出重绘信息. { if(rect1.bottom>=ClientRect.bottom) { MessageBox(hWnd,\已经到最低点\ } } } break; case VK_LEFT: //按LEFT键,向左移动. rect1.left -=10; rect1.right -=10; if(bRect == TRUE || bCircle == TRUE) { } InvalidateRect(hWnd,NULL,TRUE); //发出重绘信息. { if(rect1.left<=0) { MessageBox(hWnd,\已经到最左点\ } } 动. break; case VK_RIGHT: //按RIGHT键,向右移 rect1.left +=10; rect1.right +=10; if(bRect == TRUE || bCircle == TRUE) { InvalidateRect(hWnd,NULL,TRUE); //发出重绘信息. { if(rect1.right>=ClientRect.right) { MessageBox(hWnd,\已经到最右点\ } } } 实验报告 实验一 break; } break; case WM_LBUTTONUP: bRect = FALSE; bCircle = FALSE; flag=1; break; //处理鼠标移动信息. //当松开左键时.绘图标志为false. // // case WM_MOUSEMOVE: if(flag==0 ) { rect1.right = x; rect1.bottom = y; //图形的右下角坐标为当前鼠标位置. InvalidateRect(hWnd,NULL,TRUE); //发出重绘信息. } break; case WM_PAINT: hDC = BeginPaint(hWnd,&ps); if(bCircle == TRUE ) { //绘制圆形. hB1=CreateSolidBrush(RGB(0,255,0));//创建绿色画刷 SelectObject(hDC,hB1); Ellipse(hDC,rect1.left,rect1.top,rect1.right,rect1.bottom); } if(bRect == TRUE) { //绘制矩形 hB2=CreateSolidBrush(RGB(0,0,255));//创建蓝色画刷 SelectObject(hDC,hB2); Rectangle(hDC,rect1.left,rect1.top,rect1.right,rect1.bottom); } EndPaint(hWnd,&ps); break; case WM_DESTROY: //处理退出窗口信息. PostQuitMessage(0); return 0; default: return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } return 0; } 实验报告 实验一 BOOL InitWindows(HINSTANCE hInstance,int nCmdShow) //初始化窗口 { HWND hWnd; hWnd=CreateWindow(\ //生成窗口 \学号:Xb09620113;姓名:林哈特\WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if(!hWnd) return FALSE; hWndMain=hWnd; //显示窗口 ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); return TRUE; } BOOL InitWindowsClass(HINSTANCE hInstance) { WNDCLASS WndClass; WndClass.cbClsExtra=0; //无窗口类扩展. WndClass.cbWndExtra=0; //无窗口实例扩展. WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));//背景为白色. WndClass.hCursor=LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR1)); //光标为为箭头. WndClass.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1)); //采用缺省图标. WndClass.hInstance=hInstance; //当前实例. WndClass.lpfnWndProc=WndProc; //消息处理函数. WndClass.lpszClassName=\ //窗口类名称. WndClass.lpszMenuName=MAKEINTRESOURCE(IDR_MENU1); //缺省窗口风格. // 无菜单. WndClass.style=0; 实验报告 实验一 return RegisterClass(&WndClass); //返回窗口注册值. } 四、运行结果及分析 五、实验心得 本次实验学习到了如何创建菜单,使得程序应用变得更加方便了。
正在阅读:
《可视化编程技术》实验报告实验五06-11
制氢装置06-20
2017开学了日记11-21
【精选】写家庭的作文5篇03-27
2011版语文新课程标准测试题(附答案)11-09
成长的路上作文500字07-10
小学生日常行为规范(修订)08-06
看了它就能看懂大部分心电图07-30
材料科学与工程学院教学科研绩效评价办法(试行)ver.4.101-17
2017陕西继续教育题库05-01
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实验
- 可视化
- 编程
- 报告
- 技术
- 单片机课程设计—定时闹钟设计 - 图文
- 大工15春《钢筋混凝土结构》在线作业1满分答案
- 现场处置方案 - 图文
- 014届高三语文 名校试题精选精析分省汇编系列(第01期)专题08
- 校园路灯智能控制系统的设计与实现 - 图文
- “先学后教 当堂训练”教学法的心得体会
- 海扎煤矿污水处理系统应急预案
- 川大《发电厂电气部分(1)1349》16秋在线作业2
- 市政工程临时用电监理实施细则
- 2013年全国各地中考语文真题分类汇编:命题作文+半命题作文+材料
- PON故障排查要点zte
- 四川省广安市2012年中考数学试题(解析版)
- 企业员工“主人翁意识”缺失原因分析与对策
- 易理解错古诗
- 安全生产应知应会60条 (1)
- 市场营销学
- 2016韶关高三调研考试附答案
- 读书活动启动仪式讲话稿
- 中英文翻译模板-建行个人住房贷款借款合同
- 思修与法基题库(试题及答案篇)