精华内容
下载资源
问答
  • setparent函数
    千次阅读
    2021-07-02 10:40:12

    参考
    参考

    关于QWidget::setParent()函数的使用

    setParent可以用来切换一个QWidget所对应的父窗口,因为QT中所有的widget都是基于父子关系的。

    这里特别要注意的是,setParent是有两个接口的,一个是setParent(QWidget *parent),一个是setParent(QWidget *parent, Qt::WindowFlags f),其中如果调用第一个参数的话,parent会重新设置窗口的标志位,如果希望保持原来的窗口标志位,则必须要指定一个参数。举一个简单的例子,如果你原来的窗口标志位是Qt::Window|Qt::FramelessWindowHint(一个自由窗体,不带边框),那么你需要将这个参数带到flags中,如果不指定的话,则会将其窗口属性修改为QWidget了(会跟父窗口合并,并且会将窗口位置移动到(0,0)的位置)

    QWindowType详解

    • Qt::Widget : QWidget构造函数的默认值,如新的窗口部件没有父窗口部件,则它是一个独立的窗口,否则就是一个子窗口部件。
    • Qt::Window : 无论是否有父窗口部件,新窗口部件都是一个窗口,通常有一个窗口边框和一个标题栏。
    • Qt::Dialog : 新窗口部件是一个对话框
    • Qt::Sheet : 新窗口部件是一个Macintosh表单。
    • Qt::Drawer : 新窗口部件是一个Macintosh抽屉。
    • Qt::Popup : 新窗口部件是一个弹出式顶层窗口。
    • Qt::Tool : 新窗口部件是一个工具窗口,它通常是一个用于显示工具按钮的小窗口,如果一个工具窗口有父窗口部件,则它将显示在父窗口部件的上面,否则,将相当于使用了
    • Qt::WindowStaysOnTopHint:(展示)显示在最上层。
    • Qt::Tooltip : 新窗口部件是一个提示窗口,没有标题栏和窗口边框.
    • Qt::SplashScreen : 新窗口部件是一个欢迎窗口,它是QSplashScreen构造函数的默认值。
    • Qt::Desktop : 新窗口部件是桌面,它是QDesktopWidget构造函数的默认值。
    • Qt::SubWindow : 新窗口部件是一个子窗口,而无论该窗口部件是否有父窗口部件。
    • Qt::X11BypassWindowManagerHint : 完全忽视窗口管理器,它的作用是产生一个根本不被管理器的无窗口边框的窗口,此时,用户无法使用键盘进行输入,除非手动调用QWidget::ActivateWindow()函数。
    • Qt::FramelessWindowHint : 产生一个无窗口边框的窗口,此时用户无法移动该窗口和改变它的大小。
    • Qt::CustomizeWindowHint : 关闭默认的窗口标题提示。
    更多相关内容
  • SetParent函数背后的意义

    千次阅读 2018-06-26 16:56:24
    Private DeclareFunction SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long 这样的一段代码想必大家都不陌生吧!没错,这就是今天要说的...
    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事件中的代码呢?那么他的原理到底是什么呢?

    总结

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

    展开全文
  • Setparent函数用法技巧

    万次阅读 2014-03-18 10:53:23
    SetParent是一个API函数,它的作用是为一个物体指定一个新的父窗体。(父窗体严格来说应该是容器,我是这么理解的).也就是把一个物体转到另一个物体上去  Setparent 的用法相当简单  语法是:  Setparent...
    SetParent是一个API函数,它的作用是为一个物体指定一个新的父窗体。(父窗体严格来说应该是容器,我是这么理解的).也就是把一个物体转到另一个物体上去 

    Setparent 的用法相当简单 

    语法是: 
    Setparent  物体句柄,目标句柄 

    不过要想使它真正有实用价值却需要一定的知识及技巧. 

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

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


    那么你会发现,你点击那个放在桌面上的按钮将不会执行原本command_click事件中的任何代码了! 

    要解决的方法是多种多样的 

    假如你只是想让它执行代码,并不想进一步了解WIN的消息运作机制,那么我建议你把这个按钮放进一个容器,比如picturebox,或是farme,再把这个容器转到另一个窗体上去.而不是把按钮转到窗体上.那么这个按钮就会执行原本clic中的代码了.只要调整容器的大小与按钮大小一样,那么感觉外观上是看不出来有容器存在的. 

    假如你想了解WIN的消息运作机制,那么我建议你使用子类来解决这一问题. 
    在这得先说简单说明一下WIN的消息机制运作,简单的说就是"以事件为基础,以消息驱动" 

    其实WIN是不认事件的.所谓的"事件"只是一些开发环境为了简化开发者的代码编写量而把一大堆系列的消息封装而成的.作个形象的比喻:假如存在一个"吃饭"的事件.那么其中就应该包括"端碗"\"拿筷子"\"把饭挑进嘴里"\"放碗"\"放筷子"等几个消息.我们就会处理这一系列的消息而把它归结为一个事件的完成. 

    我先简单说明一下一个按钮单击事件发生时会发生哪些消息:(因为发生的消息太多,只说出重要的几条:) 
    首先,鼠标向按钮点下时,系统就向按钮发送一个鼠标左键点下的消息,同时再向它发送一条物体风格改变的消息(使按钮的状态为凹下).再发送一条重画物体的消息(改变原有的凸起外观,使按钮画成凹下的外观).这样我们就看到了按钮被鼠标左键点下时的样子。然后再发送鼠标左键抬起的消息,(中间可能会发生鼠标移动的消息,但是我们可以不管它),继续接着发送物体风格改变的消息(使按钮状态为凸起,也就是回复正常),再接着发送一个按钮重画的消息。到最后,按钮再向所在的容器发送一条命令消息作为点击事件的终结,即点击成功。(在其中鼠标被抬起的消息中,有一些消息带的参数是用以判断鼠标是否正处于按钮区域坐标内的。这个我们暂时也可以不必理会) 

    在上面的消息中,你可以随意截取一个消息作为判断按钮是否被点下,比如截下鼠标左键点下wm_lbuttondown消息,也可以截下wm_lbuttonup弹起消息,其中再用API来取得弹起时的鼠标坐标,就能知道它是否被点击了。 

    不过直接判断按钮在最后点击完毕时发送出去的那条消息却可以直接判断出按钮是否被点击!即wm_command消息 
    但这条消息因为不是系统发送给按钮的,而是由按钮发送给系统的,所以许多人会忽略,因为许多人都已经习惯于控制按钮只对按钮拦截消息,但因为子类只能拦截物体得到的消息而不能拦截物体发送的消息,所以这条wm_command消息用得并不是很多。 

    所以我们只需要对它的容器进行这条消息的拦截就能得知它是否被点击了! 

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

    那我们只需要对“&hxxxxx”进行消息拦截,当发现得到wm_command消息时,判断它的wprarm参数及lprarm参数,假如wprarm参数不为0,且lprarm为command1.hwnd时,那我们就知道,command1被点击了.通过判断lprarm还可以判断其他的按钮是否被点击!这样我们就能一次性放上多个按钮了,再对多个按钮进行判断是哪个被点击. 



    注意:按钮结束后发送的消息不是发送给它的窗体,而是发送给它的容器! 
    我曾见过一个高手因为不知道这一点而只对它的窗体进行这条消息的拦截,结果抱怨说老是拦不到而造成一个功能无法实现.
    所以应该先判断这个按钮所处的容器.一般情况下,指定的新父窗体就是容器了. 


    还有,向物体的容器拦截一些命令消息如wm_command消息应用得很广泛. 
    比如说用API新添了一些菜单,需要让这些菜单执行操作,就需要拦截窗体的wm_syscmd(我一下也忘了这个还是wm_syscommand).再通过判断它后面的两个参数值就可以让它执行相应的操作了.因为菜单不可能放入PICTUREBOX之类的容器里,所以一般只截窗体的消息即可.
    展开全文
  • 控件命名和setparent函数——机房遇到问题(一)

    千次阅读 热门讨论 2014-12-21 17:21:13
    这个函数可以在VB6.0的API函数浏览器里面找到,详细了解参考 setparent百度百科 。 使用方法: 1.声明。可以用vb6.0API浏览器。语句Private Declare Function SetParent Lib "user32" (ByVal hWndChild ...
    从学生到机房其实变化还是很大的,首先体会到的是i+1的模式,在学生的基础上,机房是有一点难度的,可是只要“跳一跳”却是可以拿得到。其实本来想写不写关于这块的博客呢?我是这么晚才进行这块的,写出来也是和别人的差不多,但是想到米老师说的:写出来的就是用文字整理你的生命,是我自己的成长的记录,所以决定,以后哪怕是晚了,也要写,这是我自己的。
    说一下遇到的问题吧,原来敲学生的时候,是有源代码的,所以命名没有问题。而且也没有过多的关注,而现在呢?窗体控件的名字必须自己起,这就是首先的一个问题,虽然我们可以仿照学生的格式命名,但是起名的时候这首先就考了一下自己的英文水平,所以学英语是重中之重。
    第二就是大家都遇到的如何在MDI主窗体上添加控件的问题,首先要在MDI主窗体上加载picture控件,但是直接用picturebox之后,子窗体是不能显示在上层的,具体原因可以参考九期师哥 卓家进的博客。而解决的方法就是用到setpicture函数。这个函数可以在VB6.0的API函数浏览器里面找到,详细了解参考 setparent百度百科
    使用方法:
    1.声明。可以用vb6.0API浏览器。语句Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long。
    2.声明之后,如果想要在菜单的click事件中触发这个事件那么只要添加以下代码:
    SetParent 要显示在上方的窗体名.hWnd ,父窗体名.hWnd
    这样就可以在picturebox之上显示主窗体了,估计大部分同学们都是这样解决了,但是我的确还是出现了问题以下是截图:

    没有单机菜单前

    单机菜单后

    用鼠标拉开后

    在单机菜单之后可以看到在picture之后又蓝条显示出,而且可以用鼠标拉开,确实是希望显示在picturebox上面的窗体,但是确不显示标题栏。这不是我们想要的结果,为何会这样呢?因为picture的Align属性设置为1,靠上,而选择其他属性会分别显示在主窗体的下、左或右,但均不能显示出完整的窗体。

           解决这个问题的方法是什么呢?

           有两种:1.将子窗体的BorderStyle属性设置为1——Fixed Single。固定窗体大小,牺牲了窗体的可调节性,如果不要求窗体可以调节大小可以采取,并且相对简单。

           2.在显示窗体的触发事件中添加一下代码

           对应子窗体名.width=数字

           对应子窗体名.height=数字

    这种方法并不空难,只不过是比较繁琐,并且不牺牲窗体大小的可调节性。

    展开全文
  • setparent函数求助

    2013-05-12 02:40:24
    SetParent(hRenderHwnd,hwnd); hRenderHwnd是获取的谷歌地图的窗口句柄,hwnd是获取的主程序的窗口,调试时提示“error C2660: 'SetParent' : function does not take 2 parameters”,但是我看SetParent的原形声明...
  • 在微软的官方文档中,说 SetParent 可以在进程内设置,也可以跨进程设置。当使用跨进程设置窗口的父子关系时,你需要注意...关于 SetParent 函数设置窗口父子关系的文档可以看这个: SetParent function (winuser.h...
  • Unity3d SetParent使用小技巧记录

    千次阅读 2019-07-19 14:47:00
    Unity3d的SetParent的API给了两个重载方法。 transform.SetParent(obj) : 此方法就是我们经常用的,场景中obj被克隆出来是直接放在最外层的,obj使用的也是世界坐标位置。此时使用SetParent(obj)会直接改变obj的...
  • Unity中的SetParent和.parent

    千次阅读 2021-04-15 20:27:46
    SetParent方法中有两个参数,第二个参数表示是否使用世界坐标,默认为true 例如下面这段代码,如果SetParent的第二个参数为true,child的位置将会是(-1,-1,-1) using UnityEngine; public class Test : ...
  • MFC子窗口和父窗口(SetParent,SetOwner) 一、概念和区别  在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表。系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口。这个...
  • 父datawindow事件或函数 一 PB菜单带参数调用父窗口事件或函数 调用父窗口函数 ParentWindow.Dynamic wf_add() 通过菜单带参数调用父窗口函数 ParentWindow.Dynamic wf_add(‘1’) 调用父窗口事件 ParentWindow....
  • API函数SetParent

    千次阅读 热门讨论 2016-08-14 10:12:09
    Private DeclareFunction SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long 一.函数功能: 改变某个子窗体的父窗口 二.参数说明 hWndChild :子窗口句柄 hWndNewParent:新...
  • 关于Qt中QWidget的setParent的使用方法

    万次阅读 2016-03-31 11:27:07
    setParent可以用来切换一个QWidget所对应的父窗口,因为Qt中所有的widget都是基于父子关系的,所以如果是布局在一个上面的,那么其子控件的parent应该是上层的QWidget, 这里特别要注意的是,setParent是有两个接口...
  • C#窗体嵌入SetParent的用法

    万次阅读 2014-05-22 15:36:14
    我的理解是,虽然用SetParent强制将普通窗口设置成mdi的父窗口,但是mdi的子级窗口的属性却没有赋予。 解决的思路,调用另一个windows·Api SetWindowLong强制修改mdi的窗口属性。 private const ...
  • LONG GetWindowLong( HWND hWnd,int nIndex ) ...GWL_WNDPROC 得到窗口回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用 GWL_HINSTANCE 得到应用程序运行实例的句柄 GWL_HWND...
  • 此问题是在项目中,因为打开的画面需像DelphiXe的显示风格一样来显示。所有的Form都需要Dock到一个PageControl的容器中,开始的时候...后经验证,此问题需调用API的SetParent来处理,代码如下:  var vPage: Tcx
  • 1.unity transform.parent和SetParent效率差了几万倍?           2.Unity中的Transform.SetParent() 总结:         ...
  • 这里笔者在网上找到了API函数SetParent(),并对网上的错误进行了修改,并给出了简单实例代码。读者可自行测试: Public Class Form1 '作者:章鱼哥,QQ:3107073263 群:309816713 '如有疑问或好的建议请联系...
  • Windows的API函数参考

    千次阅读 2010-02-02 11:34:00
    Api函数函数说明 WIN16可用 WIN95可用 WINNT可用——————————————————————————————————————————————————————AbortDoc 终止一项打印作
  • 史上最完整的Win32API 函数,适合windows编程开发使用,也可以用C++,C#等调用,大约有3000多个API函数。包含了桌面程序开发的所有内容。
  •  这就是说直接用SetParent函数将一个普通窗体设置成其它窗体的父窗体,但是最小化是却跑到了桌面的任务栏里面,而不是存在于子窗体的下方,于是这个方法也被我废掉了。  四、还是利用SetParent函数,但是...
  • MFC SetWindowLong 函数

    2021-03-20 15:33:30
    The function also sets the 32-bit (long) value at the specified offset into the extra window memory.SetWindowLong函数更改指定窗口的一项属性。该函数还可将指定偏移的32位值设置到附加的窗口内存中。 Note ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,937
精华内容 4,374
关键字:

setparent函数