//windows1.cpp: 定义应用程序的入口点。 // #include "stdafx.h" #include "windows1.h" #include <cmath> #define MAX_LOADSTRING 100 // 全局变量: typedef struct Time { int sec; }TimeStructure; HINSTANCE hInst; // 当前实例 WCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名 // 此代码模块中包含的函数的前向声明: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 在此放置代码。 // 初始化全局字符串 LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadStringW(hInstance, IDC_WINDOWS1, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // 执行应用程序初始化: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWS1)); MSG msg; // 主消息循环: while (GetMessage(&msg, nullptr, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam; } // // 函数: MyRegisterClass() // // 目的: 注册窗口类。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEXW wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWS1)); wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWS1); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassExW(&wcex); } // // 函数: InitInstance(HINSTANCE, int) // // 目的: 保存实例句柄并创建主窗口 // // 注释: // // 在此函数中,我们在全局变量中保存实例句柄并 // 创建和显示主程序窗口。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { hInst = hInstance; // 将实例句柄存储在全局变量中 HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } void AdjustTime(TimeStructure *x) { if (x->sec == 60) { x->sec = 0; } else { x->sec++; } } // // 函数: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的: 处理主窗口的消息。 // // WM_COMMAND - 处理应用程序菜单 // WM_PAINT - 绘制主窗口 // WM_DESTROY - 发送退出消息并返回 // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hDc; PAINTSTRUCT ps; HPEN hPen; RECT clientRect; static TimeStructure x; double sita = 0; HBRUSH hBrush; int xOrg, yOrg, xBegin, xEnd, yBegin, yEnd, rClock, xBegin1, yBegin1, xEnd1, yEnd1; int rLine1; switch (message) { case WM_CREATE: SetTimer(hWnd, 9999, 100, NULL); break; case WM_PAINT: { AdjustTime(&x); x.sec++; hDc = BeginPaint(hWnd, &ps); GetClientRect(hWnd, &clientRect); hPen = (HPEN)GetStockObject(BLACK_PEN); SelectObject(hDc, hPen); //获取坐标 xOrg = (clientRect.left + clientRect.right) / 2; yOrg = (clientRect.top + clientRect.bottom) / 2; //设置外圆半径 rClock = min(xOrg, yOrg) - 50; rLine1 = rClock; //绘制外圆 Ellipse(hDc, xOrg - rClock, yOrg - rClock, xOrg + rClock, yOrg + rClock); //绘制红色风扇 hBrush = CreateSolidBrush(RGB(255,0,0)); SelectObject(hDc, hBrush); sita = 2 * 3. * x.sec / 60; xBegin = xOrg + (int)(rLine1 * sin(sita)); yBegin = yOrg - (int)(rLine1 * cos(sita)); xEnd = xOrg - rClock; yEnd = yOrg - rClock; sita = 2 * 3. * (x.sec + 40) / 60; xBegin1 = xOrg + (int)(rLine1 * sin(sita)); yBegin1 = yOrg - (int)(rLine1 * cos(sita)); xEnd1 = xOrg + rClock; yEnd1 = yOrg + rClock; Pie(hDc, xEnd, yEnd, xEnd1, yEnd1, xBegin, yBegin, xBegin1, yBegin1); //绘制黄色风扇 hBrush = CreateSolidBrush(RGB(255, 255, 0)); SelectObject(hDc, hBrush); sita = 2 * 3. * (x.sec + 40) / 60; xBegin = xOrg + (int)(rLine1 * sin(sita)); yBegin = yOrg - (int)(rLine1 * cos(sita)); xEnd = xOrg - rClock; yEnd = yOrg - rClock; sita = 2 * 3. * (x.sec + 80) / 60; xBegin1 = xOrg + (int)(rLine1 * sin(sita)); yBegin1 = yOrg - (int)(rLine1 * cos(sita)); xEnd1 = xOrg + rClock; yEnd1 = yOrg + rClock; Pie(hDc, xEnd, yEnd, xEnd1, yEnd1, xBegin, yBegin, xBegin1, yBegin1); //绘制蓝色风扇 hBrush = CreateSolidBrush(RGB(0, 255, 255)); SelectObject(hDc, hBrush); sita = 2 * 3. * (x.sec + 80) / 60; xBegin = xOrg + (int)(rLine1 * sin(sita)); yBegin = yOrg - (int)(rLine1 * cos(sita)); xEnd = xOrg - rClock; yEnd = yOrg - rClock; sita = 2 * 3. * (x.sec) / 60; xBegin1 = xOrg + (int)(rLine1 * sin(sita)); yBegin1 = yOrg - (int)(rLine1 * cos(sita)); xEnd1 = xOrg + rClock; yEnd1 = yOrg + rClock; Pie(hDc, xEnd, yEnd, xEnd1, yEnd1, xBegin, yBegin, xBegin1, yBegin1); DeleteObject(hPen); DeleteObject(hBrush); EndPaint(hWnd, &ps); break; } case WM_COMMAND: { int wmId = LOWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } } break; case WM_DESTROY: PostQuitMessage(0); break; case WM_TIMER: if (wParam == 9999) InvalidateRect(hWnd, NULL, true); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // “关于”框的消息处理程序。 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; } return (INT_PTR)FALSE; }
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/36402.html