圣诞节你在哪里


圣诞节
你在哪里
你是谁
我们相识吗

防多实例运行(转载)


一个程序只运行一个实例(或限制实例数量)通常可以采用如下方法:

1)FindWindow 之<窗口标题>
通过查找窗口标题来确定上一实例是否正在运行,不适合窗口标题动态变化的程序。

2)FindWindow 之<任务栏按纽标题>
通过查找任务栏按纽标题来确定上一实例是否正在运行,不适合按纽标题动态变化的程序(如Winamp)。通常情况下,该方法还是优先考虑,因为按纽标题是一般是固定的。

3)Window Property
将某个数据(可以是字符串或句柄)通过SetProp加入到指定窗口的property list,程序运行时枚举窗口并检查该数据是否存在来确定上一实例是否正在运行。

4)全局Atom
将某个特定字符串通过GlobalAddAtom加入全局原子表(Global Atom Table),程序运行时检查该串是否存在来确定上一实例是否正在运行。该方法有个局限,就是程序终止前必须显式调用GlobalDeleteAtom来释放atom,否则该atom不会自动释放,如果程序运行时意外终结了,那么下一个实例就无法正常执行。早期版本的realplayer就存在这个现象,不知道是不是采用了该方法。

5)Mutex/Event/Semaphore
通过互斥对象/信号量/事件等线程同步对象来确定实例是否存在,在NT下要注意权限问题(SID)。

6)DLL全局共享区域
VC下的DLL工程可以通过下面代码来建立一个进程间共享数据段:
#pragma data_seg(".share")
//shared for all processes that attach to the dll
DWORD dllgs_dwRunCount = 1; //一定要在这里对变量进行初始化,否则工夫白做!
#pragma data_seg()
#pragma comment(linker,"/section:.share,rws")

导出3个函数,分别为:
DWORD IncRunCount(void); //运行计数器加1,返回计数器结果
DWORD DecRunCount(void); //运行计数器减1,返回计数器结果
DWORD GetRunCount(void); //取当前运行计数器

由于DLL全局共享段在映射到各个进程地址空间时仅会被初始化一次,并且是在首次被windows加载时,所以利用该共享段数据就能对程序实例进行可靠计数。

7)内存映射文件(File Mapping)
通过把程序实例信息(如窗口句柄、计数器等等)放置到跨进程的内存映射文件,同样可以控制程序实例运行的数量,道理与DLL全局共享区域类似。

中雨 11~14度

  

前几个月都没下一场雨,最近这么多天却天天在下雨。

几个月来温度在缓慢的下降,并不像往年这个时候,气温会在某一天突然下绛的很厉害。

这让我想起小的时候,早晨起床感觉特别冷,母亲在大木箱里翻找往年天气转温时脱下的衣服。

现在已经没有了小时候的四季分明,秋天已不再让人感到深刻。

回来我的爱

  不经一番寒彻骨,焉得梅花扑鼻香。 付出努力在前,顺其自然在后。

母亲伤心

  天气转冷了,母亲昨天买了两麻袋木炭,叫我搬到楼上去,一袋木炭将近50斤重,扛在肩上,差点掉下来,所以用力过猛,把背扭伤了。母亲很揪心,责怪自己不该要我把木炭搬到楼上去,还不停的问我疼不疼,我说没事不要紧。邻居送来跌打水,母亲赶紧为我涂上。一麻袋木炭把我扭伤了,可是我的伤却又伤了母亲的心。

忘记你我做不到

逃的了你对我的冷漠,却逃脱不了我对你的思念,忘记你我做不到,无论天涯海角。

我的心痛既是你的快乐


你的快乐让我心痛

谁伤的最深

  为什么受伤的总是女人,这句话是我最爱的女人对我说的,可是现在受伤最深的却是我,她现在除了对我说祝福的话,没有其它可说的。女人太现实,这不主要是钱的问题,女人考虑太多感情以外的东西,这也是很无奈的事,因为女人需要一个好的归宿,需要有安全感的将来。所以在感情上往往男人陷的最深,伤的最深。

