主题:[讨论]如何等比例缩放其它窗口???
天天学习
[专家分:4570] 发布于 2008-02-26 19:01:00
别人的程序的窗口不能改变大小,我希望能等比例地改变它的大小。
我先是用findwindow和movewindow来做,大小虽然改变了,但不是等比例地改变,原来窗口的有部分内容看不到了。
又试用setwindowRgn,结果相当于剪截了窗口的一部分,也没能实现。
不知道到底要哪几个API函数才能实现等比例缩放的功能???
回复列表 (共8个回复)
沙发
华山论剑 [专家分:5310] 发布于 2008-02-27 12:55:00
试试SetWindowPos。
板凳
天天学习 [专家分:4570] 发布于 2008-02-27 13:56:00
用setWindowPos也不行,效果一样,窗口只能显示一部分。好像那个程序的窗口不支持改变大小,除了最小化以外。
如果某个程序的窗口本身没有提供改变窗口大小的功能,(就像VB里把窗体的BorderStyle属性设置为Fixed Single,……),能不能把它的窗口样式设置成可以改变大小???用setWindowLong再结合callBack Function??
Private 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 Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const HWND_NOTOPMOST = -2
Private Const SWP_FRAMECHANGED = &H20
Private Sub Command1_Click()
On Error GoTo errHandle
Dim lhwnd As Long
'查找目标窗口
lhwnd = FindWindow(vbNullString, Text3.Text)
Me.Caption = "Hwnd=" & lhwnd
If lhwnd <> 0 Then
'设置为text1和text2里指定的大小
Call SetWindowPos(lhwnd, HWND_NOTOPMOST, 50, 50, Val(Text1.Text), Val(Text2.Text), SWP_FRAMECHANGED)
End If
errHandle:
End Sub
3 楼
华山论剑 [专家分:5310] 发布于 2008-02-27 17:55:00
试试用SetWindowPos,且调用时用格式参数:
SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_FRAMECHANGED
如果还不行,请给一个只能显示部分的窗口例子,给窗口名就行。
4 楼
天天学习 [专家分:4570] 发布于 2008-02-27 18:10:00
窗口名:AMV播放器
安装100AMVTools(一个AMV转换工具)就有。
5 楼
华山论剑 [专家分:5310] 发布于 2008-02-28 09:31:00
用另外一种方法试了试,请参考例子:
http://upload.programfan.com/upfile/20080228095680.rar
6 楼
天天学习 [专家分:4570] 发布于 2008-02-29 14:42:00
运行效果和前面的一样。
看来没办法实现这样的功能了?
或者,生成某个窗口运行时的动态缩略图,需要与画面同步的,而不是某一时刻的静态的图?
在网上找到个工具,visual tooltip,不知道那样的功能如何实现?
7 楼
华山论剑 [专家分:5310] 发布于 2008-02-29 18:02:00
不会吧,我这里显示很正常啊,没有不能显示的部分啊?
8 楼
天天学习 [专家分:4570] 发布于 2008-03-03 11:33:00
你的代码只是扩大窗体,不仅没有不能显示的部分,还重复显示了一部分窗体的背景图片。
如果把你代码中的
wp.rcNormalPosition.Right = wp.rcNormalPosition.Right + w * 0.1
wp.rcNormalPosition.Bottom = wp.rcNormalPosition.Bottom + h * 0.1
改为
wp.rcNormalPosition.Right = wp.rcNormalPosition.Right [color=red]-[/color] w * 0.1
wp.rcNormalPosition.Bottom = wp.rcNormalPosition.Bottom [color=red]-[/color] h * 0.1
也就是缩小窗体,结果有和以前的效果一样,一部分被剪截掉了。
或者你用来测试的窗体不是100AMVTools(一个AMV转换工具)里的amvPlayer.exe??
或许是那个窗体的程序本身就没有处理缩放的代码,所以对于窗体改变大小的消息不予处理,就像VB里的窗体一样,如果不处理Form_Resize事件,缩放时一部分控件就在窗体显示区域之外了。
难道为了这个还要用setwindowlong和callBack Function帮它处理WM_RESIZE之类的消息??或者setwindowsHookEx处理WH_CBT?
没多大实用价值,纯粹学习而已。
我来回复