热情软件屋

 

如何改变CommonDialog的位置


编号:QA000038
建立日期: 1998年10月21日 最后修改日期:2000年12月18日
所属类别:

zhangyinglei:
    VB中的CommonDialog可实现Open、Print等功能,但其位置无法调整到父窗口中心或屏幕中心,请问有何办法修改这些对话框的位置?

回答:

    如果是在C++或Delphi中,可以使用钩子(hook)函数,然后在钩子函数中设置对话框的位置。不过在VB中使用钩子(hook)函数就麻烦了,这是VB的弱项。不过VB也有自己的办法。要想解决这个问题,首先要找出CommonDialog是如何设置其对话框位置。首先在一个Form中放置一个CommonDialog控件,然后不断移动Form在屏幕的位置,并激活CommonDialog。你会发现CommonDialog总是出现在Form的左上角,当Form出现在屏幕的左侧或上部时,这一点非常明显。但当Form出现在屏幕下方或右侧时,CommonDialog会稍微做调整,以确保整个对话框都能显示在屏幕范围内。如果你的Form比较靠近屏幕中心,那么CommonDialog自然也会出现在屏幕中心。利用这一特点,我们可以建立一个空窗体,称为MyCDForm,然后在其上放置一个CommonDialog控件。这个MyCDForm只用来放置CommonDialog控件,没有其他用途。然后输入下面这个函数。
    Private Function ChooseFile(argLeft As Single, argTop As Single) As Boolean
     ' 设置为没有文件被选择
     ChooseFile = False
     ' 移动MyCDForm位置
     MyCDForm.Left = argLeft
     MyCDForm.Top = argTop
     ' 设置CommonDialog控件
     MyCDForm!CommonDialog1.CancelError = True
     On Error GoTo OpenError
     ' 显示CommonDialog
     MyCDForm!CommonDialog1.ShowOpen
     ' 卸载MyCDForm
     Unload MyCDForm
     ChooseFile = True
     Exit Function
    OpenError:
     ' 用户按下Cancel键
     Unload MyCDForm
     Exit Function
    End Function
    当你的程序需要调用Open对话框时,使用ChooseFile就可以了。argLeft和argTop是Open对话框在屏幕上出现的位置的左上角的坐标。从这个函数可以看出,实际上我们是将MyCDForm的位置该为argLeft和argTop,而利用Open对话框的位置总是出现在其父窗口的左上角这一特性来改变Open对话框的屏幕位置。类似地,你也可以显示其他的对话框。如果你想让对话框出现在屏幕中央,则argLeft = (Screen.Width - 对话框宽度) \ 2,argTop = (Screen.Height - 对话框高度) \ 2。对于屏幕大小为800*600个像素,显示Open对话框的情况,这两个值大致均为1500。
    如果在VB中也希望通过Hook技术进行设置,可以参考例子f_51.zip

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio