WAKEUP.C的详细注释

本文档详细注释了WAKEUP.C的源代码,这是一个基于Windows的简单闹钟程序。程序使用C语言编写,利用waveout API进行音频播放,通过创建子窗口、设置定时器和处理窗口消息实现功能。代码中包含了时间选择、核取方块以及关闭响铃按钮的交互逻辑,同时解释了如何创建和播放音频流文件。
摘要由CSDN通过智能技术生成

/*---------------------------------------
   WAKEUP.C -- Alarm Clock Program
               (c) Charles Petzold, 1998
  ---------------------------------------*/

#include <windows.h>
#include <commctrl.h>  //包含通用控件头文件

     // ID values for 3 child windows三个子窗口ID

#define ID_TIMEPICK 0    //时间控件ID
#define ID_CHECKBOX 1  //核取方块ID
#define ID_PUSHBTN  2    //关闭响铃按钮ID

     // Timer ID计时器ID

#define ID_TIMER    1

     // Number of 100-nanosecond increments (ie FILETIME ticks) in an hour一小时包含多少个100纳秒的
    //数量

#define FTTICKSPERHOUR (60 * 60 * (LONGLONG) 10000000)

     // Defines and structure for waveform "file"   定义音频流结构文件

#define SAMPRATE  11025    //取样频率
#define NUMSAMPS  (3 * SAMPRATE)    //取样的数量
#define HALFSAMPS (NUMSAMPS / 2)   //取样数量的一半

typedef struct
{
     char  chRiff[4] ;
     DWORD dwRiffSize ;
     char  chWave[4] ;
     char  chFmt [4] ;
     DWORD dwFmtSize ;
     PCMWAVEFORMAT pwf ;
     char  chData[4] ;
     DWORD dwDataSize ;
     BYTE  byData[0] ;
}
WAVEFORM ;  //定义一个音频流结构体

     // The window proc and the subclass proc主窗口过程与子窗口类过程函数

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;  //主窗口过程函数
LRESULT CALLBACK SubProc (HWND, UINT, WPARAM, LPARAM) ;  //子窗口类过程函数

     // Original window procedure addresses for the subclassed windows储存原子窗口过程函数数组

WNDPROC SubbedProc [3] ;

     // The current child window with the input focus   具有输入焦点的当前子窗口

HWND hwndFocus ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInst,  //主函数
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName [] = TEXT ("WakeUp") ;
     HWND         hwnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;

     wndclass.style         = 0 ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) (1 + COLOR_BTNFACE) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;

     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }

     hwnd = CreateWindow (szAppName, szAppName,
                          WS_OVERLAPPED | WS_CAP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值