第七章 资源在Windows编程中的应用 P157 7-8
资源在基于SDK的程序设计中的应用实验
一、实验目的
1.掌握各种资源的应用及资源应用的程序设计方法。
二、实验内容及步骤
实验任务
1.熟悉菜单资源的创建过程;
2.熟悉位图资源的创建;
3.熟悉对话框资源的应用;
4.熟悉图标资源。
实验内容
在一个窗口中央加载一个任意位图,位图尺寸为窗口面积的四分之一,当单击鼠标左键或键盘上的向上箭头时,位图向上移动,当移动到窗口的上边界时,窗口显示“不能再向上移动了”字样,当单击鼠标右键或键盘上的向下箭头时,位图向下移动,当到达窗口的下边界时,屏幕显示“不能再向下移动了”字样。
程序代码:
#include <windows.h>
long WINAPI WndProc(HWND hWnd,UINT iMessage,
UINT wParam,LONG lParam); //消息处理函数声明.
BOOL InitWindowsClass(HINSTANCE hInstance); //初始化窗口类声明
BOOL InitWindows(HINSTANCE hInstance, int nCmdShow); //初始化窗口声明
HWND hWndMain; //定义窗口句柄
HDC hDC; //定义设备环境句柄
HDC hdcmem; //定义内存句柄
HBITMAP hBm; //定义位图句柄
BITMAP bm; //定义位图结构变量
int iY=80; //位图左上角初始y坐标
int iWindowWidth,iWindowHeight; //窗口的宽度和高度
char cUpWarn[]="不能再向上移动了"; //向上警告字符串
char cDownWarn[]="不能再向下移动了"; //向下警告字符串
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
MSG Message; //定义消息变量
hBm=LoadBitmap(hInstance,"forest"); //加载位图
GetObject(hBm,sizeof(BITMAP),(LPVOID)&bm); //获得位图信息
iWindowWidth=2*bm.bmWidth; //得到窗口的宽度
iWindowHeight=2*bm.bmHeight; //得到窗口的高度
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)
{
PAINTSTRUCT ps; //定义包含绘图信息的结构变量
switch(iMessage)
{
case WM_LBUTTONDOWN: //点击鼠标左键
iY=iY-10; //位图高度-10
InvalidateRect(hWnd,NULL,1); //刷新用户区
break;
case WM_RBUTTONDOWN: //点击鼠标右键
iY=iY+10; //位图高度+10
InvalidateRect(hWnd,NULL,1); //刷新用户区
break;
case WM_KEYDOWN:
switch(wParam)
{
case VK_UP: //按上箭头时,位置-10
iY=iY-10;
break;
case VK_DOWN: //按下箭头时,位置+10
iY=iY+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(iY>0&&iY<iWindowHeight/2) //当位图完整的在窗口中时
{
SelectObject(hdcmem,hBm); //选入内存句柄
BitBlt(hDC,60,iY,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);//输出位图
}
else if(iY<=0) //当位图的上边界超出了窗口时
{
TextOut(hDC,0,0,cUpWarn,sizeof(cUpWarn)); //输出警告
}
else //当位图的下边界超出了窗口时
{
TextOut(hDC,0,0,cDownWarn,sizeof(cDownWarn)); //输出警告
}
EndPaint(hWnd,&ps); //输出环境句柄
break;
case WM_DESTROY: //关闭窗口消息
DeleteObject(hBm); //删除内存句柄
PostQuitMessage(0);
return 0;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
return 0;
}
BOOL InitWindows(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hWnd=CreateWindow("BitmapInstance", //窗口类名称
"位图显示实例程序", //标题栏名称
WS_OVERLAPPEDWINDOW, //窗口样式
CW_USEDEFAULT, //窗口左上角坐标
0,
iWindowWidth, //采用自定义的高度和宽度
iWindowHeight,
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(NULL,IDC_ARROW); //光标为为箭头
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //采用缺省图标
WndClass.hInstance=hInstance; //当前实例
WndClass.lpfnWndProc=WndProc; //消息处理函数
WndClass.lpszClassName="BitmapInstance"; //窗口类名称
WndClass.lpszMenuName="Menu"; //定义菜单为Menu
WndClass.style=0; //缺省窗口风格
return RegisterClass(&WndClass); //返回窗口注册值
}程序运行结果:

三、实验结果
通过本次试验我掌握了各种资源的应用及资源应用的程序设计方法,熟悉了菜单资源,位图资源,对话框资源,以及图标资源的创建和应用过程。
第七章 资源在Windows编程中的应用 P157 7-8的更多相关文章
- 资源在windows编程中的应用----菜单
资源在Windows编程中的应用 资源 加速键.位图.光标.对话框.菜单.字符串.工具条 1.菜单的创建 菜单由以下组成部分: (1)窗口主菜单条 (2)下拉式菜单框 (3)菜单项热键标识 (4)菜单 ...
- 资源在Windows编程中的应用
学习目的 掌握菜单和对话框资源的创建和使用. 编写程序: 设计一个窗口应用程序, 其中有一个VC菜单, 该菜单下有"显示", "隐藏", "退出&qu ...
- Windows编程中的若干难点 - Windows程序设计(SDK)007
Windows编程中的若干难点 让编程改变世界 Change the world by program 一个窗口的生与死 我记得有童鞋会问:如果我的程序需要在关闭前让用户判断是否确定要关闭窗口,我应该 ...
- windows编程中的数据类型
在windows编程中,有许多奇怪的数据类型,初学者不知道这些代表什么,下面就把一些数据类型列出如下: ATOM 原子(原子表中的一个字符串的参考) BOOL 布尔变量 BOOLEAN 布尔变量 BY ...
- Windows编程中UNICODE和_UNICODE定义问题
Windows编程中UNICODE和_UNICODE定义问题 先转一篇文章: 初学Windows SDK编程时碰到过这个问题,相信很多初学Windows编程的人也都碰到过,后来慢慢搞明白些了,但有时别 ...
- Windows 编程中恼人的各种字符以及字符指针类型
在Windows编程中,很容易见到这些数据类型:LPSTR,LPTSTR,LPCTSTR... 像很多童鞋一样,当初在学Windows编程的时候,对着些数据类型真的是丈二和尚,摸不着头脑,长时间不用就 ...
- Windows编程中char*转LPCWSTR解决的方法总结
Windows编程中常常涉及到的一个问题是字符串之间的转换,开发过程总是遇到编译器提示无法格式转换的问题.于是自己总结了几种解决的方法. 1.通过T2W转换宏 char* szStr = " ...
- Windows编程中各种操作文件的方法
windows编程中文件操作有以下几种常见方法:1.C语言中文件操作.2.C++语言中的文件操作.3.Win32 API函数文件操作.4.MFC CFile类文件操作.5.MFC CFileDialo ...
- WindowsPE 第七章 资源表
资源表 在程序设计中,总会设计一些数据.这些数据可能是源代码内部需要用到的常量,菜单选项.界面描述等:也可能是源代码外部的,比如程序的图标文件.北京音乐文件.配置文件等,以上这些数据统称为资源.按照程 ...
随机推荐
- .NET IL指令速查表
名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...
- Python源码分析之dis
一.简单例子 def add(a, b): return a + b add_nums.py import foo a = [1, 'python'] a = 'a string' def func( ...
- jQuery中使用data()方法读取HTML5自定义属性data-*实例
如果你使用jQuery类库,那么你可以非常愉悦的使用jquery的data()方法存取data-* 自定义属性,方法允许我们在DOM元素上绑定任意类型的数据,避免了循环引用的内存泄漏风险 主要的方法如 ...
- Spring4源码解析:BeanDefinition架构及实现
一.架构图 首先共同看下总体的 Java Class Diagrams 图: 二.具体类实现 2.1 AttributeAccessor 接口定义了一个通用的可对任意对象获取.修改等操作元数据的附加契 ...
- hadoop之 Hadoop1.x和Hadoop2.x构成对比
Hadoop1.x构成: HDFS.MapReduce(资源管理和任务调度):运行时环境为JobTracker和TaskTracker: Hadoop2.0构成:HDFS.MapReduce/其他 ...
- DNS记录类型名单
原文:http://www.worldlingo.com/ma/enwiki/zh_cn/List_of_DNS_record_types DNS记录类型名单 这 DNS记录类型名单 提供一个方便索引 ...
- 渐进式 jpg 和 交错式 gif png 提高图片站体验
渐进式 jpg 和 交错式 gif png 提高图片站体验= 渐进式的JPG比原始JPG还要小!! 让图片性感的露给你看~google picasa 和 smashing magazine 都有用到搞 ...
- CentOS6.5 下Haproxy服务的安装与配置
参考网站: http://wenku.baidu.com/link?url=57AsCAL8TIv8NC3Vdnpd0hQ4fGNls8RFikjRWna3OaZb6qGHYTdV-4_wQPuzv8 ...
- C++ Primer第五版答案
Downloads Download the source files for GCC 4.7.0. Download the source code files for MS Visual Stud ...
- Apache Commons Codec 与消息摘要算法(hash算法)
首先我们要明白 Codec 是什么含义.它是 Coder + decoder = Codec,也就是编码器解码器.即是编码器,也是解码器. 官网地址:http://commons.apache.org ...