WINAPI SETWINDOWPOS - 改变窗口的位置与状态
如何实现控件随对话框大小变化而自动调整大小和位置
如何实现控件随对话框大小变化而自动调整大小和位置VC++ 2009-12-28 20:27:42 阅读461 评论0字号:大中小订阅1. 处理对话框的WM_SIZE,然后用MoveWindow或者SetWindowPos来把对话框上面的控件重新调整新位置和大小。
2. 基本的做法就是响应WM_SIZE消息,并按照窗口大小比例来调整控件的位置和大小,控件的大小最好设置成窗口的百分之几,这样的话,就可以根据窗口的大小随时调整了。
3. 每次OnSize 即可获得一个CRect,然后根据这个CRect来确定这些控件的位置和大小,使用函数MoveWindow 或SetWindowpos实现。
4.1)通过下面两个函数获取的是显示屏幕的大小【屏幕的分辨率】(不包括任务栏等区域):int nFullWidth=GetSystemMetrics( SM_CXFULLSCREEN ); //屏幕宽度int nFullHeight=GetSystemMetrics( SM_CYFULLSCREEN ); //屏幕高度2)这两个函数获取的是真正屏幕的大小【屏幕的分辨率】(包括任务栏等区域):int cx = GetSystemMetrics( SM_CXSCREEN );int cy = GetSystemMetrics( SM_CYSCREEN );如:用前两个函数获取的大小可能是1024*687 ,而用下边两个获取的就是1024*768。
5. 在OnSize() 中调用:GetClientRect() 和GetWindowRect() 函数可获取窗口大小,但需注意得到的是设备坐标,如果需要画图什么的还需要转换成逻辑坐标。
6. 字体大小随窗口变化而自动变化,比如说始终使字的高度始终占窗口的1/3。
使用:1). 在Creat中将nHeight设成窗口长度或者宽度的一定比值就行了(最好在onsize函数中设置);2). 使用WM_FONTCHANGE 消息。
Windows API函数
Windows API函数控件与消息函数CascadeWindows 以层叠方式排列窗口ChildWindowFromPoint 返回父窗口中包含了指定点的第一个子窗口的句柄ClientToScreen 判断窗口内以客户区坐标表示的一个点的屏幕坐标CloseWindow 最小化指定的窗口CopyRect 矩形内容复制DeferWindowPos 该函数为特定的窗口指定一个新窗口位置DestroyWindow 清除指定的窗口以及它的所有子窗口DrawAnimatedRects 描绘一系列动态矩形EnableWindow 指定的窗口里允许或禁止所有鼠标及键盘输入EndDeferWindowPos 同时更新DeferWindowPos调用时指定的所有窗口的位置及状态EnumChildWindows 为指定的父窗口枚举子窗口EnumThreadWindows 枚举与指定任务相关的窗口EnumWindows 枚举窗口列表中的所有父窗口EqualRect 判断两个矩形结构是否相同FindWindow 寻找窗口列表中第一个符合指定条件的顶级窗口FindWindowEx 在窗口列表中寻找与指定条件相符的第一个子窗口FlashWindow 闪烁显示指定窗口GetActiveWindow 获得活动窗口的句柄GetCapture 获得一个窗口的句柄,这个窗口位于当前输入线程,且拥有鼠标捕获(鼠标活动由它接收)GetClassInfo 取得WNDCLASS结构(或WNDCLASSEX结构)的一个副本,结构中包含了与指定类有关的信息GetClassLong 取得窗口类的一个Long变量条目GetClassName 为指定的窗口取得类名GetClassWord 为窗口类取得一个整数变量GetClientRect 返回指定窗口客户区矩形的大小GetDesktopWindow 获得代表整个屏幕的一个窗口(桌面窗口)句柄GetFocus 获得拥有输入焦点的窗口的句柄GetForegroundWindow 获得前台窗口的句柄GetLastActivePopup 获得在一个给定父窗口中最近激活过的弹出式窗口的句柄GetLastError 针对之前调用的api函数,用这个函数取得扩展错误信息GetParent 判断指定窗口的父窗口GetTopWindow 搜索内部窗口列表,寻找隶属于指定窗口的头一个窗口的句柄GetUpdateRect 获得一个矩形,它描叙了指定窗口中需要更新的那一部分GetWindow 获得一个窗口的句柄,该窗口与某源窗口有特定的关系GetWindowContextHelpId 取得与窗口关联在一起的帮助场景IDGetWindowLong 从指定窗口的结构中取得信息GetWindowPlacement 获得指定窗口的状态及位置信息GetWindowRect 获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内GetWindowText 取得一个窗体的标题(caption)文字,或者一个控件的内容GetWindowTextLength 调查窗口标题文字或控件内容的长短GetWindowWord 获得指定窗口结构的信息InflateRect 增大或减小一个矩形的大小IntersectRect 这个函数在lpDestRect里载入一个矩形,它是lpSrc1Rect与lpSrc2Rect两个矩形的交集InvalidateRect 屏蔽一个窗口客户区的全部或部分区域IsChild 判断一个窗口是否为另一窗口的子或隶属窗口IsIconic 判断窗口是否已最小化IsRectEmpty 判断一个矩形是否为空IsWindow 判断一个窗口句柄是否有效IsWindowEnabled 判断窗口是否处于活动状态IsWindowUnicode 判断一个窗口是否为Unicode窗口。
用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置
用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置。
void MoveWindow(int x,int y,int nWidth,int nHeight);void MoveWindow(LPCRECT lpRect);第一种用法需给出控件新的坐标和宽度、高度;第二种用法给出存放位置的CRect对象;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号pWnd->MoveWindow( CRect(0,0,100,100) ); //在窗口左上角显示一个宽100、高100的编辑控件SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);第一个参数我不会用,一般设为NULL;x、y控件位置;cx、cy控件宽度和高度;nFlags常用取值:SWP_NOZORDER:忽略第一个参数;SWP_NOMOVE:忽略x、y,维持位置不变;SWP_NOSIZE:忽略cx、cy,维持大小不变;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_BUTTON1 ); //获取控件指针,IDC_BUTTON1为控件ID号pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER |SWP_NOSIZE ); //把按钮移到窗口的(50,80)处pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE ); //把编辑控件的大小设为(100,80),位置不变pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ) ; //编辑控件的大小和位置都改变以上方法也适用于各种窗口。
VB窗体美化
学习窗体美化不错的知识====================================================================================相信大家看过许多形状怪异的窗口吧?可是在VB里,系统提供的只是一个矩形的窗体。
如何在VB里实现这种异形窗体呢?其实原理很简单。
首先,在内存中构建一个想要的图形,再通过API函数将窗体设置为此形状,最后将图片放上去就可以了。
关键在于如何构建这个想要的图形。
让我们看看下面这个图:。
这张图片中既有白色,也有其他彩色,而我们想要的颜色正是除白色以外的其它颜色。
我们可以这样想:在内存中创建一幅一样大小的空的图像,然后只把我们需要的颜色(即非白色)输入内存。
这样,就可以创建出我们想要的图形了。
以上是原理,接下来介绍几个API函数。
GetPixel:获取指定对象的某个点的颜色。
定义为:Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long其中hdc为图形对象的句柄,x、y为坐标。
SelectObject:向内存中的指定地点输入图形。
定义为:Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long其中hdc为内存中图形对象的句柄,hObject为欲输入的图像。
CreateCompatibleDC:在内存中创建一个与指定对象一样的场景(可以理解为图像)。
定义为:Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long其中hdc为指定对象的句柄。
LabVIEW调用WindowsAPI函数实现VI窗口置顶
LabVIEW调用Windows API实现VI窗口置顶前些天同事用LabVIEW开发了个常用的小工具软件,碍于电脑屏幕太小,想让这小工具一直保持在所有窗口的最顶端(置顶),几个人讨论研究发现通过LabVIEW的属性节点只能实现VI程序在LabVIEW软件中保持最前,而在其他窗口没能置顶,未能达到想要的效果。
通过上网查找资料,软件置顶是与操作平台的控制相关,需要调用Windows API去实现这功能,研究了一下,调用Windows API能很好的实现了VI置顶。
百度上用LabVIEW调用Windows API的教程LabVIEW版本比较旧,为方便大家更好的学习,现将自己研究的方法分享出来。
一.什么是Windows APIWindows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源…之外,它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application),所以便称之为Application Programming Interface,简称API 函数。
WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。
Windows API包括几千个可调用的函数,它们大致可分为以下几类:基本服务、组件服务、用户界面服务、图形多媒体服务、消息和协作、网络、Web服务。
二.Windows API的发展现状当WINDOWS操作系统开始占据主导地位的时候,开发WINDOWS平台下的应用程序成为人们的需要。
而在WINDOWS程序设计领域处于发展的初期,WINDOWS程序员所能使用的编程工具唯有API函数,这些函数是WINDOWS提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建出各种界面丰富,功能灵活的应用程序。
所以可以认为API 函数是构筑整个WINDOWS框架的基石,在它的下面是WINDOWS的操作系统核心,而它的上面则是所有的华丽的WINDOWS应用程序。
用Windows API取得窗体句柄二例
用Windows API取得窗体句柄二例文/胡克Windows通过句柄(Handle)识别每个窗体、控件、菜单和菜单项,当程序运行时,它所包含的每个部件都有一个惟一确定的句柄同其他的部件相区别句柄在Windows API中具有举足轻重的作用,现举三例,有兴趣的读者不妨一试。
获取窗体和控件的句柄步骤如下:1、为了看到显示于屏幕上所有的窗体和控件的句柄,用SetWindowPos函数设置窗口始终在最上面,其他窗口不能覆盖它,并使其只以标题显示于屏幕左上角。
(1)新建一工程,打开API Viwer:Add-ins→API Viewer→File→Load text file→Win32api.txt。
(2)将SetWindowPos函数的声明粘贴到窗体的声明部分:Private 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。
(3)程序启动时调用SetWindowPos函数,窗体Load事件代码如下:Private Sub Form_Load()SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, conSwpNoActivate Or conSwpShowWindow'使窗体一直置于最顶层End Sub卧龙传说提醒:当第二个参数hWndInsertAfter的值为-1时置于顶层;值为-2时不置于顶层。
2、为了找到鼠标指针的X和Y坐标,用上面同样的方法,通过API Viewer工具把获取的鼠标指针位置的API函数GetCursorPos的声明和结构类型声明粘贴到窗体的声明部分:Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Type POINTAPIx As Longy As Long。
Win32 API 函数大全使用详解
一、窗口函数(Window)= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = = = = = = = = = = = = = = == =AdjustWindowRect函数功能:该函数依据所需客户矩形的大小,计算需要的窗日矩形的大小。
计算出的窗口矩形随后可以传递给CreateWindow函数,用于创建一个客户区所需大小的窗口。
函数原型:BOOL AdjustWindowRect(LPRECT lpRect ,DWORD dwStyle,BOOL bMENU);参数:lpRect:指向RECT结构的指针,该结构包含所需客户区域的左上角和右下角的坐标。
函数返回时,该结构容纳所需客户区域的窗口的左上角和右下角的坐标。
dwStyle:指定将被计算尺寸的窗口的窗口风格。
bMenu:指示窗口是否有菜单。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。
获取错误信息,参看GetLastError。
备注:客户矩形是指完全包含一个客户区域的最小矩形;窗日矩形是指完全包含一个窗口的最小矩形,该窗口包含客户区与非客户区。
当一个菜单条下拉出两行或更多行时,AdjustWindowRect函数不增加额外的空间。
速查:Windows NT:3.1以上版本:Windows:95以上版本:Windows CE:不支持;头文件:winuser.h;库文件:user32.lib。
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = = = = = = = = = = = = = =AdjustWindowRectEX函数功能:该函数依据所需客户矩形大小,计算需要的窗口矩形的大小。
VBA与Windows操作系统交互的技巧与方法
VBA与Windows操作系统交互的技巧与方法随着信息化时代的到来,计算机软件在生活和工作中扮演着越来越重要的角色。
在Windows操作系统中,VBA (Visual Basic for Applications) 是一种被广泛应用的编程语言,可以与操作系统进行高效的交互。
在本文中,我们将探讨一些VBA与Windows操作系统交互的技巧与方法,帮助读者更好地利用VBA来优化自己的工作流程。
一、获取系统信息VBA提供了一些函数来获取Windows操作系统的信息。
其中一个常用的函数是Environ,通过该函数可以获取当前用户的环境变量。
例如,使用VBA代码`Environ("UserName")` 可以获取当前登录用户的用户名。
另外,VBA还提供了一些其他的函数,比如获取计算机名称、操作系统版本、用户目录等等。
二、操作文件和文件夹VBA可以通过操作系统提供的接口来对文件和文件夹进行创建、删除、复制、重命名等操作。
例如,使用VBA的`MkDir`命令可以创建一个新的文件夹,`Kill`命令可以删除文件。
在操作文件时,VBA还可以利用Windows操作系统的剪贴板功能来实现文件的复制和粘贴,以及获取剪贴板中的内容。
通过VBA的`GetObject`函数,可以获取剪贴板中的对象,并进行进一步的操作。
三、控制应用程序VBA可以通过Windows操作系统的API来控制其他应用程序。
例如,可以使用VBA代码来自动打开、关闭、激活其他应用程序的窗口。
通过获取其他应用程序的句柄,可以实现对其进行操作,并模拟用户的操作。
四、发送和接收电子邮件在Windows操作系统中,VBA可以通过Microsoft Outlook来实现与邮件系统的交互。
通过VBA代码,可以自动创建、发送电子邮件,并读取邮件服务器中的邮件。
通过使用VBA的Outlook对象模型,可以实现对邮件的各种操作,例如添加附件、设置邮件的优先级和重要性、保存邮件为草稿等等。
Excel窗口总是在最前面
教你如何设置让Excel窗口总是在最前面分类:Excel2014-09-16 11:40 1451人阅读评论(0) 收藏举报今天在用Excel编辑资料,想让它总在窗口前显示,上网搜到了解决办法,试了一下,很有效,分享出来!在使用Excel办公时我们需要让Excel窗口总是显示在最前面而不被别的窗口挡住,虽然Excel并没有提供这样的功能,但可以用下面的方法:在VBA中使用API函数“SetWindowPos”可以让Excel窗口总在最前面。
步骤如下:1、新建一个工作簿,按Alt+F11,打开VBA编辑器。
2、单击菜单“插入→模块”,在右侧的代码窗口中粘贴下列代码:Declare Function SetWindowPos Lib "user32" (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 LongConst HWND_TOPMOST = -1Const HWND_NOTOPMOST = -2Const SWP_NOSIZE = &H1Const SWP_NOMOVE = &H2Sub 窗口总在最前面()SetWindowPos Application.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVEEnd SubSub 恢复()SetWindowPos Application.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVEEnd Sub关闭VBA编辑器。
3、在Excel界面工作表界面中按快捷键Alt+F8,打开“宏”对话框,选择宏名“窗口总在最前面”,单击“执行”按钮即可让Excel窗口总在最前面。
setwindowpos 参数
setwindowpos 参数SetWindowPos 是一个Windows API 函数,用于改变窗口的大小、位置以及其他属性。
它属于 user32.dll 库。
函数的原型如下:cBOOL SetWindowPos(HWND hWnd,HWND hWndInsertAfter,int X,int Y,int cx,int cy,UINT uFlags);参数解释:hWnd: 要改变的窗口的句柄。
hWndInsertAfter: 指定窗口在Z-order 中的位置。
可以是一个窗口句柄,或者是以下值之一:HWND_TOP: 将窗口置于顶部。
HWND_BOTTOM: 将窗口置于底部。
HWND_TOPMOST: 将窗口置于最顶部(总是置顶)。
HWND_NOTOPMOST: 从顶部移除窗口(即,非置顶)。
X 和 Y: 窗口的新位置的左上角坐标。
cx 和 cy: 窗口的新尺寸的宽度和高度。
uFlags: 指定如何改变窗口的尺寸和位置。
可以是一个或多个以下标志的组合:SWP_NOMOVE: 不移动窗口。
SWP_NOSIZE: 不改变窗口的大小。
SWP_NOZORDER: 不改变Z-order。
SWP_NOREDRAW: 不重绘窗口。
SWP_NOACTIVATE: 不激活窗口。
SWP_FRAMECHANGED: 即使窗口的大小和位置没有改变,也发送一个 WM_NCCALCSIZE 消息。
SWP_SHOWWINDOW: 显示窗口。
如果窗口是隐藏的,则此标志会使其变为可见。
SWP_HIDEWINDOW: 隐藏窗口。
如果窗口是可见的,则此标志会使其变为隐藏。
... 以及其他标志。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。
要获取扩展的错误信息,请调用 GetLastError 函数。
setPos详解
setPos详解etWindowPos 详解函数名: SetWindowPos头⽂件: winuser.h函数原型: BOOL SetWindowPos ( HWND hWnd, //窗⼝句柄 HWND hWndInsertAfter, //排列顺序的句柄 int X, //⽔平坐标 int Y, //垂直坐标 int cx, //宽 int cy, //⾼ UINT uFlags //窗⼝定位标识 );说明: 这个函数能改变窗⼝的⼤⼩、位置和设置⼦窗⼝、弹出窗⼝或顶层窗⼝的排列顺序。
返回值: BOOL,如果返回值⾮零表⽰成功,返回零表⽰失败。
错误信息请参看GetLastError函数。
参数表: 参数类型及说明 hwnd HWND,欲定位的窗⼝句柄 hWndInsertAfter HWND,置于hwnd前⾯的窗⼝句柄。
这个参数必须是窗⼝的句柄或是下⾯的值之⼀: HWND_BOTTOM 将窗⼝置于其它所有窗⼝的底部 HWND_NOTOPMOST 将窗⼝置于其它所有窗⼝的顶部,并位于任何最顶部窗⼝的后⾯。
如果这个窗⼝⾮顶部窗⼝,这个标记对该窗⼝并不产⽣影响 HWND_TOP 将窗⼝置于它所有窗⼝的顶部 HWND_TOPMOST 将窗⼝置于其它所有窗⼝的顶部,并位于任何最顶部窗⼝的前⾯。
即使这个窗⼝不是活动窗⼝,也维持最顶部状态x: int,指定窗⼝新的X坐标Y: int,指定窗⼝新的Y坐标cx: int,指定窗⼝新的宽度cy: int,指定窗⼝新的⾼度wFlags: UINT,指定窗⼝状态和位置的标记。
这个参数使⽤下⾯值的组合: SWP_DRAWFRAME 围绕窗⼝画⼀个框 SWP_FRAMECHANGED 发送⼀条WM_NCCALCSIZE消息进⼊窗⼝,即使窗⼝的⼤⼩没有发⽣改变。
如果不指定这个参数,消息WM_NCCALCSIZE只有在窗⼝⼤⼩发⽣改变时才发送 SWP_HIDEWINDOW 隐藏窗⼝ SWP_NOACTIVATE 不激活窗⼝ SWP_NOCOPYBITS 屏蔽客户区域 SWP_NOMOVE 保持当前位置(X和Y参数将被忽略) SWP_NOOWNERZORDER 不改变所有窗⼝的位置和排列顺序 SWP_NOREDRAW 窗⼝不⾃动重画 SWP_NOREPOSITION 与SWP_NOOWNERZORDER标记相同 SWP_NOSENDCHANGING 防⽌这个窗⼝接受WM_WINDOWPOSCHANGING消息 SWP_NOSIZE 保持当前⼤⼩(cx和cy会被忽略) SWP_NOZORDER 保持窗⼝在列表的当前位置(hWndInsertAfter将被忽略) SWP_SHOWWINDOW 显⽰窗⼝备注: 如果设置了SWP_SHOWWINDOW或SWP_HIDEWINDOW标记,这个窗⼝不发⽣移动或改变⼤⼩。
置顶窗口SetWindowPos()的用法
置顶窗口SetWindowPos()的用法SetWindowPos()函数功能:该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。
子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。
函数原型:BOOL SetWindowPos(HWN hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,int cy,UNIT.Flags);参数:hWnd:窗口句柄。
hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。
该参数必须为一个窗口句柄,或下列值之一:HWND_BOTTOM:将窗口置于Z序的底部。
如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。
HWND_DOTTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。
如果窗口已经是非顶层窗口则该标志不起作用。
HWND_TOP:将窗口置于Z序的顶部。
HWND_TOPMOST:将窗口置于所有非顶层窗口之上。
即使窗口未被激活窗口也将保持顶级位置。
查看该参数的使用方法,请看说明部分。
x:以客户坐标指定窗口新位置的左边界。
Y:以客户坐标指定窗口新位置的顶边界。
cx:以像素指定窗口的新的宽度。
cy:以像素指定窗口的新的高度。
uFlags:窗口尺寸和定位的标志。
该参数可以是下列值的组合:SWP_ASNCWINDOWPOS:如果调用进程不拥有窗口,系统会向拥有窗口的线程发出需求。
这就防止调用线程在其他线程处理需求的时候发生死锁。
SWP_DEFERERASE:防止产生WM_SYNCPAINT消息。
SWP_DRAWFRAME:在窗口周围画一个边框(定义在窗口类描述中)。
SWP_FRAMECHANGED:给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消息。
如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。
windows API
一)不规则窗口Windows提供的只是标准的矩形窗口,要想建立一个不规则的窗口就需要调用API函数来实现。
建立一个不规则的窗口,一般是先用创建区域的API函数建立一个不规则的区域,再用API函数SetWindowRgn改变窗口的区域。
这些API函数在C++ Builder中包含在头文件wingdi.h和winuser.h里面,因此,要使用这些API函数就要先在程序头部加上包含头文件的语句:include <wingdi.h>include <winuser.h>SetWindowRgn函数能改变一个窗口的区域,该函数有三个参数,第一个参数hWnd是欲设置区域的窗口句柄,第二个参数hRgn是欲设置的区域,第三个参数bRedraw一般设为true,即立即重画窗口。
用来创建区域的API函数有多个,最常用的有三个:1、CreateRectRgn函数,用来创建一个由X1、Y1和X2、Y2坐标点确定的矩形区域。
当坐标点X1和Y1相等、X2和Y2也相等的时候,创建的是一个正方形。
例子://创建长方形HRGN hRect=CreateRectRgn(0,0,400,200);SetWindowRgn(Handle,hRect,true);//创建正方形HRGN hRect=CreateRectRgn(0,0,300,300);SetWindowRgn(Handle,hRect,true);2、CreateEllipticRgn函数,用来创建一个由X1、Y1和X2、Y2坐标点确定的矩形所内切的椭圆。
同样,X1、Y1和X2、Y2坐标点所确定的矩形为正方形时,创建的就是一个圆形。
例子://创建椭圆HRGN hElliptic=CreateEllipticRgn(0,0,400,250);SetWindowRgn(Handle,hElliptic,true);//创建圆形HRGN hElliptic=CreateEllipticRgn(0,0,400,400);SetWindowRgn(Handle,hElliptic,true);3、CombineRgn函数,能将两个区域组合为一个新区域,它有四个参数,第一个参数hrgnDest保存合并后的新区域,第二个参数hrgnSrc1、三个参数hrgnSrc2为欲合并的两个区域,第四个参数fnCombineMode是区域组合的方式,它的值是为下面组合方式之一:组合方式说明RGN_AND 建立两个区域的交集RGN_COPY 建立hrgnSrc1的拷贝RGN_DIFF 建立两个区域不相交的部分RGN_OR 建立两个区域的并集RGN_XOR 建立除两个区域并集之外的部分例子://创建一个圆形和长方形交集的组合形状HRGN hRect=CreateRectRgn(0,0,300,300);HRGN hElliptic=CreateEllipticRgn(0,0,400,250);CombineRgn(hRect,hRect,hElliptic,RGN_OR);SetWindowRgn(Handle,hRect,true);当需要将窗口还原为标准Windows矩形窗口时,只要将SetWindowRgn函数的hRgn参数设为0就行了,如:SetWindowRgn(Handle,0,true);(一)闪烁程序的标题栏在某些专业的应用程序中,当程序需要提醒用户或要引起用户的注意时,就不停地闪烁程序的标题栏。
mfc setwindowpos用法
mfc setwindowpos用法一、概述MFC(Microsoft Foundation Class)是微软提供的用于开发Windows应用程序的类库,其中setwindowpos函数用于设置窗口的位置。
本文将介绍setwindowpos函数的用法。
二、setwindowpos函数介绍setwindowpos函数是MFC中的一个成员函数,用于将窗口的位置移动到指定的位置。
该函数的原型如下:void SetWindowPos(CWnd* pWnd, int nIndex, const CWnd* pWndInsertAfter = NULL, DWORD dwFlags = 0, int x = 0, int y = 0);其中,pWnd是要移动的窗口对象,nIndex指定了移动后的位置,pWndInsertAfter指定了移动后的窗口顺序,dwFlags指定了一些附加的选项,x 和y是可选参数,用于指定窗口在屏幕上的具体位置。
三、用法示例以下是一个简单的setwindowpos用法示例:1. 首先,需要创建一个MFC窗口类并添加一个按钮控件。
2. 在按钮的点击事件处理函数中,调用setwindowpos函数来移动窗口。
3. 设置窗口的初始位置和大小,以及要移动到的位置。
示例代码如下:// 创建MFC窗口类并添加按钮控件// ...// 添加按钮控件事件处理函数void CMyAppView::OnBnClickedButton() {// 获取当前窗口的句柄HWND hWnd = AfxGetMainWnd()->m_hWnd;// 设置窗口初始位置和大小SetWindowPos(NULL, 100, 100, 300, 200, SWP_NOSIZE | SWP_NOMOVE);// 将窗口移动到指定的位置SetWindowPos(hWnd, HWND_TOP, 500, 500);}四、注意事项在使用setwindowpos函数时,需要注意以下几点:1. 需要确保窗口句柄的有效性,否则可能会导致程序崩溃或异常。
窗体移到屏幕外的方法
窗体移到屏幕外的方法在计算机编程中,窗体移到屏幕外是一种常见的操作,通常用于隐藏窗体或者将窗体移动到屏幕外部。
这种操作可能在一些特定的应用场景下非常有用,比如在多屏幕显示环境下,将窗体移动到屏幕外可以让用户在主屏幕上专注于其他任务。
在Windows平台上,可以使用C#或者C++等编程语言来实现窗体移到屏幕外的方法。
下面以C#为例,简要介绍一下如何实现这一操作。
首先,需要获取屏幕的宽度和高度信息,可以通过System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width和System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height来获取主屏幕的尺寸。
接下来,可以使用窗体的Location属性来设置窗体的位置。
如果要将窗体移到屏幕外,可以将窗体的左上角位置设置为屏幕的宽度或者高度的负值,这样窗体就会移动到屏幕外部。
示例代码如下:csharp.// 获取主屏幕的宽度和高度。
int screenWidth =System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;int screenHeight =System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;// 将窗体移动到屏幕外。
this.Location = new System.Drawing.Point(-screenWidth, -screenHeight);通过这样的方法,就可以实现将窗体移到屏幕外的效果。
当需要重新显示窗体时,只需要将窗体的位置设置为屏幕内部即可。
需要注意的是,这种操作可能会影响用户体验,因此在实际应用中需要谨慎使用,确保用户能够方便地找到和操作窗体。
windows窗口的style
窗口特征重叠窗口 (5)弹出窗口 (5)子窗口 (6)分层窗口(透明窗口) (9)信息窗口 (11)窗口关系 (12)前景和背景窗口 (12)奴隶窗口 (14)Z序 (14)窗口显示状态 (15)活动窗口 (16)禁用窗口 (16)界面窗口 (17)最小化、最大化和恢复窗口 (19)窗口大小和位置 (21)默认的大小和位置 (21)可调大小 (22)系统命令 (22)大小和位置函数 (23)大小和位置的消息 (24)窗口动画 (26)镜像对话框和消息框 (33)镜像设备上下文不与窗口关联 (33)窗口的销毁 (34)窗口类型这部分包含下列主题,描述下列窗口类型。
重叠窗口一个重叠窗口是一个顶级窗口的标题栏,边境和客户区;它可以作为应用程序的主窗口。
它也可以有一个窗口菜单,最大化和最小化按钮以及滚动条。
作为一个重叠窗口主窗口通常包括所有这些组件。
通过在CreateWindowEX函数中指定WS_OVERLAPPED或WS_OVERLAPPEDWINDOW风格,应用程序可以创建一个重叠窗口。
如果使用WS_OVERLAPPED风格,窗口有标题栏和边界,如果使用WS_OVERLAPPEDWINDOW风格,窗口有标题栏,上边界,窗口菜单,最大化和最小化按钮。
弹出窗口弹出窗口是一种特殊类型的重叠窗口,用于对话框,消息框和其他临时窗口出现的外部应用程序的主窗口。
弹出窗口的标题栏是可选的;否则,弹出窗口拥有和重叠窗口一样的WS_OVERLAPPED风格。
通过在CreateWindowEX函数中选择WS_POPUP风格创建的弹出窗口,包含标题栏,指定的WS_CAPTION风格。
使用WS_POPUPWINDOW风格创建的的弹出窗口,包含有一个边界和一个窗口菜单。
WS_CAPTION风格必须结合WS_POPUPWINDOW 风格才可以使窗口菜单可见。
子窗口子窗口有WS_CHILD风格仅限于它的父窗口的客户区。
一个应用程序通常使用子窗口来使其客户区划分为多个功能区域。
python用win32gui遍历窗口并设置窗口位置的方法
python⽤win32gui遍历窗⼝并设置窗⼝位置的⽅法
最近电脑打开某个软件却看不见窗⼝,在任务栏上看到软件明明已经运⾏,猜想⼀定是什么原因造成软件窗⼝位置偏离屏幕的有效坐标太远。
尝试重启电脑,重装软件,都没有解决,看来是在注册表存储了位置信息了。
没办法,写程序解决吧,最近正在折腾python,搜了⼀下python还真有相关接⼝操作windows窗⼝,⽽且很⽅便。
解决问题的代码如下:
import win32gui
import win32con
def reset_window_pos(targetTitle):
hWndList = []
win32gui.EnumWindows(lambda hWnd, param: param.append(hWnd), hWndList)
for hwnd in hWndList:
clsname = win32gui.GetClassName(hwnd)
title = win32gui.GetWindowText(hwnd)
if (title.find(targetTitle) >= 0): #调整⽬标窗⼝到坐标(600,300),⼤⼩设置为(600,600)
win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 600,300,600,600, win32con.SWP_SHOWWINDOW)
reset_window_pos("windowName")
以上这篇python⽤win32gui遍历窗⼝并设置窗⼝位置的⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。