最后的倾诉-汉武大帝片头曲

韩磊-最后的倾诉
《汉武大帝》主题曲
演唱:韩磊
在滔滔的长河中
你是一朵浪花
在绵绵的山脉里
你是一座奇峰
你把寂寞藏进乌云的缝隙
你把梦想写在蓝天草原
你燃烧自己
温暖大地
任自己成为灰烬
让一缕缕火焰
翩翩起舞
那就是你最后的倾诉
倾诉
在滔滔的长河中
你是一朵浪花
在绵绵的山脉里
你是一座奇峰
你把寂寞藏进乌云的缝隙
你把梦想写在蓝天草原
你燃烧自己
温暖大地
任自己成为灰烬
让一缕缕火焰
翩翩起舞
那就是你最后的倾诉
倾诉
你燃烧自己
温暖大地
任自己成为灰烬
让一缕缕火焰
翩翩起舞
那就是你最后的倾诉
倾诉

迭名诗




未曾清贫难成人,
不经打击老天真;
自古英雄出炼狱,
从来富贵入凡尘;
醉生梦死谁成器,
拓马长枪定乾坤;
挥军千里山河在,
立名扬威传后人!

这首诗是我在电视里听到的,不知道诗名也不知道作者是谁,这首诗是哪个时代的也不知道,在网上也没有找到答案。而且这首诗也不是原版,里面有些字可能错了。望赐教!

你的消息

最想听到的是你的消息
最怕听到的也是你的消息

思念


2008-01-22 下午 07:46

思念为什么不像牵你的手稍纵既逝

孤独


2008-01-22 下午 06:51
2007-05-15 下午 09:55


每当孤独的时候就会想起你

每当想你的时候就会感到孤独

如何给Tkinter窗口小部件的command属性的可执行对象传递参数



#coding:gbk
import Tkinter
w=Tkinter.Tk()
def add(a,b):
print a+b
b=Tkinter.Button(text=u'相加',command=add(1,2))
b.pack()
w.mainloop()

command属性只能接受可执行对象,比如:command=add ,如果函数需要参数的话,你不能想当然的是:command=add(1,2) ,这样程序运行就不会是你想像的那样。程序会在你按下“相加”按钮这前把a+b的结果打印出来,而在你按下按钮的时候却什么也没做,因为command=add才是将可执行对象“add”赋予了属性command,而command=add(1,2)是将函数调用add(1,2)的执行结果赋予了属性command,而函数add并没有反回值。但是应该怎样给command属性的可执行对象传递参数呢?很简单,程序修改如下:

#coding:gbk
import Tkinter
w=Tkinter.Tk()
def add(a,b):
print a+b
b=Tkinter.Button(text=u'相加',command=lambda:add(1,2))
b.pack()
w.mainloop()

表达式lambda:add(1,2)反回一个匿名函数-一个可执行对象,而这个可执行对象执行的内容就是我们想要的 add(1,2)。

在python中使用中文



#coding:gbk
a=u'中华人民共和國' #字符串前面一定要加上字母u,不然会显示成乱码。
#最后一个字是繁体,其它都是简体。
import Tkinter
w=Tkinter.Tk()
b=Tkinter.Button(text=a,command=w.destroy)
b.pack()
w.mainloop()

运行结果如下:

下面是我从python documentation 中找到的资料
Codec | Aliases | Languages

代码 别名 语言
gb2312 chinese, csiso58gb231280, euc-cn, Simplified Chinese(简体中文)
euccn, eucgb2312-cn, gb2312-1980,
gb2312-80, iso-ir-58
gbk 936, cp936, ms936 Unified Chinese(统一的中文)

