参考:
http://blog.csdn.net/yucan1001/article/details/7188267
http://blog.csdn.net/dbzhang800/article/details/7540905