首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

[分享及讨论]WIN API-VFP取得任务栏的尺寸(宽度和高度)及位置,该怎么解决

2012-03-31 
[分享及讨论]WIN API-VFP取得任务栏的尺寸(宽度和高度)及位置*-- 环境:vfp9.0(SP2 7423),Windows XP(SP3)、

[分享及讨论]WIN API-VFP取得任务栏的尺寸(宽度和高度)及位置
*-- 环境:vfp9.0(SP2 7423),Windows XP(SP3)、Windows 7 32位(SP1)

SQL code
*-- 方法一:先取得工作区尺寸,然后比较屏幕和工作区尺寸及坐标算出任务栏尺寸和位置。*-- 工作区:是指屏幕上不被系统任务栏或应用程序桌面工具遮盖的部分。Declare Integer SystemParametersInfo In user32 Integer uiAction,Integer uiParam,String @pvParam,Integer fWinIni#Define SPI_GETWORKAREA 48lcpvParam=Replicate(Chr(0),16)If SystemParametersInfo(SPI_GETWORKAREA,0,@lcpvParam,0)#0    && 获取工作区尺寸    lnLeftUpX=CToBin(Substr(lcpvParam,1,4),'4rs')            && 工作区左上角 X 坐标    lnLeftUpY=CToBin(Substr(lcpvParam,5,4),'4rs')            && 工作区左上角 Y 坐标    lnRightDownX=CToBin(Substr(lcpvParam,9,4),'4rs')        && 工作区右下角 X 坐标    lnRightDownY=CToBin(Substr(lcpvParam,13,4),'4rs')        && 工作区右下角 Y 坐标    If Sysmetric(1)=lnRightDownX-lnLeftUpX                     && 判断任务栏位置是 上 或 下(屏幕宽度=工作区宽度 说明任务栏位置是 上 或 下)        lnTrayWidth=Sysmetric(1)                            && 任务栏宽度=屏幕宽度        lnTrayHeight=Sysmetric(2)-(lnRightDownY-lnLeftUpY)    && 任务栏高度=屏幕高度-工作区高度        If lnLeftUpY=0                                        && 如果工作区左上角 Y 坐标为0,说明任务栏位置为 下,否则为 上            lcTrayOrientation='下'        Else            lcTrayOrientation='上'        Endif    Else                                                    && 任务栏位置是 左 或 右        lnTrayWidth=Sysmetric(1)-(lnRightDownX-lnLeftUpX)    && 任务栏宽度=屏幕宽度-工作区宽度        lnTrayHeight=Sysmetric(2)                            && 任务栏高度=屏幕高度        If lnLeftUpX=0                                        && 如果工作区左上角 X 坐标为0,说明任务栏位置为 右,否则为 左            lcTrayOrientation='右'        Else            lcTrayOrientation='左'        Endif    Endif    Messagebox('任务栏尺寸:'+Transform(lnTrayWidth)+'×'+Transform(lnTrayHeight)+Space(3)+Chr(10)+'任务栏位置:'+lcTrayOrientation,64,'信息提示')Endif


SQL code
*-- 方法二:先取得任务栏尺寸,然后比较屏幕和任务栏尺寸及坐标算出任务栏位置。Declare Integer GetWindowRect In user32 Integer hWindow,String @lpRectDeclare Integer FindWindow In user32 String lpClassName,String lpWindowNamelnHWnd=FindWindow('Shell_traywnd','')If lnHWnd>0    lcRect=Replicate(Chr(0),16)    If GetWindowRect(lnHWnd,@lcRect)#0                    && 获取任务栏尺寸        lnLeftUpX=CToBin(Substr(lcRect,1,4),'4rs')        && 任务栏左上角 X 坐标        lnLeftUpY=CToBin(Substr(lcRect,5,4),'4rs')        && 任务栏左上角 Y 坐标        lnRightDownX=CToBin(Substr(lcRect,9,4),'4rs')    && 任务栏右下角 X 坐标        lnRightDownY=CToBin(Substr(lcRect,13,4),'4rs')    && 任务栏右下角 Y 坐标        lnTrayWidth=lnRightDownX-lnLeftUpX                && 任务栏宽度=右下角 X 坐标-左上角 X 坐标        lnTrayHeight=lnRightDownY-lnLeftUpY                && 任务栏高度=右下角 Y 坐标-左上角 Y 坐标        If Sysmetric(1)=lnTrayWidth                        && 判断任务栏位置是 上 或 下(屏幕宽度=任务栏宽度 说明任务栏位置是 上 或 下)            If lnLeftUpY=0                                && 如果任务栏左上角 Y 坐标为0,说明任务栏位置为 上,否则为 下                lcTrayOrientation='上'            Else                lcTrayOrientation='下'            Endif        Else                                            && 任务栏位置是 左 或 右            If lnLeftUpX=0                                && 如果任务栏左上角 X 坐标为0,说明任务栏位置为 左,否则为 右                lcTrayOrientation='左'            Else                lcTrayOrientation='右'            Endif        Endif        Messagebox('任务栏尺寸:'+Transform(lnTrayWidth)+'×'+Transform(lnTrayHeight)+Space(3)+Chr(10)+'任务栏位置:'+lcTrayOrientation,64,'信息提示')    EndifEndif


[解决办法]
很好,行者孙的博客已经不更新了,现在在这里继续学习了!顶!
[解决办法]
真不错!
------解决方案--------------------


我是进来看看的,十年前用过VF6写过程序,后来没用了.
[解决办法]
学习了,支持十豆三和dkfdtf两位大侠!
[解决办法]
win7测试如下

1. 三种方法测试的结果是一样的

2. 在不同的分辨率下

结果为 横像素 * 40

例如 在 1024 * 768 下

任务栏为 1024 * 40

总之就是任务栏的高度是一定的

另 win7 下sp2 如何汉化啊

我的汉化包在win7下运行咋没有反应呢

热点排行