windows资源文件(.rc)是如何变成窗口控件的

在Visual C++使用资源来创建对话框,菜单,以及一些自定义控件,实际是为了减少基于Win32 SDK

编程开发人员在编写Application时创建大量窗口,和控件(实际上也是窗口)的痛苦(大量使用

CreateWindow,还要设置其中的参数,有些参数,初始化显示位置X, Y,窗口(或控件)的宽度和高度等

,使用CreateWindow来设置非常不直观,只能凭经验来设置合理的位置和大小)。

如下图所示,倘若我们用编程的方式来实现如下对话框,肯定是可以的但是太麻烦了,这个对话框

有好多个控件和资源,如:菜单,组合框,文本输入框,按钮,同时还要设置这些控件自身的若干个性

质,还有对话框本身的许多性质,非常麻烦,使用资源这一概念,则大大简化了我们的编程,我们可以

使用,可视化的工具,来编辑这些窗口和控件。

/
//
// Dialog
//
MYDIALOG DIALOG DISCARDABLE  0, 0, 200, 126
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
MENU IDM_MENU
FONT 10, "System"
BEGIN
    DEFPUSHBUTTON   "计算圆的面积",IDOK,133,56,57,14
    EDITTEXT        IDC_EDIT1,54,38,40,14,ES_AUTOHSCROLL
    GROUPBOX        "请输入圆的直径",IDC_STATIC,16,22,111,40
    EDITTEXT        IDC_EDIT2,54,86,40,14,ES_AUTOHSCROLL
    GROUPBOX        "圆的面积:",IDC_STATIC,16,71,110,40
END

/
//
// Menu
//
IDM_MENU MENU
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "&Open",                       IDM_FILE_OPEN
        MENUITEM "&New",                        IDM_FILE_NEW
    END
    POPUP "&Edit"
    BEGIN
        MENUITEM "&Cut",                        IDM_EDIT_CUT
        MENUITEM "C&opy",                       IDM_EDIT_COPY
        MENUITEM "&Paste",                      IDM_EDIT_PASTE
    END
    POPUP "&Help"
    BEGIN
        POPUP "&View"
        BEGIN
            MENUITEM "Content1",                    IDM_VIEW_CONTENT1
            MENUITEM "Context2",                    IDM_VIEW_CONTEXT2
        END
    END
END
    使用Visual C++中自带的资源编辑器实际上就是创建一个资源描述文件(.rc文件)该文件中记录了

我们通过可视化工具来“创建”(实际上只是一个可视化表现而已,正真的窗口和控件的创建是在

Application使用该资源时)的窗口和控件的大量参数,这些参数将有操作系统来维护,当我们的

Application需要资源时,由操作系统根据这些参数来创建窗口和控件。

但是有一个问题:这些窗口和控件都是由系统帮我们创建的,所以我们无法直接获得它们的句柄

(Handle),这样我们就没有办法使用许多SDK API来和这些窗口及控件来交互(如像:我们打算向上图

所示的对话框中的文本输入框发送一条WM_GETTEXT消息来获得当前文本框的内容,这是就需要知道该文

本输入框控件的窗口句柄(因为要使用SendMessage函数,该函数的第一个参数就是,目的窗口的句柄)

),为了解决这个问题,Windows采用了一种控件ID的策略,控件ID:唯一地标示了一个窗口或控件,它

(控件ID)是由我们(Programer)来设置的,这些控件ID,系统当然也是可见的,当系统创建控件时,

系统将这些ID和其所对应的窗口的句柄(因为是系统创建的窗口,系统当然应该维护着这些窗口的句柄

)一一对应起来,这样当我们的Application需要,某一个控件的句柄时就可以使用,一个约定好的API

