电子式时钟
作者:
看了VC知识库《在线杂志》第27期的“”,确实不错
,但失真严重。认识咱们知识库这么久,学了不少东西,我也该作点"贡献"了,于是自己动手也写一个。本文的示例程序界面如图一所示:
图一
程序说明
首先建立一个基于对话框的工程,导入数码位图资源,直接在对话框类CMy2Dlg中添加类mytime
程序中的mytime类主要提供两个函数接口:一个是set()用来设置显示位置;一个是myfun()用来设置显示数字来显示。
class mytime
{
public:
int change(char);
mytime();
~mytime();
CString m_time;
void myfun(CString temp);//显示数字字符串
void set(CDialog *,int tnum,int tx,int ty,int tspace);//设置显示位置
CStatic *m_pictur[20];// 静态图 指针 数组
int num;// 静态图个数
int x;// 起始X坐标
int y;// 起始Y坐标
int space;// 各数码之间 间距
};
主要成员函数set()和myfun():
void mytime::myfun(CString temp)
{
m_time=temp;
int mynum=m_time.GetLength();
for(int k=0;kSetIcon(myico);//设置显示的图标
}
for(int i=k;iSetIcon(myico);
}
}
void mytime::set(CDialog *parent,int tnum,int tx,int ty,int tspace)
{
CMy2Dlg *mypar=(CMy2Dlg*)parent;
for(int i=0;iCreate(NULL,SS_ICON,aa1,mypar,1);// 创建静态图标控件
m_pictur[k]->ShowWindow(true);
}
}
然后在CMy2Dlg类中加入CMy2Dlg::OnTimer()消息响应函数以实现时钟功能,其它具体代码看源码内有详细说明。
程序中难免有不足和BUG,欢迎指正。
--------------------next---------------------
Petzold的《Windows程序设计》里也有这个,他用gdi画的。 ( annidy 发表于 2008-8-28 10:56:00)
要改一下!
严重的GDI资源泄露! ( wolong98 发表于 2004-12-28 15:38:00)
是有几分钟后就不再显示这个问题。
可能是ExtractIcon函数引起的。把m_imgList和myico改成成员变量让ExtractIcon函数在构造函数内执行。
具体更改如下:
1.成员变量声明:
CImageList m_imgList;
HICON myico[16];
2.构造函数:
mytime::mytime()
{
m_time=_T("");
num=0;
m_imgList.Create(IDB_BITMAP1,12, 1, RGB(255,255,255));//创建位图链 每个位图12像素
for(int i=0;i<16;i++)//释放图标
{
myico[i]= m_imgList.ExtractIcon(i);
}
}
3.myfun函数:
void mytime::myfun(CString temp)
{
m_time=temp;
int mynum=m_time.GetLength();
for(int k=0;k
{
m_pictur[k]->SetIcon(myico[10]);//设置显示的图标
}
for(int i=k;i {
m_pictur[i]->SetIcon(myico[change(m_time[i-k])]);
}
} ( lhongliangi 发表于 2004-7-13 13:12:00)
问题:几分钟后就不再显示时间,连窗口标题的图标也没了。 ( vcxian 发表于 2004-7-8 13:13:00)
不用位图也没有太大难度,只是要一点耐心...慢慢用gdi画 ( redcheek 发表于 2004-7-6 12:42:00)
偶记得在codeproject还是codeguru上有一个不用位图资源的,也可以显示成这个样子,当时看到,甚是佩服。各位有兴趣可以找一找 ( yulincat 发表于 2004-7-5 18:25:00)
.......................................................
--------------------next---------------------