WinCC自带的登录界面不太好看,和这个看脸的时代显得有点不太协调。

图1 WinCC登录对话框
不过好在WinCC比较开放。我们完全可以自己实现不同风格的登录界面。首先准备两个文本类型的内部变量,分别用于存储用户名和密码。

图2 内部变量
然后再准备登录界面。两个I/O域分别绑定上图中两个内部变量。

图3 自定义登录界面
其中密码输入框的属性“隐藏输入”需要设置为“是“。

图4 设置属性
选中“退出“按钮,在它的鼠标左键点击事件中输入下面代码。
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
#pragma code ("useadmin.dll")
#include "PWRT_api.h"
#pragma code()
//退出登录
PWRTLogout();
//清空用户名和密码
SetTagChar("UserName","");
SetTagChar("Pst","");
}
再选中“确定“按钮,在它的鼠标左键点击事件中输入下面代码。
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
#pragma option(mbcs)
#include"USEGENAP.H"
#pragma code("UseAdmin.DLL")
#include"pwrt_api.h"
#pragma code ()
if(PWRTSilentLogin(GetTagChar("UserName"),GetTagChar("Pst"))==FALSE)
{
MessageBox(NULL,"用户名或密码错误,请重新输入!","警告",MB_ICONEXCLAMATION|MB_SYSTEMMODAL);
//如果输入错误就清除用户名和密码
SetTagChar("UserName",""); //Return-Type: BOOL
SetTagChar("Pst",""); //Return-Type: BOOL
}
else
{
//登录成功的处理代码
//比如切换画面。。。。
}
}
运行效果下图所示。

本例使用了内部变量配合I/O域来获取用户名和密码。我们也可以使用文本框控件或者第三方控件直接获取输入的用户名和密码,这样可以不需要内部变量。