如果把上面的 #coding:gbk 改成 #coding:gb2312 程序运行就会出错,因为字符串a的最后一个字符是繁体字,其它都是简体中文。我们还可以使用Aliases里面的别名,比如 #coding:936 或 #coding:chinese(只能使用简体中文)。

以上只是我经过试验得出的结论,如果有错误欢迎指正。

晴 多云

  下午QQ上有位朋友跟我说他的游戏帐号被盗了,开始我问他有没有设置密码保护,他说没有,还问我有没有办法,我说没我办法。后来他怀疑是我盗了他的帐号,他说的话很不礼貌,实在是无法跟他说清,也不想跟这种人多讲什么,就把他列入了黑名单。可能是因为他用了我的记牌器才这样怀疑的,怀疑我的程序有问题。辛辛苦苦为大家做了那么多的免费记牌器,得不到大家的理解,还要被人无理的怀疑,想想真有点心酸。

制作Email Icon


2008-01-22 下午 06:49
2007-05-15 下午 09:54




打开上面的链接并在如上图中输入你的QQ号,就可以制作一个你的QQ的Email icon。你还可以输入其它的邮箱地址,下面是我做的几个Email icon:

牵手

2004年6月9日晚,我第一次牵你的手,也是第一次牵女孩子的手。

也许是我不够勇敢,也许是我不够浪漫,不知道你为什么要离开我,请相信我是爱你的。 最爱你的人是我,否则我怎会如此难过,你能感觉到吗?玮。我不需要任何安慰,只要你能回到我的身边

分手的前一天梦到你

你面无表情的站在那,我走过去在你的嘴唇吻了一下,你冷冰冰的没有任何反应,然后慢慢转过身去,头也不回的走开了,越走越远,渐渐模糊,直到再也看不见你...

父母的生日

爸妈只知道自己的农历生日,却从来不知道自己公历是哪一天出生的。今天在网易电子邮箱里面的个人助理“公历农历”工具里查到了,爸是公历1943年7月10日星期六(农历6月初9)出生,妈是公历1949年12月21日星期三(农历11月初2)出生。

超好笑的笑话(转贴)



美女作家请一风流编辑审稿。编辑斜看着美女笑曰:上半部较丰满,有两点很突出,可惜下半部有些毛躁,并有一个漏洞,水份太大。美女着急的问: 那怎么办? 编辑答曰: 日后再说!


某男拿女医生所开处方转了半天回来问:“13超到底在哪?”女医生笑曰:“不是13超,是B超。”男大怒曰:“靠!你的B分得也太开了!


晚饭后领导视察“江阴 毛纺织厂”,来到大门口霓虹灯的厂名前,不巧电路故障,第一个“江”字未亮,领导只能看到后五个字,于是关切地问厂长:原材料好搞嘛?


幼儿园小芳老师指着黑板上m、a、y、d、b几个拼音考考小朋友, 小朋友们用最标准的发音说:“摸-阿-姨-的-波


一女地下工作者被捕, 被逼写信引首长上钩,女地下工作者逼于无奈只有写, 写完后偷偷从私处拨了几根B毛夹在信中。首长看完信后, 拿着B毛闻一闻,瞅一瞅,苦思冥想,沉思片刻突然恍然大悟: 原来是阴谋(毛)!

中国足球队兵败后,“强力持久丸”厂商找了国家队一名队员L“X”做了一个广告。情节是:L“X”左手抱着一个足球,右手指着屏幕说:“谁能90多分钟不射?我能!”


某保 险 套的厂家看了“强力持久丸“的广告后,深受启发,于是从国家队里找了一群队员也做了一个广告。画面是:所有队员对着球门狂轰烂炸,广告语:“不管射多少次,射不进去就是射不进去!”


生产避孕药的厂家看了以后也想搭乘顺风车,可自己的药怎么着也是给女人用的,这可怎么办呢?!但是也难不倒他们,经过三天三夜的冥思苦想,终于找到了个办法:让一个在中超吹黑哨的裁判身穿黑衣,哨子一吹,手势一打,傲气凛然的说:“不管射进去多少,统统的不算!”


一游泳教练性格直爽,而且嗓门大。一日,他在商场看到一个女学员,于是大声说:你穿上衣服后,还真认不出!


新婚之夜过后,次日一大早,新娘痛苦地从洞房走出,一手扶着墙壁,一手捂着下身,大骂:骗子!真是个骗子!结婚前说有三十年的积蓄,我还以为是钱呢!


某晚,一裸男叫了一辆出租车,女司机目不转睛盯着看他。裸男大怒,吼道:你他妈没见过裸男呀!女司机也大怒:我看你他妈从哪儿掏钱!


工作搞不好的根本原因不外乎三个:一是没关系,象寡妇睡觉,上面没人;二是不稳定,象妓 女睡觉,上面老换人;三是不团结,象和老婆睡觉,自已人老搞自已人。


某日,一帅哥在公车上掏零钱交车费时不小心带出了一个保 险 套,掉在地板上。他面红耳赤,不知该不该拣起来。这时,只听到后面的MM说道:大哥,你二弟的工作服掉了

希腊神话中金牛座的来历


  有一天,天神宙斯在人间游荡,经过某个国家时,突然看见这个国家的公主非常美丽,让宙斯不知不觉中看得出了神,回到天上之后,仍然对这位美丽的公主念念不忘。

  而在这个公主所属的国家中,有一座很大很漂亮的牧场,里面有多到数不清的牛群在吃草、嬉戏,公主时常会来到这个牧场与这群可爱的牛群一起玩耍。

  就在一个风和日丽的早上,公主又依往例的出现在牧场,当她正在与牛群玩得不亦乐乎时,突然发现在牛群之中,有一只特别会唱歌的牛,它的歌声非常悦耳动听,有如天籁一般,吸引着公主不自觉的朝他走去。

  公主一看到这只牛,马上无法自拔的就爱上了他。因为他不仅歌声完美,就连外表也一样好的没话说。正当公主慢慢靠在牛的身上与他一起忘情的唱歌时,这只牛突然背起了公主朝着天空飞去。

  经过了很久的飞行,这只牛终於在一个美丽的土地上停了下来,然后摇身一变成为人,向公主表达其爱慕之意。原来这只牛就是天神宙斯的化身,因为天神宙斯无法抑制服对公主的日夜思念,决定来向公主表白。

  美丽公主於是接受了宙斯的爱,两人一起回到天上生活。而宙斯为纪念那表白的地方,就以公主的名字欧罗芭做为那块土地的名字。那土地正是今天的欧州大陆。金牛座的神话故事,是十二个星座的碓一描绘爱情的故事,打破了一般人认为金牛座缺乏浪漫的错误印象。

用python下载邮件附件

import poplib
import cStringIO
import email
import email.Header
import base64,osos.chdir('d:\\python')
#POP3取信
M = poplib.POP3('xxx.xxx.xxx)
M.user('xxxxxx')
M.pass_('xxxxxx')#打印有多少封信
numMessages = len(M.list()[1])
print 'num of messages', numMessages
for i in range(numMessages):
m = M.retr(i+1)

buf = cStringIO.StringIO()
for j in m[1]:
print >>buf, j
buf.seek(0)#解析信件内容
msg = email.message_from_file(buf)
for part in msg.walk():
contenttype = part.get('Content-Disposition')
filename=email.Header.decode_header(part.get_filename())
if filename and contenttype and contenttype[0:10]== 'attachment':
filename=os.path.basename(filename[0][0])
print contenttype[0:10],filename
f = open(filename,'wb')
f.write(part.get_payload(decode=True))
f.close()
M.quit()
print 'exit'

Tkinter模块的一个内部类_setit



Internal class. It wraps the command in the widget OptionMenu.
一个内部类,它是将回调函数绑定到OptionMenu的一个选项上.

__init__(self, var, value, callback=None)

var是窗口小部件变量,value对应OptionMenu的一个选项,callback是当OptionMenu的一个选项被选中时执行的方法.callback可以不指定,不管怎样,当OptionMenu的选项被选中时相应的value的值会被放到var中.

上面是我看英文资料后的理解,不知道是否正确,请指教

Tkinter窗口的geometry方法



import Tkinter
root=Tkinter.Tk()
root.geometry("%dx%d+%d+%d" % (200,200,0,0))
root.mainloop()
#这样就建立了一个大小为200x200,左上角在(0,0)处的窗口,
#左上角是相对于父窗口.
#Tkinter.Toplevel也有方法geometry,其它的我就不大清楚了.

Tkinter Variable




trace(self, mode, callback)
trace_variable(self, mode, callback)

Define a trace callback for the variable.

MODE is one of "r", "w", "u" for read, write, undefine.
CALLBACK must be a function which is called when
the variable is read, written or undefined.

Return the name of the callback.

为Tkinter Variable定义一个回调函数,用法如下:

>>>import Tkinter
>>> def cc(*pa):
... print 'change'
...
>>> w=Tkinter.Tk()
>>> s=Tkinter.StringVar(w)
>>> s.trace_variable('w',cc)
'19779416cc'
>>> s.set('asfdasdf')
change

第一个参数可以是"r", "w"或"u",分别代表读、写、未定义。第二个参数是一个回调函数。上面的例子是,如果一个窗口变量s被写入,就调用回调函数cc。

C语言三维魔方游戏源代码


已投到电脑爱好者杂志2005第18期上。是用C语言加openGL写的,在Dev c++编译通过。
#include
#include
#include
#include
//小方块的结构,包括小方块在x,y,z上的旋转角度,颜色数组下标,小方块的三维坐标。
struct rcube{
int xr;
int yr;
int zr;
int cl[6];
GLfloat x;
GLfloat y;
GLfloat z;
};
struct rcube rc[3][3][3];
struct rcube *temp[3][3];
//颜色数组
GLfloat color[6][3]={{1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},
{1.0,1.0,0.0},{1.0,0.0,1.0},{0.0,1.0,1.0}};
int tempc[3][3][6];
//有关旋转的一些变量
GLfloat xRot = 10.0f;
GLfloat yRot = 10.0f;
int rotateType=0;
int rotateOK=0;
int rotateRate=50;
int rotate=0;
///////////////////////////////////////////////////////////////////////////////
//画小方块
void drawcube(int cl[6])
{
glBegin(GL_QUADS);
//右面
glColor3fv(color[cl[0]]);
glVertex3f(0.14f,-0.14f,-0.14f);
glVertex3f(0.14f,0.14f,-0.14f);
glVertex3f(0.14f,0.14f,0.14f);
glVertex3f(0.14f,-0.14f,0.14f);
//左面
glColor3fv(color[cl[1]]);
glVertex3f(-0.14f,-0.14f,0.14f);
glVertex3f(-0.14f,0.14f,0.14f);
glVertex3f(-0.14f,0.14f,-0.14f);
glVertex3f(-0.14f,-0.14f,-0.14f);
//前面
glColor3fv(color[cl[2]]);
glVertex3f(-0.14f,0.14f,0.14f);
glVertex3f(-0.14f,-0.14f,0.14f);
glVertex3f(0.14f,-0.14f,0.14f);
glVertex3f(0.14f,0.14f,0.14f);
//后面
glColor3fv(color[cl[3]]);
glVertex3f(-0.14f,0.14f,-0.14f);
glVertex3f(0.14f,0.14f,-0.14f);
glVertex3f(0.14f,-0.14f,-0.14f);
glVertex3f(-0.14f,-0.14f,-0.14f);
//上面
glColor3fv(color[cl[4]]);
glVertex3f(-0.14f,0.14f,-0.14f);
glVertex3f(-0.14f,0.14f,0.14f);
glVertex3f(0.14f,0.14f,0.14f);
glVertex3f(0.14f,0.14f,-0.14f);
//下面
glColor3fv(color[cl[5]]);
glVertex3f(-0.14f,-0.14f,-0.14f);
glVertex3f(0.14f,-0.14f,-0.14f);
glVertex3f(0.14f,-0.14f,0.14f);
glVertex3f(-0.14f,-0.14f,0.14f);
glEnd();
glFlush();
}
//窗口刷新时被调用。
void RenderScene(void)
{
int i,j,k;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
//魔方在这显示
glPushMatrix();
glRotatef(rc[i][j][k].xr, 1.0f, 0.0f, 0.0f);
glRotatef(rc[i][j][k].zr, 0.0f, 0.0f, 1.0f);
glRotatef(rc[i][j][k].yr, 0.0f, 1.0f, 0.0f);
glTranslatef(rc[i][j][k].x,rc[i][j][k].y,rc[i][j][k].z);
drawcube(rc[i][j][k].cl);
glPopMatrix();
}
}
}
glPopMatrix();
glutSwapBuffers();
}
//初始化。
void SetupRC()
{
GLfloat x,y,z;
int i,j,k,l;
for(i=0,x=-0.3f;i<3;i++,x+=0.3f)
{
for(j=0,y=-0.3f;j<3;j++,y+=0.3f)
{
for(k=0,z=-0.3f;k<3;k++,z+=0.3f)
{
rc[i][j][k].x=x;rc[i][j][k].xr=0;
rc[i][j][k].y=y;rc[i][j][k].yr=0;
rc[i][j][k].z=z;rc[i][j][k].zr=0;
for(l=0;l<6;l++)
{
rc[i][j][k].cl[l]=l;
}
}
}
}
glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
}
//选择转动的那一组小方块。
void elect(int type)
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
switch (type)
{
case 1:
temp[i][j]=&rc[0][i][j]; break;
case 2:
temp[i][j]=&rc[1][i][j]; break;
case 3:
temp[i][j]=&rc[2][i][j]; break;
case 4:
temp[i][j]=&rc[j][0][i]; break;
case 5:
temp[i][j]=&rc[j][1][i]; break;
case 6:
temp[i][j]=&rc[j][2][i]; break;
case 7:
temp[i][j]=&rc[i][j][0]; break;
case 8:
temp[i][j]=&rc[i][j][1]; break;
case 9:
temp[i][j]=&rc[i][j][2]; break;
}
}
}
}
//判断是否胜利。
int win(void)
{
int i,j,k,c,cl[6];
for(k=0;k<6;k++)
{
cl[k]=rc[0][0][0].cl[k];
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
for(c=0;c<6;c++)
{
if(rc[i][j][k].cl[c]!=cl[c])
return 0;
}
}
}
}
return 1;
}
//转动小方块,实际上是交换颜色。
void shift(void)
{
int i,j,k,c;
elect(rotateType);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
(*temp[i][j]).xr=0;
(*temp[i][j]).yr=0;
(*temp[i][j]).zr=0;
if(rotateType>0&&rotateType<=3)
{
c=(*temp[i][j]).cl[2];
(*temp[i][j]).cl[2]=(*temp[i][j]).cl[4];
(*temp[i][j]).cl[4]=(*temp[i][j]).cl[3];
(*temp[i][j]).cl[3]=(*temp[i][j]).cl[5];
(*temp[i][j]).cl[5]=c;
}
if(rotateType>3&&rotateType<=6)
{
c=(*temp[i][j]).cl[0];
(*temp[i][j]).cl[0]=(*temp[i][j]).cl[2];
(*temp[i][j]).cl[2]=(*temp[i][j]).cl[1];
(*temp[i][j]).cl[1]=(*temp[i][j]).cl[3];
(*temp[i][j]).cl[3]=c;
}
if(rotateType>6&&rotateType<=9)
{
c=(*temp[i][j]).cl[4];
(*temp[i][j]).cl[4]=(*temp[i][j]).cl[0];
(*temp[i][j]).cl[0]=(*temp[i][j]).cl[5];
(*temp[i][j]).cl[5]=(*temp[i][j]).cl[1];
(*temp[i][j]).cl[1]=c;
}
for(k=0;k<6;k++)
{
tempc[2-j][i][k]=(*temp[i][j]).cl[k];
}
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<6;k++)
{
(*temp[i][j]).cl[k]=tempc[i][j][k];
}
}
}
//如果完成将背景色设成黑色,否则设成灰色。
if(win()==1)
glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
else
glClearColor(0.5f, 0.5f, 0.5f, 1.0f );
}
//转动魔方,也就是改变小方块在x,y,z上的旋转角度。
void turn (void)
{
int j,k;
elect(rotateType);
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
if(rotateType>0&&rotateType<=3)
(*temp[j][k]).xr+=10;
if(rotateType>3&&rotateType<=6)
(*temp[j][k]).yr+=10;
if(rotateType>6&&rotateType<=9)
(*temp[j][k]).zr+=10;
}
}
}
//定时器回调函数,当魔方转动时产生动画。
void TimerFunc(int value)
{
rotate+=10;
turn();
glutPostRedisplay();
if(rotate==90)
{
shift();
rotate=0;
rotateOK=0;
rotateType=0;
return;
}
glutTimerFunc(rotateRate,TimerFunc,1);
}
//接收键盘输入。
void SpecialKeys(int key, int x, int y)
{
int temp=0;
switch (key)
{
case GLUT_KEY_F1:
temp=1; break;
case GLUT_KEY_F2:
temp=2; break;
case GLUT_KEY_F3:
temp=3; break;
case GLUT_KEY_F4:
temp=4; break;
case GLUT_KEY_F5:
temp=5; break;
case GLUT_KEY_F6:
temp=6; break;
case GLUT_KEY_F7:
temp=7; break;
case GLUT_KEY_F8:
temp=8; break;
case GLUT_KEY_F9:
temp=9; break;
case GLUT_KEY_UP:
xRot -= 5.0f; break;
case GLUT_KEY_DOWN:
xRot += 5.0f; break;
case GLUT_KEY_LEFT:
yRot -= 5.0f; break;
case GLUT_KEY_RIGHT:
yRot += 5.0f; break;
}
if ( rotateOK==0 && temp!=0)
{
rotateType=temp;
rotateOK=1;
glutTimerFunc(rotateRate,TimerFunc,1);
}
else temp=0;
if(xRot > 356.0f) xRot = 0.0f;
if(xRot < -1.0f) xRot = 355.0f;
if(yRot > 356.0f) yRot = 0.0f;
if(yRot < -1.0f) yRot = 355.0f;
glutPostRedisplay();
}
//当窗口改变尺寸时被调用。
void ChangeSize(int w, int h)
{
GLfloat nRange = 1.9f;
if(h == 0)
h = 1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange);
else
glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
//主函数。
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutReshapeFunc(ChangeSize);
glutSpecialFunc(SpecialKeys);
glutDisplayFunc(RenderScene);
SetupRC();
glutMainLoop();
return 0;
}

希望百度博客能保持简洁

  还是喜欢百度博客的简洁,就像百度的搜索一样。希望百度不要把博客搞的太复杂和花哨,保持一份简单和简洁,这样就能拥有一群独有的用户群,他们是不会离开百度的,因为他们爱百度的简洁。
  不过希望能在细节上做的更人性化和完善些,比如用户自己能设定文章的写作日期,这样如果有用户想把博客搬到百度来的话,用户以前写的文章或日记的日期就能保留,就不会因为博客搬家而使的所有的文章或日记的写作日期是同一天。我想这是很有用的一个功能。
  还有,希望不要在用户的博客上放太多不是用户需要的东西。