资源在基于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的更多相关文章

  1. 资源在windows编程中的应用----菜单

    资源在Windows编程中的应用 资源 加速键.位图.光标.对话框.菜单.字符串.工具条 1.菜单的创建 菜单由以下组成部分: (1)窗口主菜单条 (2)下拉式菜单框 (3)菜单项热键标识 (4)菜单 ...

  2. 资源在Windows编程中的应用

    学习目的 掌握菜单和对话框资源的创建和使用. 编写程序: 设计一个窗口应用程序, 其中有一个VC菜单, 该菜单下有"显示", "隐藏", "退出&qu ...

  3. Windows编程中的若干难点 - Windows程序设计(SDK)007

    Windows编程中的若干难点 让编程改变世界 Change the world by program 一个窗口的生与死 我记得有童鞋会问:如果我的程序需要在关闭前让用户判断是否确定要关闭窗口,我应该 ...

  4. windows编程中的数据类型

    在windows编程中,有许多奇怪的数据类型,初学者不知道这些代表什么,下面就把一些数据类型列出如下: ATOM 原子(原子表中的一个字符串的参考) BOOL 布尔变量 BOOLEAN 布尔变量 BY ...

  5. Windows编程中UNICODE和_UNICODE定义问题

    Windows编程中UNICODE和_UNICODE定义问题 先转一篇文章: 初学Windows SDK编程时碰到过这个问题,相信很多初学Windows编程的人也都碰到过,后来慢慢搞明白些了,但有时别 ...

  6. Windows 编程中恼人的各种字符以及字符指针类型

    在Windows编程中,很容易见到这些数据类型:LPSTR,LPTSTR,LPCTSTR... 像很多童鞋一样,当初在学Windows编程的时候,对着些数据类型真的是丈二和尚,摸不着头脑,长时间不用就 ...

  7. Windows编程中char*转LPCWSTR解决的方法总结

    Windows编程中常常涉及到的一个问题是字符串之间的转换,开发过程总是遇到编译器提示无法格式转换的问题.于是自己总结了几种解决的方法. 1.通过T2W转换宏 char* szStr = " ...

  8. Windows编程中各种操作文件的方法

    windows编程中文件操作有以下几种常见方法:1.C语言中文件操作.2.C++语言中的文件操作.3.Win32 API函数文件操作.4.MFC CFile类文件操作.5.MFC CFileDialo ...

  9. WindowsPE 第七章 资源表

    资源表 在程序设计中,总会设计一些数据.这些数据可能是源代码内部需要用到的常量,菜单选项.界面描述等:也可能是源代码外部的,比如程序的图标文件.北京音乐文件.配置文件等,以上这些数据统称为资源.按照程 ...

随机推荐

  1. IOS中UITableViewCell使用详解

    IOS中UITableViewCell使用详解 - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(N ...

  2. p/Invoke工具

    开源的工具 下面这个链接来下载这个工具: http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a06085 ...

  3. Java 的Integer、int与new Integer到底怎么回事?

    先做一些总结,询问了些经验比较多的师傅,在这里表示感谢,然后自己总结下,今天的收获分享给大家: 1. int 和Integer在进行比较的时候,Integer会进行拆箱,转为int值与int进行比较. ...

  4. oracle之 监听器无法启动的几个原因总结

    1)防火墙没关 2)/etc/hosts配置问题,有可能误删了127.0.0.1的默认记录,添加默认记录 [root@rac02 ~]# cat /etc/hosts127.0.0.1 localho ...

  5. DNS中NS和SOA区别

    ns 授權很簡單… 假設你註冊的 domain 叫 abc.com ,而你有 ns1 與 ns2 兩台 server . 那,你必需從 .com 的權威伺服器授權給你,其設定或類似如此: $ORIGI ...

  6. emacs之自动完成括号

    网上抄来的问题不少,看emacswiki,用autopairs即可 emacsConfig/autopair-setting.el (require 'autopair) (autopair-glob ...

  7. Linux 开发环境搭建与使用——SlickEdit 的安装与配置

    SlickEdit 的介绍 vim 是公认很好用很完美,但是对新手来说,上手毕竟不是很容易.Windows 下程序员很多都很喜欢Source Insight 这个工具来看代码,各种语法高亮看着很舒服. ...

  8. ffmpeg+nginx+video实现rtsp流转hls流,通过H5查看监控视频

    一.FFmpeg下载:http://ffmpeg.zeranoe.com/builds/ 下载并解压FFmpeg文件夹,配置环境变量:在“Path”变量原有变量值内容上加上d:\ffmpeg\bin, ...

  9. scrollTop、offsetHeight和offsetTop等属性用法详解--转转转

    scrollTop.offsetHeight和offsetTop等属性用法详解: 标题中的几个相关相关属性在网页中有这大量的应用,尤其是在运动框架中,但是由于有些属性相互之间的概念比较混杂或者浏览器兼 ...

  10. Bootstrap-CL:分页

    ylbtech-Bootstrap-CL:分页 1.返回顶部 1. Bootstrap 分页 本章将讲解 Bootstrap 支持的分页特性.分页(Pagination),是一种无序列表,Bootst ...