资源在Windows编程中的应用
|
学习目的 掌握菜单和对话框资源的创建和使用. 编写程序: 设计一个窗口应用程序, 其中有一个VC菜单, 该菜单下有"显示", "隐藏", "退出"选项; 当选择"显示"选项时, 窗口中显示一个对话框, 在对话框中显示"我们一起来学习VC++"; 当选择"隐藏"按钮时,对话框消失;选择"退出"时, 退出应用程序; 并为该程序加载图标 1.菜单资源设计
在资源中新建一个菜单资源
添加相应的菜单并设置属性 2.对话框资源设计
在资源中新建一个对话框资源
设置对话框属性并添加文字 3.编写菜单响应代码 程序主要代码如下: #include <windows.h> #include "7_9.h"
long WINAPI WndProc(HWND hWnd,UINT iMessage, WPARAM wParam,LPARAM lParam); BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM); //对话框处理函数
HWND hDlg; //定义对话框句柄 HINSTANCE hInst; //定义应用程序实例句柄
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) { MSG Message; //定义消息变量 HWND hWnd; //定义窗口句柄 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="DlgInstance";//窗口类名称 WndClass.lpszMenuName="Menu"; //定义菜单为Menu WndClass.style=0; //缺省窗口风格
if(!RegisterClass(&WndClass)) //注册窗口. { MessageBeep(0); //注册失败发出警告声. return FALSE; }
hWnd=CreateWindow("DlgInstance", //窗口类名称 "7_9", //标题栏名称 WS_OVERLAPPEDWINDOW, //窗口样式.有标题栏和最大最小化按钮 CW_USEDEFAULT, //窗口左上角坐标 0, CW_USEDEFAULT, //采用自定义的高度和宽度 0, NULL, //无父窗口 NULL, //无菜单 hInstance, //当前应用实例句柄 NULL); //指向传递给窗口的参数的指针
ShowWindow(hWnd,nCmdShow); //显示窗口 UpdateWindow(hWnd); //刷新用户区 hInst=hInstance; //将应用程序句柄传递给全局变量
while(GetMessage(&Message,0,0,0)) { if(!IsDialogMessage(hDlg,&Message)) //若是对话框消息,发往对话框处理函数 { TranslateMessage(&Message); //消息循环 DispatchMessage(&Message); } } return Message.wParam; }
long WINAPI WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { switch(iMessage) { case WM_CREATE: hDlg=CreateDialog(hInst,"Show",hWnd,(DLGPROC)DlgProc); break; (续前表) case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_SHOW: //hDlg=CreateDialog(hInst,"Show",hWnd,(DLGPROC)DlgProc); ShowWindow(hDlg,SW_SHOW); break; case IDM_HIDE: //DestroyWindow(hDlg); ShowWindow(hDlg,SW_HIDE); break; case IDM_EXIT: DestroyWindow(hDlg); SendMessage(hWnd,WM_DESTROY,0,0); break; } break; case WM_DESTROY: PostQuitMessage(0); break; default: return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } return 0; }
//对话框处理函数 BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam) { switch(message) { case WM_INITDIALOG: return 1; } return 0; } 编译并调试程序,程序运行结果见第三部分 4. 为程序加载图标
设计图标并在应用程序中加载 在定义窗口类时加载图标: WndClass.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON)); |
|
程序运行结果运行结果如下图:
程序运行后点击"菜单",显示菜单项
点击"显示"菜单,显示对话框 |
|
问题与改进: 1.最初显示与隐藏对话框直接使用: hDlg=CreateDialog(hInst,"Show",hWnd,(DLGPROC)DlgProc); 与 DestroyWindow(hDlg); 创建与销毁对话框以达到对话框的显示与隐藏效果,这样可以达到预期效果; 后面为了提高程序效率,改为在窗口创建时创建对话框,并在"显示"与"隐藏"菜单下使用 ShowWindow(hDlg,SW_SHOW); ShowWindow(hDlg,SW_HIDE); 来直接显示与隐藏对话框。 改进后可以提高对话框的加载速度(对于较大的对话框资源更为有效)并且可以保持对话框的状态,隐藏之后再显示对话框状态不会改变(对于在对话框中的文本框或者选框之类的控件有很重要的意义) 2. 创建图标资源之后要注意使用 WndClass.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON)); 将图标设置为程序图标。 3.注意区别主窗口消息和对话框的消息 if(!IsDialogMessage(hDlg,&Message)) //若是对话框消息,发往对话框处理函数 { TranslateMessage(&Message); //消息循环 DispatchMessage(&Message); } |
资源在Windows编程中的应用的更多相关文章
- 资源在windows编程中的应用----菜单
资源在Windows编程中的应用 资源 加速键.位图.光标.对话框.菜单.字符串.工具条 1.菜单的创建 菜单由以下组成部分: (1)窗口主菜单条 (2)下拉式菜单框 (3)菜单项热键标识 (4)菜单 ...
- 第七章 资源在Windows编程中的应用 P157 7-8
资源在基于SDK的程序设计中的应用实验 一.实验目的 1.掌握各种资源的应用及资源应用的程序设计方法. 二.实验内容及步骤 实验任务 1.熟悉菜单资源的创建过程: 2.熟悉位图资源的创建: 3.熟 ...
- 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 ...
- Windows编程中回调函数的使用心得(MFC篇)
回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定 ...
随机推荐
- OpenvSwitch 解读
OpenvSwitch 解读 报文匹配流程参考下图 调用流程(内核): ovs_vport_receive->ovs_dp_process_received_packet->ovs_flo ...
- 简单版nginx lua 完成定向流量分发策略
本文链接:https://www.cnblogs.com/zhenghongxin/p/9131362.html 公司业务前端是使用 “分发层+应用层” 双层nginx架构,目的是为了提高缓存的命中率 ...
- 二叉堆的实现(数组)——c++
二叉堆的介绍 二叉堆是完全二元树或者是近似完全二元树,按照数据的排列方式可以分为两种:最大堆和最小堆.最大堆:父结点的键值总是大于或等于任何一个子节点的键值:最小堆:父结点的键值总是小于或等于任何一个 ...
- SQL一些问题
什么是索引: 一般说法:索引是与表关联的磁盘上结构,可以加快从表中检索行的速度.索引包含由表中的一列或多列生成的键.这些键存储在一个结构中,使 SQL Server 可以快速有效地查找与键值关联的行. ...
- uiautomatorviewer 双击闪退问题解决
最近在学习app自动测试,结果在打开uiautomatorviewer查看app界面元素时,就出现了闪退的问题,找了很多很多方法,最后终于可以解决了,详情请继续往下看 首次安装adt的步骤 将下载的压 ...
- jq02--基础函数
jq是一个js函数库,主要是为事件处理特别设计的,现在我们继续学习一些jq函数. 1.jq效果: 显示与隐藏: $().hide(speed,callback) speed--"slow&q ...
- yolov3源码分析keras(一)数据的处理
一.前言 本次分析的源码为大佬复现的keras版本,上一波地址:https://github.com/qqwweee/keras-yolo3 初步打算重点分析两部分,第一部分为数据,即分析图像如何做等 ...
- Spark开发环境
1. Win7下利用Intellij IDEA构建Spark开发环境 前提:Intellij IDEA Community 免费版下载(最新版14.0.1),Scala插件下载(最新版scala-in ...
- Android 手势识别—缩放
上一篇讲解了手势识别中的点击和双击事件的识别,用到的是GestureDetector类和GestureDetectorCompat类,用于监听用户触摸屏幕中的简单动作. 缩放 基本用法如下,可以通过缩 ...
- Linux的帮助文档命令
Linux的帮助文档命令 1.man page man是manual(操作手册)的简写,使用方式: man [指令] man date 在显示的内容中查找内容: / + 搜索你的关键字 上下左右键来查 ...






