技术论坛

 弹窗跟着鼠标走[学习作业]

返回主题列表
作者 主题
荧惑mars
侠士

经验值:1413
发帖数:157
精华帖:6
楼主    2023-06-28 20:18:30
主题:弹窗跟着鼠标走[学习作业] 精华帖 

在学习了弹窗跟着鼠标走-技术论坛-工业支持中心-西门子中国 (siemens.com.cn)之后,增加判断弹窗高和宽超过屏幕一半的情况。


错误更正:

SetVisible(lpszPictureName,lpszObjectName,bVisible); //Return-Type: BOOL 

SetPropChar(lpszPictureName,lpszObjectName,lpszPropertyName,szValue); //Return-Type: BOOL 

GetWidth(lpszPictureName,lpszObjectName); //Return-Type: long int 

GetHeight(lpszPictureName,lpszObjectName); //Return-Type: long int 


lpszPictureName:当前页面名,创建按钮事件,形参里有定义。

比如void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)

intx,inty,为鼠标点击时的当前坐标。

lpszObjectName:对象名称。我原来理解成画面窗口名,正确的是在画面窗口的对象名属性。

PS:用英文版wincc可能会很简单,这些参数从英文名称看很直观。译成中文就……


bVisible:1惑TRUE都行,true不行。

lpszPropertyName:字符串。标题="CaptionText"

szValue:要设置的标题名,字符串。


int WindowsHeight,WindowsWidth,PictureHeight,PictureWidth;


SetVisible(lpszPictureName,"XXXXXL",TRUE); //显示弹窗

SetPropChar(lpszPictureName,"XXXXXL","CaptionText","XXXXXL"); //更改画面标题


WindowsWidth = GetWidth(lpszPictureName,"XXXXXL"); //获取弹窗宽度

WindowsHeight = GetHeight(lpszPictureName,"XXXXXL"); //获取弹窗高度


PictureWidth = GetTagWord("ScreenWidth"); //获取屏幕画面宽度

PictureHeight = GetTagWord("ScreenHeigh"); //获取屏幕画面高度


if(x >= PictureWidth/2)

{

    if ( 0 < x - WindowsWidth - 10)

    {

         SetLeft(lpszPictureName,"XXXXXL",x - WindowsWidth - 10); //鼠标位置在画面右侧,且鼠标左侧能容下弹窗

    }

    else

    {

         SetLeft(lpszPictureName,"XXXXXL",0); //鼠标位置在画面右侧,但鼠标左侧容不下弹窗

    }

}

else

{

    if ( PictureWidth > x + WindowsWidth + 10)

    {

         SetLeft(lpszPictureName,"XXXXXL",x + 10); //鼠标位置在画面左侧,且鼠标右侧能容下弹窗

    }

    else

    {

         SetLeft(lpszPictureName,"XXXXXL",PictureWidth - WindowsWidth); //鼠标位置在画面左侧,但鼠标右侧容不下弹窗

    }

}

//加10和减10,纯粹个人行为,不希望画面窗口左上侧焦点和鼠标焦点重合。

if(y >= PictureHeight/2)

{

    if ( 0 < y - WindowsHeight - 10)

    {

         SetTop(lpszPictureName,"XXXXXL",y - WindowsHeight - 10); //鼠标位置在画面下侧,且鼠标上侧能容下弹窗

    }

    else

    {

         SetTop(lpszPictureName,"XXXXXL",0); //鼠标位置在画面下侧,但鼠标上侧容不下弹窗

    }

}

else

{

    if ( PictureHeight > y + WindowsHeight + 10)

    {

         SetTop(lpszPictureName,"XXXXXL",y + 10); //鼠标位置在画面上侧,且鼠标下侧能容下弹窗

    }

    else

    {

         SetTop(lpszPictureName,"XXXXXL",PictureHeight - WindowsHeight); //鼠标位置在画面上侧,但鼠标下侧容不下弹窗

    }

}


逻辑修改:把画面分成四象限,先判断鼠标点(X,Y)在哪里,再对画面窗口的焦点(左上角)的(Left,Top)=(int x,int y)进行修改。

PS:目前项目用了OS编辑器生成项目框架,然后又做了一个超过画面一半的弹窗。

PS:"XXXXXL"自行替换成画面窗口的对象名称(ObjectName),以及窗口标题CaptionText。

有不对之处,请斧正。

活到老,学到老。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。