社区
API
帖子详情
如何得知窗口 hWnd 是不是MDI类型窗口
二师兄的老公
2003-10-16 10:10:47
先 hWnd = GetActiveWindow();
再判断 hWnd 是否为MDI类型窗口。
怎么做?
...全文
69
9
打赏
收藏
如何得知窗口 hWnd 是不是MDI类型窗口
先 hWnd = GetActiveWindow(); 再判断 hWnd 是否为MDI类型窗口。 怎么做?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kmzs
2003-10-16
打赏
举报
回复
。。。
二师兄的老公
2003-10-16
打赏
举报
回复
可以采用EnumChildWindows函数遍历子窗口的方法。
不过前提必须是至少有一个子窗口开着!
问题解决!给分!
TechnoFantasy
2003-10-16
打赏
举报
回复
我想可能需要用EnumChildWindows函数遍历窗口的子窗口,看里面是否有Windows窗口类型的子窗口
TechnoFantasy
2003-10-16
打赏
举报
回复
MDI主窗口的风格跟普通的窗口是一致的,假设Form1是普通窗口,MDIForm1是MDI父窗口,你可以用下面的代码:
Dim l As Long
l = GetWindowLong(Form1.hwnd, GWL_STYLE)
Debug.Print Hex(l)
l = GetWindowLong(MDIForm1.hwnd, GWL_STYLE)
Debug.Print Hex(l)
l = GetWindowLong(Form1.hwnd, GWL_EXSTYLE)
Debug.Print Hex(l)
l = GetWindowLong(MDIForm1.hwnd, GWL_EXSTYLE)
Debug.Print Hex(l)
可以看到返回的风格是一样的。
二师兄的老公
2003-10-16
打赏
举报
回复
可能是我问题没说清楚。
TechnoFantasy(www.applevb.com) 的方法是检查窗口是否为MDI子窗口。
我要检查的是:窗口是否为MDI主窗口!
TechnoFantasy
2003-10-16
打赏
举报
回复
Option Explicit
Const WS_EX_MDICHILD = &H40
Const GWL_EXSTYLE = (-20)
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Function IsWindowMid(hwnd As Long) As Boolean
Dim x As Long
x = GetWindowLong(hwnd, GWL_EXSTYLE)
If (x And WS_EX_MDICHILD) Then
IsWindowMid = True
Else
IsWindowMid = False
End If
End Function
rainstormmaster
2003-10-16
打赏
举报
回复
笔误,应为getwindowlong
rainstormmaster
2003-10-16
打赏
举报
回复
或者用setwindowlong试试
rainstormmaster
2003-10-16
打赏
举报
回复
试试:
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
if GetParent(hwnd)=0 then
'no
else
'yes
end if
取自定义控件所在
MDI
子
窗口
句柄
vb6取自定义控件所在
MDI
子
窗口
句柄,Usercontrol,vb6,
Mdi
ChildForm_
Hwnd
VB 禁止调整
MDI
窗体大小.rar
VB 禁止调整
MDI
窗体大小,窗体文件一共是2个,一个是主
窗口
文件,一个是
MDI
窗口
文件,实现禁止改变
窗口
大小的功能,我们可以在
MDI
Form中当窗体加载时,,执行以下代码: Private Sub
MDI
Form_Load() Style = GetWindowLong(Me.
hwnd
, GWL_STYLE) '获取
窗口
样式 Style = Style And Not WS_SIZEBOX '禁止调整窗体大小 SetWindowLong Me.
hwnd
, GWL_STYLE, Style'设置新的
窗口
样式 End Sub 执行本代码后,用户无法单击最大化按钮、无法通过拖动功能拉大
窗口
,
窗口
一直保持初设的样式大校
RINGSDK包含界面库和图象库。
RINGSDK包含界面库和图象库。 本项目为编译环境为VC6,需要先安装platform sdk.不断修改中,会陆续上传其他相关文档及DEMO 设置: VC6菜单tools->Options,选择Directoris页,把include,lib目录加入到相应文件列表,如果要调试,需要把libsrc目录下的各个子目录加入到Source files文件列表中。 工程依赖几个第三方库,需要先编译livsrc\free_lib下几个目录的工程,然后打开ringsdk.dsw编译。工程都已经设置好了,编译即可。 由于VC的智能提示不能识别界面库里的宏,因此建议安装VA(Visual.Assist) 创建基于RingSDK的工程: 新建一个Win32 Application的工程,不要让VC写任何代码,空的工程。然后选择菜单Project->settings..., 选择C/C++页,Category选择Code Generation,然后在Use run-time library选择: DEBUG选择Debug Multithreaded RELEASE选择MultiThreaded 工程设置完毕,然后可以加入CPP和H文件了。 类库使用: 1、头文件: 头文件包含"ringmain.h"就可以,如果要使用图象库,还需要包含"ringdib.h" 2、
窗口
类声明:
窗口
定义为如下格式: BEGIN_SETUPWINDOW(
窗口
名,
窗口
类型
) BINNDID(对话框ID) //当
窗口
类型
是对话框才需要写这个宏,且是可选的,即不写也可以 BEGIN_DEF_VAR(初始化标记) //这里定义类成员数据 END_DEF_VAR //这里定义类成员函数 //定义
窗口
消息处理函数 BEGIN_DEFMSG DEFMSG(消息代码) DEFMSGEX(自定义消息处理函数名) ... DEFCMD(命令处理函数名) ... DEFNOTIFY(通知消息代码) END_DEFMSG(
窗口
名) END_SETUPWINDOW(
窗口
名) 这里对上面代码中的中文进行说明:
窗口
名:
窗口
名同时也是该
窗口
类的对象名,比如
窗口
名为MainWindow,则该
窗口
类名为RingWnd_MainWindow, 同时声明了RingWnd_MainWindow* MainWindow=NULL; 以后只要调用MainWindow = NewRingObj(MainWindow);然后MainWindow就可以使用了。 以上代码相当于: class RingWnd_MainWindow { ... } RingWnd_MainWindow* MainWindow=NULL; 类名可以用RINGCLASS(
窗口
名)宏来得到
窗口
类型
:为IS_WINDOW,IS_
MDI
FRAME,IS_
MDI
CHILD,IS_DIALOG,IS_PROPPAGE,IS_PROPSHEET这几个值之一,一看名称就知道,不需要多讲了。 其实这个只是声明了
窗口
类是从哪个类继承。 初始化标记:为NEED_INIT和NO_INIT两个值之一,指定了是否需要成员数据的初始化,一般成员数据的初始化可以在WM_CREATE消息里完成, 如果需要事先初始化,可以指定NEED_INIT,但是需要在CPP文件实现一个INITWINDOW(
窗口
名)的函数,进行初始化。 这个BEGIN_DEF_VAR(初始化标记)和END_DEF_VAR是可选的,即可以不写这两个宏,一样可以声明成员数据或函数。 消息代码:
窗口
消息代码,例:WM_CREATE 自定义消息处理函数名:响应自定义消息的处理函数,这个可以随便取名,例:OnCustomMessage 命令处理函数名:响应菜单命令或控件命令的处理函数,这个可以随便取名,例:OnOpenFile,OnButton1Click 通知消息代码:控件的通知消息代码,例:LVN_SELECTCHANGE 对话框ID:当
窗口
类型
是对话框才需要写这个宏,且是可选的,即不写也可以。写了这句,对话框创建时可以不写参数,例: BEGIN_SETUPWINDOW(DlgAbout,IS_DIALOG) BINDID(IDD_ABOUT) ...
Window 消息大全
消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变
窗口
尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。 消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的
类型
以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录
类型
叫做TMsg,它在Windows单元中是这样声明的: type TMsg = packed record
hwnd
:
HWND
; //
窗口
句柄 message: UINT;//消息常量标识符 wParam: WPARAM ;// 32位消息的特定附加信息 lParam: LPARAM ;// 32位消息的特定附加信息 time: DWORD;//消息创建时的时间 pt: TPoint; //消息创建时的鼠标位置 end ; 消息中有什么? 是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:
hwnd
32位的
窗口
句柄。
窗口
可以是任何
类型
的屏幕对象,因为Win32能够维护大多数可 视对象的句柄(
窗口
、对话框、按钮、编辑框等)。message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也 可以是自定义的常量。 wParam 通常是一个与消息有关的常量值,也可能是
窗口
或控件的句柄。 lParam 通常是一个指向内存中数据的指针。由于WParam、lParam和Pointer都是32位的,因此,它们之间可以相互转换。 WM_NULL =$0000 // WM_CREATE =$0001 //应用程序创建一个
窗口
WM_DESTROY = $0002 //一个
窗口
被销毁 WM_MOVE = $0003 //移动一个
窗口
WM_SIZE= $0005 //改变一个
窗口
的大小 WM_ACTIVATE= $0006 //一个
窗口
被激活或失去激活状态; WM_SETFOCUS= $0007 //获得焦点后 WM_KILLFOCUS= $0008 //失去焦点 WM_ENABLE= $000A //改变enable状态 WM_SETREDRAW= $000B //设置
窗口
是否能重画 WM_SETTEXT= $000C //应用程序发送此消息来设置一个
窗口
的文本 WM_GETTEXT = $000D //应用程序发送此消息来复制对应
窗口
的文本到缓冲区 WM_GETTEXTLENGTH = $000E //得到与一个
窗口
有关的文本的长度(不包含空字符) WM_PAINT = $000F //要求一个
窗口
重画自己 WM_CLOSE = $0010 //当一个
窗口
或应用程序要关闭时发送一个信号 WM_QUERYENDSESSION= $0011 //当用户选择结束对话框或程序自己调用ExitWindows函数 WM_QUIT= $0012 //用来结束程序运行或当程序调用postquitmessage函数 WM_QUERYOPEN = $0013 //当用户
窗口
恢复以前的大小位置时,把此消息发送给某个图标 WM_ERASEBKGND = $0014 //当
窗口
背景必须被擦除时(例在
窗口
改变大小时) WM_SYSCOLORCHANGE = $0015 //当系统颜色改变时,发送此消息给所有顶级
窗口
WM_ENDSESSION = $0016 // 当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束 WM_SYSTEMERROR = $0017 // WM_SHOWWINDOW= $0018 //当隐藏或显示
窗口
是发送此消息给这个
窗口
WM_ACTIVATEAPP = $001C //发此消息给应用程序哪个
窗口
是激活的,哪个是非激活的; WM_FONTCHANGE= $001D //当系统的字体资源库变化时发送此消息给所有顶级
窗口
WM_TIMECHANGE= $001E //当系统的时间变化时发送此消息给所有顶级
窗口
WM_CANCELMODE= $001F //发送此消息来取消某种正在进行的摸态(操作) WM_SETCURSOR = $0020 //如果鼠标引起光标在某个
窗口
中移动且鼠标输入没有被捕获时,就发消息给某个
窗口
WM_MOUSEACTIVATE = $0021 //当光标在某个非激活的
窗口
中而用户正按着鼠标的某个键发送此消息给当前
窗口
WM_CHILDACTIVATE = $0022 //发送此消息给
MDI
子
窗口
当用户点击此
窗口
的标题栏,或当
窗口
被激活,移动,改变大小 WM_QUEUESYNC= $0023 //此消息由基
window32 API大全 win32编程
作为Microsoft 32位平台的应用程序编程接口,Win32 API是从事Windows应用程序开发所必备的。本书首先对Win32 API函数做完整的概述;然后收录五大类函数:
窗口
管理、图形设备接口、系统服务、国际特性以及网络服务;在附录部分,讲解如何在Visual Basic和Delphi中对其调用。 本书是从事Windows应用程序开发的软件工程师的必备参考手册。 Win32 API作为 Microsoft 32位平台(包括:Windows 9x,Windows NT3.1/4.0/5.0,WindowsCE)的应用程序编程接口,它是构筑所有32位Windows平台的基石,所有在Windows平台上运行的应用程序都可以调用这些函数。 从事Windows应用程序开发,离不开对Win32 API函数的调用。只有充分理解和利用API函数,才能深入到Windows的内部,充分挖掘系统提供的强大功能和灵活性。 近年来,随着Microsoft 32位平台的版本升级, Win32 API函数的构成、功能与调用方式都有很大的发展变化,然而,国内很少有相关的新版资料出版。为了满足广大开发人员的迫切需求,我们经过认真收集、整理素材,组织编写了这本与各种Microsoft 32位平台最新版本同步的Win32 API参考手册。 全书收录了五大类函数:
窗口
管理、图形设备接口、系统服务、国际特性以及网络服务。所有函数均附有功能说明、参数说明、返回值说明、备注以及引用说明。另外,在本书的第一章,我们对WiN32 API函数作了完整的概述;在附录部分,讲解了如何在Visual Basic和Delphi中对其调用。 由于篇幅较大,涉及技术内容广泛,加之时间仓促,书中难免存在不少错误或疏漏,希望广大读者给与批评指正。 在Windows程序设计领域处于发展初期时,Windows程序员可使用的编程工具唯有API函数。这些函数在程序员手中犹如"积木块"一样,可搭建出各种界面丰富、功能灵活的应用程序。不过,由于这些函数结构复杂,所以往往难以理解,而且容易误用。 随着软件技术的不断发展,在Windows平台上出现了很多优秀的可视化编程环境,程序员可以采用"所见即所得"的编程方式来开发具有精美用户界面和功能的应用程序。这些可视化编程环境操作简便、界面友好,比如:Visual C++,Delphi,Visual Basic等等。在这些工具中提供了大量的类库和各种控件,它们替代了API的神秘功能。事实上,这些类库和控件都是构筑在Windows API的基础上的,但它们使用方便,加速了Windows应用程序的开发,所以受到程序员的普遍采用。有了这些类库和控件,程序员们便可以把主要精力放在整体功能的设计上,而不必过于关注具体细节。不过,这也导致了非常多的程序员在类库面前"固步自封",对下层API函数的强大功能一无所知。 实际上。程序员要想开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用API函数。虽然类库和控件使应用程序的开发容易得多,但它们只提供Microsoft Windows的一般功能,对于一些比较复杂和特殊的功能来说,单使用类库和控件是难以实现的,必须直接使用API函数来编写。API函数是构筑整个Windows框架的基石,只有充分理解和利用API函数,才能深入到Windows的内部,充分发挥各种32位平台的强大功能和灵活性,才能成功地扩展和突破类库、控件和可视开发环境的限制。 Win32 API即为Microsoft 32位平台的应用程序编程接口(Application Programming Interface)。所有在Win32平台上运行的应用程序都可以调用这些函数。 使用Win32 API,应用程序可以充分挖掘Windows的32位操作系统的潜力。 Mircrosoft的所有32位平台都支持统一的API,包括函数、结构、消息、宏及接口。使用 Win32 API不但可以开发出在各种平台上都能成功运行的应用程序,而且也可以充分利用每个平台特有的功能和属性。 在具体编程时,程序实现方式的差异依赖于相应平台的底层功能的不同。最显著的差异是某些函数只能在更强大的平台上实现其功能。例如,安全函数只能在Windows NT操作系统下使用。另外一些主要差别就是系统限制,比如值的范围约束,或函数可管理的项目个数等等。 标准Win32 API函数可以分为以下几类:
窗口
管理
窗口
通用控制 Shell特性 图形设备接口 系统服务 国际特性 网络服务 在下面各节中,我们分别介绍这7种
类型
的API函数。
窗口
管理函数向应用程序提供了一些创建和管理用户界面的方法。你可以使用
窗口
管理函数创建和使用
窗口
来显示输出、提示用户进行输入以及
API
1,486
社区成员
23,279
社区内容
发帖
与我相关
我的任务
API
VB API
复制链接
扫一扫
分享
社区描述
VB API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章