• vc下时钟实现


    前面写了两个小程序,没有说明原理(逻辑关系):这里一并说明。

    1.首先我们得理解消息机制,也就是应用程序在和操作系统交互的时候(为什么是操作系统而不是用户,其实是一个意思,因为用户的数据需要先经过操作系统),应用程序所处的状态,一共有五种,1.阻塞,2.不阻塞,3.select即阻塞于select是介于1和2之间的实现,4.信号或者说消息,5.类信号机制。消息机制原理和中断系统原理一样,系统不需要轮询应用程序,用户需要注册回调函数(类似于中断处理函数),然后应用程序该干嘛就干嘛。当应用程序声明的事件(中断产生)产生,操作系统会自动调用回调函数。

    2.句柄,windows系统中用来唯一标识一个对象,或者一个程序的多个实例的整型数值。就像linux里面用PID标识一样。用于对对象的操作。

    时钟实现,是用户设置定时器事件和定时器回调函数,回调函数里处理系统时间即可。

    代码如下:

    View Code
     1 #include "stdafx.h"
     2 #include <windows.h>
     3 #include <windowsx.h>
     4 #include "resource.h"
     5 #include "MainDlg.h"
     6 
     7 
     8 BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
     9 {
    10     switch(uMsg)
    11     {
    12         HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
    13         HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
    14         HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    15     }
    16 
    17 
    18     return FALSE;
    19 }
    20 
    21 VOID CALLBACK mytimerproc (
    22 HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
    23 {
    24     SYSTEMTIME stlocal;
    25     GetLocalTime(&stlocal);//取系统时间
    26     TCHAR strtime[256];
    27     wsprintf(strtime,"%i年%i月%i日  %i:%i:%i",stlocal.wYear,stlocal.wMonth,stlocal.wDay,stlocal.wHour,stlocal.wMinute,stlocal.wSecond);
    28     SetDlgItemText(hwnd,IDC_EDIT1,strtime);
    29     //SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2);//close monitor
    30     //SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, -1);//open  monitor
    31 
    32 
    33 
    34 
    35 
    36 }
    37 
    38 
    39 
    40 BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
    41 {
    42     SetTimer(hwnd,0,1000,mytimerproc);
    43     return TRUE;
    44 }
    45 
    46 void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
    47 {
    48     switch(id)
    49     {
    50         case IDC_OK:
    51         {
    52         
    53         }
    54         break;
    55         default:
    56         break;
    57     }
    58 }
    59 
    60 void Main_OnClose(HWND hwnd)
    61 {
    62     EndDialog(hwnd, 0);
    63 }

    运行结果:

    一切源于对计算机的热爱
  • 相关阅读:
    filter的用法
    刚下载好的 vscode 不能运行,一片黑 以及终端不能输入 解决办法
    JS获取光标在input 或 texterea 中下标位置
    JS 数组去重
    字符串操作函数:JSON.parse()、JSON.stringify()、toString 的区别,字符串转数组 str.split(','),数组转字符串String(),以及对象拼接合并Object.assign(),数组拼接合并concat()
    创建标准化工程目录脚本
    configParse模块
    json与api- 天气api 博客词频分析
    文件读写
    os模块、文件压缩 、匹配文件后缀名:fnmatch glob
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/2560411.html
Copyright © 2020-2023  润新知