日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言实现-华为太空人手表

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言实现-华为太空人手表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 項目介紹
  • ??價值6000萬的太空人手表:

  • 項目準備
  • VS/VC++的任意版本 ?(VC6, 2010, 2012, 2013, 2015,2017,2019)
  • easyx圖形庫
  • 項目實現
  • 創建項目
  • 創建空項目

  • 實現項目架構
  • #include <graphics.h> #include <conio.h> #include <stdio.h> #include <mmsystem.h>#pragma comment(lib, "winmm.lib")void init() {}void drawClockBG() {}void drawTime() {}int main() {init();drawClockBG(); //繪制表盤while (1) {// to do 繪制太空人drawTime(); //繪制時間Sleep(30); // 幀等待}closegraph();return 0; }
  • 創建窗口
  • void init() {// 創建窗口initgraph(GetSystemMetrics(SM_CXSCREEN), //桌面寬度GetSystemMetrics(SM_CYSCREEN));//桌面高度 }

    類似的全透明窗口: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语言实现-华为太空人手表的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。