HWND这种类型是一种指针吗?

发布网友 发布时间:2022-04-23 21:18

我来回答

2个回答

热心网友 时间:2023-10-09 22:42

百度词库里有:hWnd含义
  h 是类型描述,表示句柄, Wnd 是变量对象描述,表示窗口,所以hWnd 表示窗口句柄   通俗地说,如果把一个到处跑的人当作指针的话,那么HWND就是该人的身份证----我想应该是身份证号码
编辑本段hWnd 属性
  返回窗体或控件的句柄(注意 OLE 容器控件不支持该属性。句柄:是由操作环境定义的一个唯一的整数值,它被程序用来标识或者切换到对象,如窗体或控件等。)。
语法
  object.hWnd   object 所在处代表一个对象表达式,其值是“应用于”列表中的一个对象。
说明
  Microsoft Windows 运行环境,通过给应用程序中的每个窗体和控件分配一个句柄(或 hWnd)来标识它们。hWnd 属性用于Windows API调用。许多 Windows 运行环境函数需要活动窗口的 hWnd 作为参数。   注意 由于该属性值在程序运行时可以改变,绝对不要将 hWnd 存储在变量中。   如果 User Control 的 Windowless 属性设为 True, 则 hWnd 属性将返回 0 。   作用对象:    CheckBox 控件   ComboBox 控件   CommandButton 控件   DataGrid控件   DirListBox 控件   DriveListBox 控件   FileListBox 控件   Form 对象、Forms 集合   Frame 控件   HScrollBar、VScrollBar 控件   ListBox 控件   MDIForm 对象   OLE 容器控件   OptionButton 控件   PictureBox 控件   PictureClip 控件   TextBox 控件
示例
  这个例子强制窗体保持在最前面。要试用此例,先创建一个窗体(不是一个 MDI 子窗体),然后为该窗体创建一菜单叫做 Main。在其中插入一子菜单叫做 Always On Top,并且把它的名字设置为 mnuTopmost。利用“工程”菜单中的“添加模块”命令创建一个新模块。把 Declare 语句粘贴到新模块的声明部分,确保该语句在一行,并且没有断点或隐藏字。然后把 Sub 过程粘贴到窗体的声明部分并按 F5 键。   ' 声明 Windows 例程.   ' 该语句应在模块中。   Declare Function SetWindowPos Lib "user32" Alias_ "SetWindowPos" (ByVal hwnd As Long, ByVal_ hWndInsertAfter As Long, ByVal x As Long, ByVal y As_ Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags_ As Long) As Long   ' 设置一些常数值(从 WIN32API.TXT).   Const conHwndTopmost = -1   Const conHwndNoTopmost = -2   Const conSwpNoActivate = &H10   Const conSwpShowWindow = &H40   Private Sub mnuTopmost_Click ()   ' 从菜单中加入或删除检查标志.   mnuTopmost.Checked = Not mnuTopmost.Checked   If mnuTopmost.Checked Then   ' 打开 TopMost 属性.   SetWindowPos hWnd, conHwndTopmost, 0, 0, 0, 0,_ conSwpNoActivate Or conSwpShowWindow   Else   ' 关闭 TopMost 属性.   SetWindowPos hWnd, conHwndNoTopmost, 0, 0, 0,_ 0, conSwpNoActivate Or conSwpShowWindow   End If   End Sub   无论何时只要 ComboBox 收到焦点,在这个例子中都会自动放下 ComboBox 控件的列表部分。要试用此例,”创建一个包含 ComboBox 控件和 OptionButton 控件的新窗体(只为获得焦点用)。用先获得“工程”菜单中的“添加模块”命令创建一个新的模块。把 Declare 语句粘贴到新模块的声明部分,确保该语句在一行,并且没有断点或自动换行。然后把 Sub 过程粘贴到窗体的声明部分,并按 F5 键。用 TAB 键将焦点移动到 ComboBox 以及从 ComboBox 移出。   Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long   Private Sub Combo1_GotFocus ()   Const CB_SHOWDROPDOWN = &H14F   Dim Tmp   Tmp = SendMessage(Combo1.hWnd, CB_SHOWDROPDOWN, 1, ByVal 0&)   End Sub
对象表达式
  说明具体对象的表达式,可以包含对象的容器。例如,应用程序可以拥有 Application 对象,其中包含 Document 对象,而 Document 对象又包含 Text 对象。   Windows API Windows API(应用程序编程接口)由函数、消息、数据结构、数据类型以及语句组成,它们可在创建在 Microsoft Windows 下运行的应用程序中使用。API 中使用最多的部分是从 Windows 中调用 API 函数的代码元素,包括过程声明(Windows 函数)、用户自定义类型的定义(用来传递到函数中的数据结构),以及常数声明(传递给函数以及从函数中返回的值)。

热心网友 时间:2023-10-09 22:42

虽然MS用void×来定义HWnd,但是不能把它当作一个指针。它是一个特殊的“句柄”,你可以认为它是微软用来查一个内部表的一个键。它“指向”的内存饼不属于它,也不保存任何和这个窗口有关的信息

另外一个关键的证据,HWND是跨进程可见的,而指针从来都是属于某个特定进程的

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com