項目用戶登陸要求,用戶使用初始密碼0,不需要輸入密碼直接登陸,但一旦更改,就必須用更改后的密碼登陸。
所以用戶名標簽上對應的不是一個數值輸入控件,是一個按鍵返回控件,因為每個用戶返回的鍵值不同所以就確定是哪個用戶的登陸請求,收到請求后判斷是不是密碼0,若是就直接登陸,不是則觸發一個位置設置有效分辯率以外的數字輸入控件來接收密碼。
功能實現還算不錯。
//用戶登陸界面
void PageUserLogin(void) {
static BOOL fInit = FAIL;
U16 whUserSel;
U32 lhPass1;
U32 lhPass2;
U8 rgbh[20],bh;
if(!fInit) {
fInit = TRUE;
Write_Dgus(0xff00,0);
Write_Dgus(0xff01,0);
Write_Dgus(0xff02,0);
for(bh=0;bh<USER_MAXSIZE;bh++) {
MyStrCpy(rgbh,vsUser.rgsItem[bh].rgbhUser,12);
write_dgus_vp(0xf000+bh*8,rgbh,6);
}
}
whUserSel = Read_Dgus(0xff00);
if(whUserSel > 0) {
if(whUserSel <= USER_MAXSIZE) {
vsRunInfo.whUser = whUserSel-1;
if(0==vsUser.rgsItem[vsRunInfo.whUser].lhPass) {
vsRunInfo.whPageNum = 2;
fInit = FAIL;
}
else SimTouchKey(1210,410);
}
Write_Dgus(0xff00,0);
}
lhPass1 = Read_Dgus(0xff01)*65536L + Read_Dgus(0xff02);
lhPass2 = Read_Dgus(0xff01)*65536L + Read_Dgus(0xff02);
if((lhPass1 >0)&&(lhPass1==lhPass2)) {
if(lhPass1==vsUser.rgsItem[vsRunInfo.whUser].lhPass) {
vsRunInfo.whPageNum = 2;
fInit = FAIL;
}
Write_Dgus(0xff01,0);
Write_Dgus(0xff02,0);
}
}
//模擬按鍵
void SimTouchKey(U16 whX,U16 whY) {
U8 rgbh[8];
rgbh[0] = 0x5a;
rgbh[1] = 0xa5;
rgbh[2] = 0;
rgbh[3] = 4; //點擊
rgbh[4] = whX/256;
rgbh[5] = whX%256;
rgbh[6] = whY/256;
rgbh[7] = whY%256;
write_dgus_vp(0x00d4,rgbh,4);
}
|