SetParent函数背后的意义

Private DeclareFunction SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

这样的一段代码想必大家都不陌生吧!没错,这就是今天要说的SetPrent函数,机房收费系统中一定会出现的函数。大家在此一定和我一样有不少的疑惑。下面就来简单的谈谈我对这个函数的理解和认识。

概念

  • SetParent:它就是一个API函数,应用程序可以使用SetParent函数来设置弹出式窗口,层叠窗口或子窗口的父窗口。新的窗口与窗口必须属于同一应用程序。

我的理解就是:改变某个子窗体的父窗体(其实也就是给孩子换个新爹)

声明方法

Private DeclareFunction SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
  • 函数原型HWND SetParent(HWND hWndChild,HWND hWndNewParent)

参数

  • hWndChild :子窗口句柄
  • hWndNewParent:新的父窗口句柄

  • 注意:新的父窗口句柄。如果该参数是NULL,则桌面窗口就成为新的父窗口。如果参数为HWND_MESSAGE,则子窗口成为消息窗口。

  • 具体使用:在模块中声明setparent函数。然后在要成为子窗体的窗体加载事件中写入
Call SetParent(Me.hwnd, frmmain.Picmain.hwnd)
Me.WindowState = 2

  • 注意:hwndchild和hwndnewparent只是一个容器控件,它有很多的作用,不仅仅是给窗体设置父窗体,还可以给控件设置容器控件,以及可以把窗体放到容器控件中去。
  • 其实这个函数从表面看:Set——Parent;翻译过来的字面意思:安排——容器。具体也就是说给一个窗体安排放置它的容器,所以A ,B 窗体之前是没有从属关系的。我们要想让A窗体放置到B窗体中无需先让A 成为B 子窗体。

返回值

如果函数成功,返回值为子窗口的原父窗口句柄;如果函数失败,返回值为NULL。若想获得多错误信息,请调用GetLastError函数。

思考

如果要把一个按钮放到另一个窗体上(另一个窗体可以是其他程序中的):

setparent command1.hwnd,&hxxxxx   '( 假设&hxxxxx是另一个窗体的句柄值) 

你点击那个放在桌面上的按钮会不会执行原本command_click事件中的代码呢?那么他的原理到底是什么呢?

总结

很多看似简单的知识,经过细细的思考,深入的挖,我们将会得到什么?

猜你喜欢

转载自blog.csdn.net/whc888666/article/details/80817739
今日推荐