windows编程学习——句柄

Windows编程学习之句柄

1       介绍:

        句柄,是整个Windows编程的基础,一个句柄是指使用一个唯一的整数值(32位OS中四字节长/64位OS中8字节长),来标识应用程序中不同对象和同类中的不同实例。应用程序能通过句柄访问相应对象的信息。

1.1         定义:句柄是OS内标志程序建立的唯一整数

1.2         由来:源于内存管理机制-虚拟地址

1.3         重要性:是整个Windows编程的基础

1.4         与指针的区别:

        特别强调,句柄不是指针,句柄只是对象的一个唯一标识。程序不能利用句柄来直接阅读文件中的信息,如果句柄不在I/O文件中,那么它的存在也没有了意义。

而指针则是直接指向对象的内存地址,程序可以通过指针直接访问对象。所以在学习中千万不要混淆两者。

2       由来

         Windows 之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,因为在程序运行时,数据的地址需要时常的变动,变动以后就需要重新记录,因此系统用句 柄来记载数据地址的变更。

也可以这么理解,句柄就是OS老大为了方便管理和调度自己手上时常变动的资源,而设置的一种管理机制,无论数据怎样动态变动,在它变动后都需将最新的地址上报给句柄,然后让句柄记录,当下次在用到时,只需要问句柄,便能直接找到相应的数据。

3       原理

          Windows程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的。相反,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

句柄是一个标识符,是拿来标识对象或者项目的。它就像我们的车牌号一样,每一辆注册过的车都会有一个确定的号码,不同的车号码各不相同,但是也可能会在不同的时期出现两辆号码相同的车,只不过它们不会同时处于使用之中罢了。从数据类型上来看它只是一个32(64)无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。在WINDOWS编程中会用到大量的句柄,比如:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC设备描述句柄),HICON(图标句柄)等等。这当中还有一个通用的句柄,就是HANDLE

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows编程中,button(按钮)是系统内置的窗口子类型之一。按钮是一种常用的用户界面元素,通常用于触发操作或执行某些任务。 在Windows API中,可以使用CreateWindow函数创建一个按钮窗口。以下是创建按钮窗口的示例代码: ```c++ HWND hWndButton = CreateWindow( L"BUTTON", // 窗口类名 L"Click me", // 窗口标题 WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, // 窗口风格 10, 10, // 窗口位置 100, 30, // 窗口大小 hWndParent, // 父窗口句柄 (HMENU)ID_BUTTON, // 控件标识符 hInstance, // 应用程序实例句柄 NULL // 指向窗口创建参数的指针 ); ``` 上述代码中,第一个参数指定了窗口类名为“BUTTON”,表示创建一个按钮窗口。第二个参数是窗口标题,这里设置为“Click me”。第三个参数指定了窗口的风格,这里使用了WS_VISIBLE和WS_CHILD风格,表示按钮可见并且是父窗口的子窗口。BS_PUSHBUTTON表示创建一个普通的按钮,还可以使用其他风格创建不同类型的按钮。接下来的四个参数分别是窗口的位置和大小。第七个参数是父窗口的句柄,表示将按钮添加到父窗口中。第八个参数是控件标识符,用于在程序中标识该按钮。最后两个参数分别是应用程序实例句柄和窗口创建参数。 除了使用CreateWindow函数创建按钮窗口,还可以使用DialogBox函数创建对话框,其中包含多个按钮控件。可以使用CreateWindowEx函数创建更多类型的窗口子类型,例如复选框、单选按钮、组合框等。在Windows编程中,不同类型的窗口子类型都有各自的风格和消息处理函数,需要根据实际需求选择合适的窗口子类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值