- 最后登录
- 2010-8-28
- 注册时间
- 2006-12-1
- 精华
- 0
- 积分
- 120
- 阅读权限
- 20
- 帖子
- 161
 
- 金钱
- 1257 元
- 经验
- 244 点
- 威望
- 12 点
- 贡献
- 0 点
- 精华
- 0
|

凡本论坛原创内容,其作者享有著作权,未经许可谢绝转载。
RT
其实这个是偶源代码导读系列的一个作品……极度无聊
/**************************************************
** Project:BinaryClock
** File:BinaryClockDlg.cpp
** Edition:v1.0.0 Demo
** Coder:KingsamChen [MDSA Group]
** Last Modify:2010-1-10
**************************************************/
#include "stdafx.h"
#include "BinaryClock.h"
#include "BinaryClockDlg.h"
#include ".\binaryclockdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CBinaryClockDlg 对话框
CBinaryClockDlg::CBinaryClockDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBinaryClockDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_CLOCKICO);
}
void CBinaryClockDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CBinaryClockDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// CBinaryClockDlg 消息处理程序
BOOL CBinaryClockDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// 加载Bitmap
m_hNumber0 = ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_NUMBER0));
m_hNumber1 = ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_NUMBER1));
// 设置定时器700ms触发一次
VERIFY(SetTimer(UPDATE_TIMER, TIMEELAPSE, NULL));
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CBinaryClockDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CBinaryClockDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
/*
输 入: nIDEvent(UINT) - 定时器ID
输 出: -
功 能: 获取日期和时间
*/
void CBinaryClockDlg::OnTimer(UINT nIDEvent)
{
if (UPDATE_TIMER == nIDEvent)
{
TCHAR szData[LENGTH] = {0};
TCHAR szTime[LENGTH] = {0};
::GetDateFormat(LOCALE_USER_DEFAULT, 0, NULL, _T("yyyyMMdd"), szData, LENGTH);
::GetTimeFormat(LOCALE_USER_DEFAULT, TIME_FORCE24HOURFORMAT, NULL, _T("hhmmss"),
szTime, LENGTH);
// 转换日期
DecToBin(szData[0], YEAR1, 4);
DecToBin(szData[1], YEAR2, 4);
DecToBin(szData[2], YEAR3, 4);
DecToBin(szData[3], YEAR4, 4);
DecToBin(szData[4], MONTH1, 1);
DecToBin(szData[5], MONTH2, 4);
DecToBin(szData[6], DAY1, 2);
DecToBin(szData[7], DAY2, 4);
// 转换时间
DecToBin(szTime[0], HOUR1, 2);
DecToBin(szTime[1], HOUR2, 4);
DecToBin(szTime[2], MINUTE1, 3);
DecToBin(szTime[3], MINUTE2, 4);
DecToBin(szTime[4], SECOND1, 3);
DecToBin(szTime[5], SECOND2, 4);
}
CDialog::OnTimer(nIDEvent);
}
/*
输 入: -
输 出: BOOL
功 能: 清理定时器
*/
BOOL CBinaryClockDlg::DestroyWindow()
{
KillTimer(UPDATE_TIMER);
return CDialog::DestroyWindow();
}
/*
输 入: chBinary(TCHAR) - 原始10进制数字
nType(int) - 目标类型
nMaxSize(int) - 最大所需图片数
输 出: -
功 能: 将10进制数字转成相应的2进制,并用图显示
*/
void CBinaryClockDlg::DecToBin( TCHAR chBinary, int nType, int nMaxSize )
{
// 把TCHAR转成int
// 0的ASCII是48
int nDec = chBinary - 48;
int nBinary[4] = {0};
// 把0~9转换成相应的二进制
// 直接通过查表,使得转换的时间复杂度为O(1)
// 注意数组下标是从二进制的最高位开始
switch (nDec)
{
case 0:
break;
case 1:
nBinary[3] = 1;
break;
case 2:
nBinary[2] = 1;
break;
case 3:
nBinary[2] = nBinary[3] = 1;
break;
case 4:
nBinary[1] = 1;
break;
case 5:
nBinary[1] = nBinary[3] = 1;
break;
case 6:
nBinary[1] = nBinary[2] = 1;
break;
case 7:
nBinary[1] = nBinary[2] = nBinary[3] = 1;
break;
case 8:
nBinary[0] = 1;
break;
case 9:
nBinary[0] = nBinary[3] = 1;
break;
}
SetDlgItemInt(nType, nDec, FALSE);
int nCount = nType + nMaxSize;
// 填充Bitmap
// 这里要注意的是,是从最底层的图片开始网上填充
// 某些日期对应的二进制数字位数不同,但是都存在低位
for (int n = 0; n < nMaxSize; n++)
{
CStatic* pBmp = (CStatic*)GetDlgItem(nCount - n);
pBmp->SetBitmap(nBinary[3 - n] ? m_hNumber1 : m_hNumber0);
}
}
http://www.uushare.com/user/kingsamchen/file/2412781 |
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
-
|