📄 softlock.cpp
字号:
sprintf(nowinfo,"%d,%d,%d,%d,%d,%d,%d,%s",timeinfo->tm_year,timeinfo->tm_mon+1,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,UTIL_GetBatteryLevel(),UTIL_GetSignalQuality(),str_default); if(strcmp(curinfo,nowinfo)) //当前状态信息是否和之前的相同 { strcpy(curinfo,nowinfo); if(flag_update_part) flag_update_part=false; //如果不同重绘所有 update(); //调用重绘 } } else { char nowinfo[300]; sprintf(nowinfo,"%d,%d,%d,%d,%d,%d,%d,%s",timeinfo->tm_year,timeinfo->tm_mon+1,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,UTIL_GetBatteryLevel(),UTIL_GetSignalQuality(),str_default); if(strcmp(curinfo,nowinfo)) { strcpy(curinfo,nowinfo); if(flag_update_part) flag_update_part=false; update(); } else { if(!flag_update_part) flag_update_part=true; //如果只有秒针改变,只绘制部分 update( clk_center_x - sec_len ,clk_center_y - sec_len ,sec_len +sec_len , sec_len+sec_len);//调用重绘 } } ZKbMainWidget::timerEvent(e); }void MyZKbMain::slotTimeout() //解锁超时处理{ if(flag_w_unlock) { flag_w_unlock=false; strcpy(str_default,KEY_LOCKING_STR); update(); } else { strcpy(str_default,KEY_LOCKING_STR);// update(); }// QTimer::singleShot(500, this, SLOT(slotTimeout()));}MyZKbMain::~MyZKbMain(){}int MyZKbMain::ini_soft() //初始化过程{// char inifile[]={"softlock.ini"}; flag_update_part=false; flag_media_key=false; pre_main_db_size=get_main_db_size(); now_main_db_size=0; memset(curinfo,0,sizeof curinfo); FILE * fp=fopen( "softlock.ini","r"); if(fp!=NULL) { ulock_timeout=abs(getintformini(fp,"ulock_timeout"))+1; start_x=getintformini(fp,"start_x"); start_y=getintformini(fp,"start_y"); sec_len=getintformini(fp,"sec_len"); min_len=getintformini(fp,"min_len"); hou_len=getintformini(fp,"hou_len"); clk_center_x=getintformini(fp,"clk_center_x"); clk_center_y=getintformini(fp,"clk_center_y"); dot_r=getintformini(fp,"dot_r"); sec_width=getintformini(fp,"sec_width"); min_width=getintformini(fp,"min_width"); hou_width=getintformini(fp,"hou_width"); sec_color=getintformini(fp,"sec_color"); min_color=getintformini(fp,"min_color"); hou_color=getintformini(fp,"hou_color"); dig_color=getintformini(fp,"dig_color"); date_color=getintformini(fp,"date_color"); color_default=getintformini(fp,"color_default"); dot_color=getintformini(fp,"dot_color"); // dig_size=getintformini(fp,"dig_size"); // date_size=getintformini(fp,"date_size"); font_size=getintformini(fp,"font_size"); date_flag=getintformini(fp,"date_flag"); date_x=getintformini(fp,"date_x"); date_y=getintformini(fp,"date_y"); dig_format=getintformini(fp,"dig_format"); dig_x=getintformini(fp,"dig_x"); dig_y=getintformini(fp,"dig_y"); x_default=getintformini(fp,"x_default"); y_default=getintformini(fp,"y_default"); flag_default=getintformini(fp,"flag_default"); battery_w=getintformini(fp,"battery_w"); battery_h=getintformini(fp,"battery_h"); battery_x=getintformini(fp,"battery_x"); battery_y=getintformini(fp,"battery_y"); battery_color=getintformini(fp,"battery_color"); battery_r=getintformini(fp,"battery_r"); signal_w=getintformini(fp,"signal_w"); signal_space=getintformini(fp,"signal_space"); signal_min=getintformini(fp,"signal_min"); signal_max=getintformini(fp,"signal_max"); signal_x=getintformini(fp,"signal_x"); signal_y=getintformini(fp,"signal_y"); signal_color=getintformini(fp,"signal_color"); fclose(fp); } strcpy(str_default,KEY_LOCKING_STR); time_t rawtime; time ( &rawtime ); timeinfo = localtime ( &rawtime );/* sprintf (contect_start, "%4d-%02d-%02d %02d:%02d:%02d",1900+timeinfo->tm_year, 1+timeinfo->tm_mon,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec); ori_h=timeinfo->tm_hour; ori_m =timeinfo->tm_min; ori_s=timeinfo->tm_sec;*/ flag_w_unlock=false; clk_x_arr[4]=clk_center_x; clk_y_arr[4]= clk_center_y ; clk_x_arr[CLK_SEC+2]=0; clk_y_arr[CLK_MIN+2]=0; return 0;}void MyZKbMain::keyReleaseEvent(QKeyEvent* k) //按键释放{ switch (k->key()) { //5 case 4100: case 53: //软件信息// sprintf(str_default,"Letterb @scnu_cs_05\nboy.letterb@yahoo.com.cn"); sprintf(str_default,"Letterb @scnu_cs_05\nboy.letterb@yahoo.com.cn"); if(flag_update_part) flag_update_part=false; update(); QTimer::singleShot(ulock_timeout, this, SLOT(slotTimeout())); break; case 42: //*键释放处理 flag_w_unlock=true; sprintf(str_default,KEY_ULOCK_STR); if(flag_update_part) flag_update_part=false; update(); QTimer::singleShot(ulock_timeout, this, SLOT(slotTimeout())); break; case 4154: if(flag_w_unlock) //右键释放处理 close(); //关闭软件 else { sprintf(str_default,KEY_NOTIFY); // update(); QTimer::singleShot(ulock_timeout, this, SLOT(slotTimeout())); } break; case 35: if(flag_w_unlock) { if(sec_width==0) sec_width=1; else { sec_width=0; update(); } } else { sprintf(str_default,KEY_NOTIFY); QTimer::singleShot(ulock_timeout, this, SLOT(slotTimeout())); } break; default: if(!flag_media_key) strcpy(str_default,KEY_NOTIFY); else { flag_media_key=false; return QWidget::keyReleaseEvent(k); //让系统响应音乐键 }// update(); QTimer::singleShot(ulock_timeout, this, SLOT(slotTimeout())); break; }// return QWidget::keyPressEvent(k);}void MyZKbMain::keyPressEvent(QKeyEvent* k) //按下处理{ switch (k->key()) { //5 case 4118: case 4119: case 4171: case 4172: case 4169://音乐键按下处理 if(flag_w_unlock) { flag_media_key=true; strcpy(str_default,KEY_MEDIA); return QWidget::keyPressEvent(k); } break; default: break; }}void MyZKbMain::paintEvent(QPaintEvent * pe){ int blt_x ;int blt_y ;int blt_w ; int blt_h; QPixmap mypix;//( "softlock.png"); mypix=myimg; //将背景图作为画布 QRect ur(0,0,240,320); //用户可见区域 ur=pe->rect(); QPainter p(&mypix); //定义画笔 p.begin(&mypix); //开始绘制// p.drawImage(clk_center_x-clockimg.width()/2,clk_center_y-clockimg.height()/2,clockimg);// p.drawImage(0,0,myimg,240,0,49,49); QFont f("AMCSL",font_size); //设置字体大小 p.setFont(f); if(!flag_update_part) //重绘所有 { drawsignal(p); drawbattery(p); drawdate(p); drawclock(p, blt_x , blt_y , blt_w , blt_h); } else drawclock(p, blt_x , blt_y ,blt_w , blt_h);//重绘部分 if(!flag_update_part) { QPen pen(color_default,1); p.setPen(pen); p.drawText(x_default,y_default,300,240,flag_default,ChineseAndEnglish(str_default)); }// p.drawImage(120,160,dotimg,0,0,-1,-1); p.end(); //结束绘制 setWFlags(getWFlags() | Qt::WRepaintNoErase); //设置无背景色***** if(!flag_update_part) bitBlt( this, start_x , start_y , &mypix, 0, 0, SCREEN_W, SCREEN_H );//将内存中画布复制到屏幕 else { bitBlt( this, start_x +blt_x , start_y + blt_y, &mypix, blt_x, blt_y, blt_w, blt_h ); //部分内存复制// printf(" blt_x=%d, blt_y=%d, blt_w=%d, blt_h=%d\n", blt_x, blt_y, blt_w, blt_h); //bitBlt( this, start_x + clk_center_x - sec_len, start_y + clk_center_y - sec_len , &mypix, clk_center_x - sec_len ,clk_center_y - sec_len ,sec_len +sec_len , sec_len+sec_len); //0, 0, SCREEN_W, SCREEN_H ); } QWidget::paintEvent( pe);}int MyZKbMain::getintformini(FILE * fp, char * keyname){ int value; int i; char buf[50]; char tmp[20]; char *p; fseek(fp,0,SEEK_SET); memset(tmp,0,sizeof tmp);// FILE *fp;// if((fp=fopen(filename,"r"))==NULL) // printf("error\n"); while(fgets(buf,sizeof buf,fp)) { if(buf[0]=='#') continue; if(p=strstr(buf,keyname)) { p+=strlen(keyname); p++; i=0; while(*p) { tmp[i++]=*p; p++; } tmp[i]='\0'; // printf(tmp); break; } }// fclose (fp); value=atoi(tmp); return value;}void MyZKbMain::GetDayOf(Date &tdate,QString &strLuner) { /*天干名称*/ const char *cTianGan[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"}; /*地支名称*/ const char *cDiZhi[] = {"子","丑","寅","卯","辰","巳","午", "未","申","酉","戌","亥"}; /*属相名称*/ const char *cShuXiang[] = {"鼠","牛","虎","兔","龙","蛇", "马","羊","猴","鸡","狗","猪"}; /*农历日期名*/ const char *cDayName[] = {"*","初一","初二","初三","初四","初五", "初六","初七","初八","初九","初十", "十一","十二","十三","十四","十五", "十六","十七","十八","十九","二十", "廿一","廿二","廿三","廿四","廿五", "廿六","廿七","廿八","廿九","三十"}; /*农历月份名*/ const char *cMonName[] = {"*","正","二","三","四","五","六", "七","八","九","十","十一","腊"}; /*公历每月前面的天数*/ const int wMonthAdd[12] = {0,31,59,90,120,151,181,212,243,273,304,334}; /*农历数据*/ const int wNongliData[100] = {2635,333387,1701,1748,267701,694,2391,133423,1175,396438 ,3402,3749,331177,1453,694,201326,2350,465197,3221,3402 ,400202,2901,1386,267611,605,2349,137515,2709,464533,1738 ,2901,330421,1242,2651,199255,1323,529706,3733,1706,398762 ,2741,1206,267438,2647,1318,204070,3477,461653,1386,2413 ,330077,1197,2637,268877,3365,531109,2900,2922,398042,2395 ,1179,267415,2635,661067,1701,1748,398772,2742,2391,330031 ,1175,1611,200010,3749,527717,1452,2742,332397,2350,3222 ,268949,3402,3493,133973,1386,464219,605,2349,334123,2709 ,2890,267946,2773,592565,1210,2651,395863,1323,2707,265877}; static int wCurYear,wCurMonth,wCurDay; static int nTheDate,nIsEnd,m,k,n,i,nBit; //char szNongli[30], szNongliDay[10],szShuXiang[10]; /*---取当前公历年、月、日-- -*/ wCurYear = tdate.year; wCurMonth = tdate.month; wCurDay = tdate.day;/*---计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)---*/ nTheDate = (wCurYear - 1921) * 365 + (wCurYear - 1921) / 4 + wCurDay + wMonthAdd [wCurMonth - 1] - 38; if((!(wCurYear % 4)) && (wCurMonth > 2)) nTheDate = nTheDate + 1; /*--计算农历天干、地支、月、日---*/ nIsEnd = 0; m = 0; while(nIsEnd != 1) { if(wNongliData[m] < 4095) k = 11; else k = 12; n = k; while(n>=0) { //获取wNongliData(m)的第n个二进制位的值 nBit = wNongliData[m]; for(i=1;i<n+1;i++) nBit = nBit/2; nBit = nBit % 2; if (nTheDate <= (29 + nBit)) { nIsEnd = 1; break; } nTheDate = nTheDate - 29 - nBit; n = n - 1; } if(nIsEnd) break; m = m + 1; } wCurYear = 1921 + m; wCurMonth = k - n + 1; wCurDay = nTheDate; if (k == 12) { if (wCurMonth == wNongliData[m] / 65536 + 1) wCurMonth = 1 - wCurMonth; else if (wCurMonth > wNongliData[m] / 65536 + 1) wCurMonth = wCurMonth - 1; } /*--生成农历天干、地支、属相 ==> wNongli--*/ strLuner = ChineseAndEnglish(cShuXiang[((wCurYear - 4) % 60) % 12]) + ChineseAndEnglish("\(") +ChineseAndEnglish(cTianGan[((wCurYear - 4) % 60) % 10]) +ChineseAndEnglish(cDiZhi[((wCurYear - 4) % 60) % 12]) +ChineseAndEnglish(")年");/*--生成农历月、日 ==> wNongliDay--*/ if (wCurMonth < 1){ strLuner = strLuner + ChineseAndEnglish("闰") + ChineseAndEnglish(cMonName[-1 * wCurMonth]);}else{ strLuner = strLuner + ChineseAndEnglish(cMonName[wCurMonth]);}strLuner = strLuner + ChineseAndEnglish("月") + ChineseAndEnglish(cDayName[wCurDay]);} int main( int argc, char **argv ){ ZApplication* a = new ZApplication( argc, argv ); MyZKbMain*zmain=new MyZKbMain(argv[1]); a->setMainWidget( zmain ); zmain->show(); a->exec(); delete zmain; delete a; return argc;}#include"softlock.moc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -