作者 | 主题 |
---|---|
荧惑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。 有不对之处,请斧正。
活到老,学到老。
|