C语言实现-华为太空人手表
生活随笔
收集整理的這篇文章主要介紹了
C语言实现-华为太空人手表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
??價值6000萬的太空人手表:
創建空項目
類似的全透明窗口:360助手。。。
void setTransparentWindow() {// 去掉窗口的標題欄HWND hwnd = GetHWnd(); //獲取當前窗口句柄SetWindowLong( //設置窗口屬性說hwnd,GWL_STYLE, //設定一個新的窗口風格。//GetWindowLong 獲取指定串口的屬性GetWindowLong(hwnd, GWL_STYLE) - WS_CAPTION);//WS_CAPTION帶標題欄的窗口風格// 設置窗口的位置和大小,并設置為頂層窗口SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), SWP_SHOWWINDOW);//設置透明// 把當前窗口設置為分層窗口// GWL_EXSTYLE 窗口的擴展樣式, EX:擴展// WS_EX_LAYERED 分層窗口SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);// 設置分層窗口的透明度SetLayeredWindowAttributes(hwnd,RGB(0, 0, 0), //指定需要透明的背景顏色值0, //設置透明度,0表示完全透明,255表示不透明LWA_COLORKEY); // 透明方式:窗體中的所有顏色為參數2的地方將變為透明 }void init() {// 創建窗口initgraph(GetSystemMetrics(SM_CXSCREEN), //桌面寬度GetSystemMetrics(SM_CYSCREEN));//桌面高度setTransparentWindow(); }測試效果。
3.3 加載圖片資源
拷貝圖片資源到項目目錄中:
?加載圖片
IMAGE imgs[71]; IMAGE sz[11]; IMAGE sz2[10];void loadImages() {// 預加載太空人圖片char imgName[64];for (int i = 0; i < 71; i++) {sprintf_s(imgName, sizeof(imgName), "img/human_%04d_圖層 %d.jpg", i, 71 - i);loadimage(&imgs[i], imgName, 105, 105, true);}// 預加載數字圖片for (int i = 0; i < 10; i++) {sprintf_s(imgName, sizeof(imgName), "img/%d.jpg", i);loadimage(&sz[i], imgName, 40, 70, true);loadimage(&sz2[i], imgName, 20, 35, true);}loadimage(&sz[10], "img/rect.jpg", 10, 10, true); }void init() {// 創建窗口initgraph(GetSystemMetrics(SM_CXSCREEN), //桌面寬度GetSystemMetrics(SM_CYSCREEN));//桌面高度setTransparentWindow();loadImages(); //加載圖片資源 }設置新的坐標體系
?
void init() {// 創建窗口initgraph(GetSystemMetrics(SM_CXSCREEN), //桌面寬度GetSystemMetrics(SM_CYSCREEN));//桌面高度setTransparentWindow();loadImages(); //加載圖片資源// 設置坐標原點setorigin(GetSystemMetrics(SM_CXSCREEN) - 200,200); }繪制表盤
void drawClockBG() {// 繪制表盤IMAGE bg;loadimage(&bg, "img/bg3.jpg", 400, 400, true);putimage(-200, -200, &bg); }測試,發現有毛刺。
解決毛刺:
void drawClockBG() {// 繪制表盤IMAGE bg;loadimage(&bg, "img/bg3.jpg", 400, 400, true);putimage(-200, -200, &bg);// 畫一個圓環,去除毛刺setlinecolor(BLACK); // 設置線條顏色為黑色setlinestyle(PS_SOLID | PS_ENDCAP_FLAT, 8); // 設置線條樣式為寬度 10 的實線,端點是平的circle(0, 0, 202); }繪制太空飛船
確定坐標位置
?繪制太空人
int main() {init();drawClockBG(); //繪制表盤int k = 0;while (1) {// to do 繪制太空人putimage(-50, -15, &imgs[k]);k = (k + 1) % 71;drawTime(); //繪制時間Sleep(30); // 幀等待}closegraph();return 0; }繪制時間
導入工具庫函數
#include "date_tool.h"void drawTime() {static int last_hour = -1, last_minute = -1, last_second = -1;int hour, minute, second;getTime(&hour, &minute, &second);int h1 = hour / 10;int h2 = hour % 10;if (last_hour != hour) putimage(-130, -90, &sz[h1]); //-130, -90if (last_hour != hour) putimage(-80, -90, &sz[h2]); //-80, -90static bool first = true;if (first) putimage(-30, -75, &sz[10]);//-30,-75if (first) putimage(-30, -45, &sz[10]);//-30,-45int m1 = minute / 10;int m2 = minute % 10;if (last_minute != minute) putimage(-10, -90, &sz[m1]);//-10, -90if (last_minute != minute) putimage(40, -90, &sz[m2]);//40,-90if (first || last_second / 10 != second / 10) putimage(90, -55, &sz2[second / 10]); //90,-55if (first || last_second % 10 != second % 10) putimage(120, -55, &sz2[second % 10]); //120,-55first = false;last_hour = hour;last_minute = minute;last_second = second; }?繪制日期
void drawDate() {char str[16] = "";int year, month, day;getDate(&year, &month, &day, str);setbkcolor(RGB(223, 230, 240));settextcolor(RGB(15, 15, 15)); //設置字體顏色settextstyle(25, 0, "微軟雅黑"); //設置字體樣式outtextxy(70, 0, str); //在指定位置輸出文本getWeek(year, month, day, str);outtextxy(65, 30, str);sprintf(str, "%d-%d", month, day);outtextxy(110, 30, str); }void drawTime() {static int last_hour = -1, last_minute = -1, last_second = -1;int hour, minute, second;getTime(&hour, &minute, &second);int h1 = hour / 10;int h2 = hour % 10;if (last_hour != hour) putimage(-130, -90, &sz[h1]); //-130, -90if (last_hour != hour) putimage(-80, -90, &sz[h2]); //-80, -90static bool first = true;if (first) putimage(-30, -75, &sz[10]);//-30,-75if (first) putimage(-30, -45, &sz[10]);//-30,-45int m1 = minute / 10;int m2 = minute % 10;if (last_minute != minute) putimage(-10, -90, &sz[m1]);//-10, -90if (last_minute != minute) putimage(40, -90, &sz[m2]);//40,-90if (first || last_second / 10 != second / 10) putimage(90, -55, &sz2[second / 10]); //90,-55if (first || last_second % 10 != second % 10) putimage(120, -55, &sz2[second % 10]); //120,-55if (first || (hour == 0 && minute == 0 && second < 3)) {drawDate();}first = false;last_hour = hour;last_minute = minute;last_second = second; }后續私信我哦~
總結
以上是生活随笔為你收集整理的C语言实现-华为太空人手表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mobile GMaps - Googl
- 下一篇: 广州楼市:这类楼盘持续跑赢大势,聪明人只