技术论坛

 总结,工程用的两个小功能:利用C语言实现。

返回主题列表
作者 主题
呆板吧
奇侠

经验值:6221
发帖数:1151
精华帖:6
楼主    2009-01-06 10:01:24
主题:总结,工程用的两个小功能:利用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系统自己就提供了二次确认按钮组件,做起来就简单多了
大家对做二次确认按钮有什么好方法还请教我啊
点击此处查看附件
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。