From:http://blog.csdn.net/coutcin/archive/2006/08/28/1133382.aspx http://blog.csdn.net/ilibaba/archive/2009/03/04/3955799.aspx