| 作者 | 主题 |
|---|---|
|
呆板吧 奇侠 经验值:6221 发帖数:1151 精华帖:6 |
楼主
主题:总结,工程用的两个小功能:利用C语言实现。
自己并不会用C语言,都是在论坛上提出问题,大侠们帮助回答的,再自己组合完善的。这次项目正好用上。
1:在WINCC运行后的画面总貌上加了计算器功能:方便操作人员用。 做一个按扭后,添加 C脚本: { HWND Hwnd; BOOL bRet; Hwnd=FindWindow(NULL,"Calculator"); if (!Hwnd) { ProgramExecute("CALC.exe"); Hwnd=FindWindow(NULL,"Calculator"); if (Hwnd) { printf("\r\n%d",Hwnd); bRet=SetWindowPos(Hwnd,HWND_TOPMOST,300,300,200,200,SWP_NOSIZE); if (!bRet) printf("\r\nSetWindowPos Error!"); } } } 如果在C脚本中仅仅有一句ProgramExecute("CALC.exe") 则运行后点击该按扭则出来计算器,此时不关计算器就切换画面,则计算器都在后台运行。最初我这样做关闭WINCC运行画面后发现后面有几十个计算器都没关。所以在脚本中加入使计算器必须显示在WINDOW的激活层上。 二:当对按钮操作需要二次确认时得自己一个个做小窗口,很麻烦。 所以就想利用WINDOWS的标准对话框: ![]() 同时也要求对话框出现后必须保持在激活窗口中。 直接在需要二次确认的按钮添加脚本: { HWND Hwnd; Hwnd = FindWindow(NULL,"WinCC-运行系统 - "); //英文版变为"WinCC-Runtime - " if (!Hwnd) Hwnd = FindWindow(NULL,"WinCC-Runtime - "); if (!Hwnd) printf("\r\nGetWinCC Handle Failed!"); MessageBox(Hwnd,"Error Text","My Error Box",MB_OKMB_ICONEXCLAMATIONMB_SETFOREGROUNDMB_SYSTEMMODAL); } WINDOWS中提供的标准对话框我知道的有三种 MessageBox(Hwnd,"Error Text","My Error Box",MB_OKMB_ICONEXCLAMATIONMB_SETFOREGROUNDMB_SYSTEMMODAL); MB_OK///MB_YESNO///MB_YESNOCANCEL 分别是错误框,询问框和YES/NO/CANCEL三按钮询问窗口 功能可以分别自己尝试,把相应的控制功能和按钮结合起来就可以。 自己做关于询问框的程序: { BOOL bool1; HWND Hwnd; int iRet; Hwnd = FindWindow(NULL,"WinCC-Runtime - "); if (!Hwnd) Hwnd = FindWindow(NULL,"WinCC-Runtime - "); if (!Hwnd) printf("\r\nGetWinCC Handle Failed!"); iRet=MessageBox(Hwnd,"QUESTION Text","My QUESTION Box",MB_YESNOMB_ICONEXCLAMATIONMB_SETFOREGROUNDMB_SYSTEMMODAL); if(iRet==IDYES) { printf("user do YES\r\n"); SetTagBit("m00",1); } else { printf("user do NO\r\n"); SetTagBit("m00",0); } } 自己做YES/NO/CANCEL三按钮询问窗口: { BOOL bool1; HWND Hwnd; int iRet; Hwnd = FindWindow(NULL,"WinCC-Runtime - "); if (!Hwnd) Hwnd = FindWindow(NULL,"WinCC-Runtime - "); if (!Hwnd) printf("\r\nGetWinCC Handle Failed!"); iRet=MessageBox(Hwnd,"QUESTION Text","My QUESTION Box",MB_YESNOCANCELMB_ICONEXCLAMATIONMB_SETFOREGROUNDMB_SYSTEMMODAL); switch (iRet) { case IDYES: printf("user do YES\r\n"); SetTagBit("m00",1); break; case IDNO: printf("user do NO\r\n"); SetTagBit("m00",0); break; case IDCANCEL: printf("user do CANCEL\r\n"); break; } } 不过觉得WINCC的二次确认功能还是很麻烦。 别的DCS系统自己就提供了二次确认按钮组件,做起来就简单多了 大家对做二次确认按钮有什么好方法还请教我啊 点击此处查看附件 |