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事件中的代码呢?那么他的原理到底是什么呢?
总结
很多看似简单的知识,经过细细的思考,深入的挖,我们将会得到什么?