来通过控件ID来查询其对应的句柄,这个API就是HWND WINAPI GetDlgItem(__in_opt HWND hDlg, __in

int nIDDlgItem);这个API的第一个参数,要求我们传入,我们所要查询的控件属于哪一个窗口(实际上

就是父窗口(常常是对话框)句柄,想一下该句柄如何得来,狠简单啊,少年,我们在使用对话框的时

候,肯定注册了对话框窗口过程

INT_PTR WINAPI DialogBox(
  __in_opt  HINSTANCE hInstance,
  __in      LPCTSTR lpTemplate,
  __in_opt  HWND hWndParent,
  __in_opt  DLGPROC lpDialogFunc
);

注意第四个参数,实际上就是对话框窗口过程
INT_PTR CALLBACK DialogProc(
  __in  HWND hwndDlg,
  __in  UINT uMsg,
  __in  WPARAM wParam,
  __in  LPARAM lParam
);

注意第一个参数,这就是对话框的句柄啊,所以,可以在处理WM_COMMAND等消息的时候可以直接使用它
,以及要查询的控件ID,就可以得到该控件的句柄了,这样就可以调用大量的API函数来和控件进行交互

了!!!!!
 
另一个API
int WINAPI GetDlgCtrlID(
  __in  HWND hwndCtl
);
========

rc,res,resx

http://blog.csdn.net/dadahacker/article/details/5525853
  
rc是windows窗体程序资源文件(文本)

.res是2进制资源文件 是.rc编译成的

.resx 资源文件格式由 XML 项组成,这些 XML 项指定 XML 标记内的对象和字符串。.resx 文件的一个

优点在于,当用文本编辑器(例如记事本或 Microsoft Word)打开此类文件时,可以对其进行写入、分

析和操纵。查看 .resx 文件时,如果嵌入对象(如图片)的二进制格式是资源清单的一部分,则可以实

际看见此二进制信息。除了此类二进制信息之外,.resx 文件是完全可读和可维护的。
========

资源文件相关学习总结相关推荐

  1. Symbian 资源文件解析

    一.何为资源文件:<?XML:NAMESPACE PREFIX = O /> 在symbian应用程序中,资源文件指的是后缀名为.rss的文件,每个应用程序至少要有一个与之关联的资源文件. ...

  2. Octave相关学习资源整理出

    Octave相关学习资源整理 斯坦福大学机器学习公开课第五课是"Octave Tutorial",主要是机器学习公开课的编程作业需要用Octave完成,同样需要用Octave完成作 ...

  3. maven 打包时缺少文件_(三)Java资源文件和路径相关扫盲

    本来打算接着上文直接写登录功能的,顺便介绍下SpringSecurity,但是SpringSecurity和Spring以及SpirngBoot是如何衔接的又是个较为复杂的事情.看了下SpringBo ...

  4. Java官方相关资源文件的获取教程

    Java官方相关资源文件的获取教程 说明 类库源文件的获取 JDK文档的下载 阅读联机API文档 Java语言和虚拟机规范:Java Language and Virtual Machine Spec ...

  5. 编译后没有taget文件夹_maven资源文件的相关配置才会在编译后的target里面有

    建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件. src/main/java和src/test/java 这两个目录中的所有*.java文件会分别 ...

  6. 控制文件夹递归深度_TensorFlow、Pytorch和Keras的样例资源(深度学习初学者必须收藏)...

    TensorFlow.Keras和Pytorch是目前深度学习的主要框架,也是入门深度学习必须掌握的三大框架,但是官方文档相对内容较多,初学者往往无从下手.本人从github里搜到三个非常不错的学习资 ...

  7. SilverLight学习笔记--关于Silverlight资源文件(如:图片)的放置位置及其引用

    Silverlight中有许多资源文件,例如:图片,音频.视频,甚至XML和XAML等非执行数据文件,在Silverlight中根据资源所处位置的不同而有所区别.    资源文件可分布在我们Silve ...

  8. VB学习——各种 文件 相关的知识

    选择文件 ① 使用CommonDialog部件 引用Microsoft Common Dialog Control 6.0(SP6)部件 ②添加CommonDialog控件 ③创建一个ListView ...

  9. Python:pyinstaller如何将一个项目的.py和相关资源文件打包生成.exe文件

    前言 写这篇博文真属于意外,因为小编不是以学术为目的的,而仅仅是以讨女朋友喜欢为目的,所以文中略有狗粮.撇开这些,相信大家找到为了找到一个可行方案已经寻寻觅觅良久,本文或许便是你的"真命天子 ...

最新文章

  1. 先发制人!Waymo将首推商用载人自动驾驶服务,Uber们怕不怕?
  2. 网站采集内容对优化工作很有帮助
  3. 乌镇现场·帅初:公有链的未来——链上校验,链下计算
  4. java 事件分发线程_Java事件调度线程说明
  5. Boost Part III. 函数对象与高级编程 Library 10. Lambda 用法
  6. [Django]网页中利用ajax实现批量导入数据功能
  7. C++突破private的方案
  8. centos radius mysql_centos6.5下安装freeradius2.2.9+mysql
  9. 数据结构与算法之单链表
  10. C#学习网站资源一览
  11. 求最短路的多种方法比较及应用
  12. HDFS的命令行使用【常用 hdfs 命令】
  13. 删除android电视软件下载,智能电视Root并删除预装
  14. tolower c语言,tolower()
  15. 基于协同过滤的电影推荐
  16. 【Qt开发】编译时报“undefined reference to“问题的解决方案
  17. 20年21年嵌入式校招薪资大曝光!!!
  18. php7 字符串转数字,strtoupper()
  19. 计算机视觉四大基本任务介绍
  20. 2020计算机考研复试

热门文章

  1. uni-app接口封装
  2. sql like语句中的通配符:百分号、下划线和escape
  3. 网页中返回顶部代码(多种方法)另附注释说明
  4. leetcode C++ 48. 旋转图像 给定一个 n × n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。
  5. C++ ,leetcode 43. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式
  6. C# WinForm获取程序所在路径方法
  7. [YTU]_2489( C++结构体之统计最高最低分)
  8. MATLAB 图像函数(第五章) 图像空间变换和图像配准
  9. oracle rman 架构图,图解Oracle RMAN备份入门
  10. 用Python对XML读取和处理