<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/te6a" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/te6a" type="application/rss+xml"></fs:self_link><lastBuildDate>Wed, 14 Dec 2011 03:23:00 GMT</lastBuildDate><title>虫大</title><description>欢迎来到虫大分享</description><link>http://www.bugbig.net</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Wed, 14 Dec 2011 03:23:00 GMT</pubDate><item><title>Android Can’t create handler inside thread that has not called Looper.prepare()</title><link>http://www.bugbig.net/android-cant-create-handler-inside-thread-that-has-not-called-looper-prepare/</link><content:encoded>&lt;p&gt;当你在Android中使用子线程更新UI时很容易得到这个错误： Can&amp;#8217;t create handler inside thread that has not called Looper.prepare()&lt;br /&gt;
&lt;span id=&quot;more-242&quot;&gt;&lt;/span&gt;&lt;br /&gt;
这是英文Android的设计子线程不允许直接更新UI使用如下代码可以避开错误但是也是不很好：&lt;/p&gt;
&lt;pre&gt;Looper.prepare()；
todo()；
Looper.loop();&lt;/pre&gt;
&lt;p&gt;如果需要大量使用线程建议使用异步任务TaskThreak；&lt;/p&gt;
&lt;p&gt;也可以使用消息来更新UI界面如下在主线程内处理消息&lt;/p&gt;
&lt;pre&gt;
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch(msg.id)
//做你想做的事
}
};&lt;/pre&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/586942785/te6a/feedsky/s.gif?r=http://www.bugbig.net/android-cant-create-handler-inside-thread-that-has-not-called-looper-prepare/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.bugbig.net/android-cant-create-handler-inside-thread-that-has-not-called-looper-prepare/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>当你在Android中使用子线程更新UI时很容易得到这个错误： Can&amp;#8217;t create handler inside thread that has not called Looper.prepare() 这是英文Android的设计子线程不允许直接更新UI使用如下代码可以避开错误但是也是不很好： Looper.prepare()； todo()； Looper.loop(); 如果需要大量使用线程建议使用异步任务TaskThreak； 也可以使用消息来更新UI界面如下在主线程内处理消息 final Handler handler = new Handler() { public void handleMessage(Message msg) { switch(msg.id) //做你想做的事 } };&lt;img src=&quot;http://www1.feedsky.com/t1/586942785/te6a/feedsky/s.gif?r=http://www.bugbig.net/android-cant-create-handler-inside-thread-that-has-not-called-looper-prepare/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>error</category><category>Android</category><pubDate>Wed, 14 Dec 2011 11:23:00 +0800</pubDate><author>admin</author><comments>http://www.bugbig.net/android-cant-create-handler-inside-thread-that-has-not-called-looper-prepare/#comments</comments><guid isPermaLink="false">http://www.bugbig.net/?p=242</guid><dc:creator>admin</dc:creator><fs:srclink>http://www.bugbig.net/android-cant-create-handler-inside-thread-that-has-not-called-looper-prepare/</fs:srclink><fs:srcfeed>http://www.bugbig.net/feed/</fs:srcfeed><fs:itemid>feedsky/te6a/~8717488/586942785/6835310</fs:itemid></item><item><title>Android 4.0 访问WebService 出现 android.os.NetworkOnMainThreadException异常</title><link>http://www.bugbig.net/android-4-0-%e8%ae%bf%e9%97%aewebservice-%e5%87%ba%e7%8e%b0-android-os-networkonmainthreadexception%e5%bc%82%e5%b8%b8/</link><content:encoded>&lt;p&gt;在开发涉及WebService的Android程序是出现了个很烦恼的错误android.os.NetworkOnMainThreadException，找了很久才找到解决方案，可能在android 3.0以上&lt;span id=&quot;more-237&quot;&gt;&lt;/span&gt;的版本都有这个问题，貌似他们在3.0以上的版本网络上做了更加严格的限制，更多的查询API上的StrictMode 。。。。解决方法在访问前调用如下代码：&lt;/p&gt;
&lt;pre&gt;public void onCreate(){
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()   // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());

}&lt;/pre&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/586942786/te6a/feedsky/s.gif?r=http://www.bugbig.net/android-4-0-%e8%ae%bf%e9%97%aewebservice-%e5%87%ba%e7%8e%b0-android-os-networkonmainthreadexception%e5%bc%82%e5%b8%b8/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.bugbig.net/android-4-0-%e8%ae%bf%e9%97%aewebservice-%e5%87%ba%e7%8e%b0-android-os-networkonmainthreadexception%e5%bc%82%e5%b8%b8/feed/</wfw:commentRss><slash:comments>2</slash:comments><description>在开发涉及WebService的Android程序是出现了个很烦恼的错误android.os.NetworkOnMainThreadException，找了很久才找到解决方案，可能在android 3.0以上的版本都有这个问题，貌似他们在3.0以上的版本网络上做了更加严格的限制，更多的查询API上的StrictMode 。。。。解决方法在访问前调用如下代码： public void onCreate(){ StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork()   // or .detectAll() for all detectable problems .penaltyLog() .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .detectLeakedClosableObjects() .penaltyLog() .penaltyDeath() .build()); }&lt;img src=&quot;http://www1.feedsky.com/t1/586942786/te6a/feedsky/s.gif?r=http://www.bugbig.net/android-4-0-%e8%ae%bf%e9%97%aewebservice-%e5%87%ba%e7%8e%b0-android-os-networkonmainthreadexception%e5%bc%82%e5%b8%b8/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>error</category><category>Android</category><pubDate>Thu, 27 Oct 2011 21:43:50 +0800</pubDate><author>admin</author><comments>http://www.bugbig.net/android-4-0-%e8%ae%bf%e9%97%aewebservice-%e5%87%ba%e7%8e%b0-android-os-networkonmainthreadexception%e5%bc%82%e5%b8%b8/#comments</comments><guid isPermaLink="false">http://www.bugbig.net/?p=237</guid><dc:creator>admin</dc:creator><fs:srclink>http://www.bugbig.net/android-4-0-%e8%ae%bf%e9%97%aewebservice-%e5%87%ba%e7%8e%b0-android-os-networkonmainthreadexception%e5%bc%82%e5%b8%b8/</fs:srclink><fs:srcfeed>http://www.bugbig.net/feed/</fs:srcfeed><fs:itemid>feedsky/te6a/~8717488/586942786/6835310</fs:itemid></item><item><title>使用GDI+播放多页图像</title><link>http://www.bugbig.net/use-gdi-play-page-image/</link><content:encoded>&lt;p&gt;多页图像是指图像中包含有多个图形页。每页可以看作图像帧。这些图像帧通过连续的显示就形成了一副动画。比如GIF文件。&lt;/p&gt;
&lt;p&gt;GDI+的Image对象提供&lt;span id=&quot;more-229&quot;&gt;&lt;/span&gt;了直接的对GIF、TIF文件格式的支持。调用Image对象的成员函数GetFrameDimensionsCount可以得到Image对象的Dimension数。每个Dimension通过一个GUID标示。函数GetFrameDimensionsList可以返回所有Dimension的GUID值。第一个GUID值保存在函数参数pDimensionsIDs数组的索引0处。GetFrameCount可以得到每个Dimension里有多少个Frame。简单示例代码：
&lt;pre&gt;
Image* image = new Image(L&quot;Multiframe.gif&quot;);
UINT count = 0;
count = image-&amp;gt;GetFrameDimensionsCount();
GUID *pDimensionIDs=(GUID*)new GUID[count];
image-&amp;gt;GetFrameDimensionsList(pDimensionIDs, count);
WCHAR strGuid[39];
StringFromGUID2(pDimensionIDs[0], strGuid, 39);
UINT frameCount=image-&amp;gt;GetFrameCount(&amp;amp;pDimensionIDs[0]);

delete []pDimensionIDs;&lt;/pre&gt;
&lt;p&gt;并不是所有的GIF文件都是含有多帧的，所以我们在显示GIF的时候可以通过上面的代码根据frameCount的值判断这个GIF文件是否有多个帧。&lt;/p&gt;
&lt;p&gt;在确认有多个帧的图像以后，还要得到每帧图像显示的间隔时间。GDI+的Image对象提供了 GetPropertyItem获取图像的属性。GetPropertyItem函数需要用户传递数据返回缓冲区和大小。所以在使用前先用GetPropertyItemSize得到需要的缓冲区大小，分配空间后再取得属性数据。&lt;/p&gt;
&lt;pre&gt;
//PropertyTagFrameDelay是GDI+中预定义的一个GIG属性ID值，表示标签帧数据的延迟时间

int size = GetPropertySize(PropertyTagFrameDelay);
PropertyItem* pItem = NULL;
pItem = (PropertyItem*)malloc(size);
image-&amp;gt;GetPropertyItem(PropertyTagFrameDelay,size,pItem);&lt;/pre&gt;
&lt;p&gt;这样就把所有和PropertyTagFrameDelay属性相关的数据取到了pItem中。然后通过pItem访问结构中的value。每两帧图像之间的间隔时间是不一定相同的，所以还需要得到当前正显示的帧图像的索引值。最后调用Image对象的DrawImage函数把每帧图像画出来。简单代码如下：
&lt;pre&gt;
int     fcount=0;
//Guid的值在显示GIF为FrameDimensionTime，显示TIF时为FrameDimensionPage
GUID    Guid = FrameDimensionTime;
while(thue)
{
Graphics gh(hDC); //hDC是外部传入的画图DC
gh.DrawImage(image,0,0,image-&amp;gt;GetWidth(),image-&amp;gt;GetHeight());
//重新设置当前的活动数据帧
image-&amp;gt;SelectActiveFrame(&amp;amp;Guid,fcount++);
if(fcount == frameCount) //frameCount是上面GetFrameCount返回值
fcount= 0;     //如果到了最后一帧数据又重新开始
//计算此帧要延迟的时间
long lPause = ((long*)pItem-&amp;gt;value)[fcount]*10;
Sleep(lPause);         //这里简单使用了sleep
}&lt;/pre&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/586942787/te6a/feedsky/s.gif?r=http://www.bugbig.net/use-gdi-play-page-image/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.bugbig.net/use-gdi-play-page-image/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>多页图像是指图像中包含有多个图形页。每页可以看作图像帧。这些图像帧通过连续的显示就形成了一副动画。比如GIF文件。 GDI+的Image对象提供了直接的对GIF、TIF文件格式的支持。调用Image对象的成员函数GetFrameDimensionsCount可以得到Image对象的Dimension数。每个Dimension通过一个GUID标示。函数GetFrameDimensionsList可以返回所有Dimension的GUID值。第一个GUID值保存在函数参数pDimensionsIDs数组的索引0处。GetFrameCount可以得到每个Dimension里有多少个Frame。简单示例代码： Image* image = new Image(L&quot;Multiframe.gif&quot;); UINT count = 0; count = image-&amp;#62;GetFrameDimensionsCount(); GUID *pDimensionIDs=(GUID*)new GUID[count]; image-&amp;#62;GetFrameDimensionsList(pDimensionIDs, count); WCHAR strGuid[39]; StringFromGUID2(pDimensionIDs[0], strGuid, 39); UINT frameCount=image-&amp;#62;GetFrameCount(&amp;#38;pDimensionIDs[0]); delete []pDimensionIDs; 并不是所有的GIF文件都是含有多帧的，所以我们在显示GIF的时候可以通过上面的代码根据frameCount的值判断这个GIF文件是否有多个帧。 在确认有多个帧的图像以后，还要得到每帧图像显示的间隔时间。GDI+的Image对象提供了 GetPropertyItem获取图像的属性。GetPropertyItem函数需要用户传递数据返回缓冲区和大小。所以在使用前先用GetPropertyItemSize得到需要的缓冲区大小，分配空间后再取得属性数据。 //PropertyTagFrameDelay是GDI+中预定义的一个GIG属性ID值，表示标签帧数据的延迟时间 int size = GetPropertySize(PropertyTagFrameDelay); PropertyItem* pItem = NULL; pItem = (PropertyItem*)malloc(size); image-&amp;#62;GetPropertyItem(PropertyTagFrameDelay,size,pItem); 这样就把所有和PropertyTagFrameDelay属性相关的数据取到了pItem中。然后通过pItem访问结构中的value。每两帧图像之间的间隔时间是不一定相同的，所以还需要得到当前正显示的帧图像的索引值。最后调用Image对象的DrawImage函数把每帧图像画出来。简单代码如下： int fcount=0; //Guid的值在显示GIF为FrameDimensionTime，显示TIF时为FrameDimensionPage GUID Guid = FrameDimensionTime; while(thue) { Graphics [...]&lt;img src=&quot;http://www1.feedsky.com/t1/586942787/te6a/feedsky/s.gif?r=http://www.bugbig.net/use-gdi-play-page-image/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>VC</category><category>c++</category><pubDate>Mon, 19 Sep 2011 18:30:14 +0800</pubDate><author>admin</author><comments>http://www.bugbig.net/use-gdi-play-page-image/#comments</comments><guid isPermaLink="false">http://www.bugbig.net/?p=229</guid><dc:creator>admin</dc:creator><fs:srclink>http://www.bugbig.net/use-gdi-play-page-image/</fs:srclink><fs:srcfeed>http://www.bugbig.net/feed/</fs:srcfeed><fs:itemid>feedsky/te6a/~8717488/586942787/6835310</fs:itemid></item><item><title>VS 发布程序的配置</title><link>http://www.bugbig.net/vs-release-procedure-configuration/</link><content:encoded>&lt;p&gt;VS 编译完发布版本程序之后发现个头都比较大,而且有些程序移植性还不怎么好!下面介绍下VS程序的发布配置,希望对新手有点帮助!&lt;/p&gt;
&lt;p&gt;alt+F7-&amp;gt;配置属性-&amp;gt;C/C++-&amp;gt;Code Gener&lt;span id=&quot;more-224&quot;&gt;&lt;/span&gt;ation-&amp;gt;Runtime Library 属性一般在发布的时候要进行静态发布，因为目前的操作系统正在换代，平台比较多，所以debug：Multi-threaded Debug(MTd)、release：Multi-threaded(MT),当然如果工程里边需要依赖很多的dll，每个dll又不一定是静态发布，尤其是MFC extension DLL,必须为动态发布这时工程里肯定要包含MFC的运行库，所以这好似所有的工程就可以采用动态运行库的方法，debug：Multi-threaded Debug DLL(MDd)、release：Multi-threaded DLL(MD)，这时可以采用共享MFC库的方式即alt+F7-&amp;gt;配置属性-&amp;gt;General-&amp;gt;Project Defaults-&amp;gt;Use of MFC-&amp;gt;use mfc in a shared dll&lt;br /&gt;
vs2005&lt;br /&gt;
Debug 发行版 所依赖的库为：mfc80d.dll、Microsoft.VC80.DebugMFC.manifest、Microsoft.VC80.DebugMFC.manifest、msvcm80d.dll、msvcp80d.dll、msvcr80d.dll&lt;br /&gt;
Release 发布版  所依赖的库为：mfc80.dll、Microsoft.VC80.MFC.manifest、Microsoft.VC80.MFC.manifest、msvcm80.dll、msvcp80.dll、msvcr80.dll&lt;/p&gt;
&lt;p&gt;vs2008&lt;br /&gt;
Debug 发行版 所依赖的库为：mfc90d.dll、Microsoft.VC90.DebugMFC.manifest、Microsoft.VC90.DebugMFC.manifest、msvcm90d.dll、msvcp90d.dll、msvcr90d.dll&lt;br /&gt;
Release 发布版  所依赖的库为：mfc90.dll、Microsoft.VC90.MFC.manifest、Microsoft.VC90.MFC.manifest、msvcm90.dll、msvcp90.dll、msvcr90.dll&lt;/p&gt;
&lt;p&gt;但皇天不负有心人啊!! 最近终于被我找到了解决方法了&lt;/p&gt;
&lt;p&gt;其实只用改一下项目的属性就行了&lt;/p&gt;
&lt;p&gt;方法如下:&lt;/p&gt;
&lt;p&gt;新建一个项目之后 按顺序点击菜单栏上面的&lt;/p&gt;
&lt;p&gt;项目 &amp;gt;&amp;gt; XXX(项目名) 属性 &amp;gt;&amp;gt; 配置属性 &amp;gt;&amp;gt; 常规 &amp;gt;&amp;gt; MFC的使用 &amp;gt;&amp;gt; 在静态库中使用 MFC&lt;/p&gt;
&lt;p&gt;配置属性 &amp;gt;&amp;gt; C\C++ &amp;gt;&amp;gt; 代码生成 &amp;gt;&amp;gt; 多线程调试(/MTd)&lt;/p&gt;
&lt;p&gt;英文版的是&lt;/p&gt;
&lt;p&gt;Project &amp;gt;&amp;gt; XXX Property&amp;gt;&amp;gt; Configuration Properties &amp;gt;&amp;gt; General &amp;gt;&amp;gt; Use of MFC &amp;gt;&amp;gt; Use Mfc Static&lt;br /&gt;
Configuration Properties &amp;gt;&amp;gt; C\C++ &amp;gt;&amp;gt; Code Generation &amp;gt;&amp;gt; Multithreaded, static link (debug) /MTD&lt;/p&gt;
&lt;p&gt;然后调试或生成就可以编译出可以再其他没有安装VS2008的电脑上的程序了&lt;/p&gt;
&lt;p&gt;而且你会发现.exe文件大了很多&lt;/p&gt;
&lt;p&gt;像我原来的汉诺塔游戏只有45.5KB 改了项目属性之后就有450KB!!&lt;/p&gt;
&lt;p&gt;而需要做如此更改的原因是因为运行时库的dll在各种不同版本的操作系统下可能不一样&lt;/p&gt;
&lt;p&gt;这是高手说的 我现在还不懂 呵呵&lt;/p&gt;
&lt;p&gt;不过更改后有可能会发生另一个编译错误 其显示的错误信息是&lt;/p&gt;
&lt;p&gt;general error c101008a: Failed to save the updated manifest to the file &amp;#8220;.\Debug\\2_bpW.exe.embed.manifest&amp;#8221;. Bpcn2&lt;br /&gt;
出现这个错误不用担心 很容易就解决&lt;/p&gt;
&lt;p&gt;主要是因为你在更改之前调试过该程序&lt;/p&gt;
&lt;p&gt;点击菜单栏上的 : 生成 &amp;gt;&amp;gt; 清理 XXX(项目名)&lt;/p&gt;
&lt;p&gt;英文版为 : Compile&amp;gt;&amp;gt; Clean XXX&lt;/p&gt;
&lt;p&gt;再重新生成.exe文件就OK了&lt;/p&gt;
&lt;p&gt;呵呵 我也是查了很久才查到这些办法的&lt;/p&gt;
&lt;p&gt;也希望我这些努力对大家有所帮助啦&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/586942788/te6a/feedsky/s.gif?r=http://www.bugbig.net/vs-release-procedure-configuration/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.bugbig.net/vs-release-procedure-configuration/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>VS 编译完发布版本程序之后发现个头都比较大,而且有些程序移植性还不怎么好!下面介绍下VS程序的发布配置,希望对新手有点帮助! alt+F7-&amp;#62;配置属性-&amp;#62;C/C++-&amp;#62;Code Generation-&amp;#62;Runtime Library 属性一般在发布的时候要进行静态发布，因为目前的操作系统正在换代，平台比较多，所以debug：Multi-threaded Debug(MTd)、release：Multi-threaded(MT),当然如果工程里边需要依赖很多的dll，每个dll又不一定是静态发布，尤其是MFC extension DLL,必须为动态发布这时工程里肯定要包含MFC的运行库，所以这好似所有的工程就可以采用动态运行库的方法，debug：Multi-threaded Debug DLL(MDd)、release：Multi-threaded DLL(MD)，这时可以采用共享MFC库的方式即alt+F7-&amp;#62;配置属性-&amp;#62;General-&amp;#62;Project Defaults-&amp;#62;Use of MFC-&amp;#62;use mfc in a shared dll vs2005 Debug 发行版 所依赖的库为：mfc80d.dll、Microsoft.VC80.DebugMFC.manifest、Microsoft.VC80.DebugMFC.manifest、msvcm80d.dll、msvcp80d.dll、msvcr80d.dll Release 发布版 所依赖的库为：mfc80.dll、Microsoft.VC80.MFC.manifest、Microsoft.VC80.MFC.manifest、msvcm80.dll、msvcp80.dll、msvcr80.dll vs2008 Debug 发行版 所依赖的库为：mfc90d.dll、Microsoft.VC90.DebugMFC.manifest、Microsoft.VC90.DebugMFC.manifest、msvcm90d.dll、msvcp90d.dll、msvcr90d.dll Release 发布版 所依赖的库为：mfc90.dll、Microsoft.VC90.MFC.manifest、Microsoft.VC90.MFC.manifest、msvcm90.dll、msvcp90.dll、msvcr90.dll 但皇天不负有心人啊!! 最近终于被我找到了解决方法了 其实只用改一下项目的属性就行了 方法如下: 新建一个项目之后 按顺序点击菜单栏上面的 项目 &amp;#62;&amp;#62; XXX(项目名) 属性 &amp;#62;&amp;#62; 配置属性 &amp;#62;&amp;#62; 常规 &amp;#62;&amp;#62; MFC的使用 &amp;#62;&amp;#62; 在静态库中使用 MFC 配置属性 &amp;#62;&amp;#62; [...]&lt;img src=&quot;http://www1.feedsky.com/t1/586942788/te6a/feedsky/s.gif?r=http://www.bugbig.net/vs-release-procedure-configuration/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>VC</category><category>开发工具</category><category>c++</category><pubDate>Thu, 15 Sep 2011 21:17:39 +0800</pubDate><author>admin</author><comments>http://www.bugbig.net/vs-release-procedure-configuration/#comments</comments><guid isPermaLink="false">http://www.bugbig.net/?p=224</guid><dc:creator>admin</dc:creator><fs:srclink>http://www.bugbig.net/vs-release-procedure-configuration/</fs:srclink><fs:srcfeed>http://www.bugbig.net/feed/</fs:srcfeed><fs:itemid>feedsky/te6a/~8717488/586942788/6835310</fs:itemid></item><item><title>VC使用自定义资源动态释放加载DLL文件</title><link>http://www.bugbig.net/vc-use-custom-resources-dynamic-load-dlls-release/</link><content:encoded>&lt;p&gt;在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外，它还支持自定义资源类型（Custom Resource），我们自定义的资源类型能做些什么呢？用处多多。&lt;span id=&quot;more-219&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;添加DLL文件,添加资源时选择自定义，IDE会为你生成一个新的二进制资源，然后你就可以将你已经存在的二进制文件作为自定义的资源类型导入到项目中来了。&lt;/p&gt;
&lt;p&gt;要使用自定义资源，我们可能要用到的几个API函数有FindResource、LoadResource和LockResource等，这里每一个函数的返回值分别作为下一个函数的参数，我来简要介绍一下。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;FindResource用来在一个指定的模块中定位所指定的资源：
&lt;pre&gt;HRSRC FindResource(
HMODULE hModule,		//包含所需资源的模块句柄，如果是程序本身，可以置为NULL
LPCTSTR lpName,		//可以是资源名称或资源ID
LPCTSTR lpType		//资源类型，在这里也就是我们自己指定的资源类型
);&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;LoadResource用来将所指定的资源加载到内存当中；
&lt;pre&gt;HGLOBAL LoadResource(
HMODULE hModule,		//模块句柄，同上
HRSRC hResInfo		//需要加载的资源句柄，这里也就是FindResource的返回值
);&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;LockResource用来锁定内存中的资源数据块，它的返回值也就是我们要使用的直系指向资源数据的内存指针；
&lt;pre&gt;LPVOID LockResource(
HGLOBAL hResData		//指向内存中要锁定的资源数据块，这里也就是LoadResource的返回值
);&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;另外我们还需要用SizeofResource来确定资源的尺寸，我们在操作资源时要用到它。&lt;/p&gt;
&lt;p&gt;下面是代码细节:&lt;/p&gt;
&lt;pre&gt;//定位我们的自定义资源，这里因为我们是从本模块定位资源，所以将句柄简单地置为NULL即可
	HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(ITEMID), TEXT(&quot;MyType&quot;));
	if (NULL == hRsrc)
		return FALSE;
	//获取资源的大小
	DWORD dwSize = SizeofResource(NULL, hRsrc);
	if (0 == dwSize)
		return FALSE;
	//加载资源
	HGLOBAL hGlobal = LoadResource(NULL, hRsrc);
	if (NULL == hGlobal)
		return FALSE;
	//锁定资源
	LPVOID pBuffer = LockResource(hGlobal);
	if (NULL == pBuffer)
		return FALSE;

	//我们用刚才得到的pBuffer和dwSize来做一些需要的事情。可以直接在内存中使
	//用，也可以写入到硬盘文件。这里我们简单的写入到硬盘文件，如果我们的自定
	//义资源是作为嵌入DLL来应用，情况可能要复杂一些。
	BOOL bRt = FALSE;
	FILE* fp = _tfopen(_T(&quot;demo.dll&quot;), _T(&quot;wb&quot;));
	if (fp != NULL)
	{
		if (dwSize == fwrite(pBuffer, sizeof(char), dwSize, fp))
			bRt = TRUE;
		fclose(fp);
	}
        //加载DLL文件
        HMODULE hDLL=LoadLibrary(_T(&quot;demo.dll&quot;));
        if(hDLL==NULL)
        {
                //加载DLL文件失败
                return FALSE;
         }

	//FreeResource(hGlobal);&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/586942789/te6a/feedsky/s.gif?r=http://www.bugbig.net/vc-use-custom-resources-dynamic-load-dlls-release/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.bugbig.net/vc-use-custom-resources-dynamic-load-dlls-release/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外，它还支持自定义资源类型（Custom Resource），我们自定义的资源类型能做些什么呢？用处多多。 添加DLL文件,添加资源时选择自定义，IDE会为你生成一个新的二进制资源，然后你就可以将你已经存在的二进制文件作为自定义的资源类型导入到项目中来了。 要使用自定义资源，我们可能要用到的几个API函数有FindResource、LoadResource和LockResource等，这里每一个函数的返回值分别作为下一个函数的参数，我来简要介绍一下。 FindResource用来在一个指定的模块中定位所指定的资源： HRSRC FindResource( HMODULE hModule, //包含所需资源的模块句柄，如果是程序本身，可以置为NULL LPCTSTR lpName, //可以是资源名称或资源ID LPCTSTR lpType //资源类型，在这里也就是我们自己指定的资源类型 ); LoadResource用来将所指定的资源加载到内存当中； HGLOBAL LoadResource( HMODULE hModule, //模块句柄，同上 HRSRC hResInfo //需要加载的资源句柄，这里也就是FindResource的返回值 ); LockResource用来锁定内存中的资源数据块，它的返回值也就是我们要使用的直系指向资源数据的内存指针； LPVOID LockResource( HGLOBAL hResData //指向内存中要锁定的资源数据块，这里也就是LoadResource的返回值 ); 另外我们还需要用SizeofResource来确定资源的尺寸，我们在操作资源时要用到它。 下面是代码细节: //定位我们的自定义资源，这里因为我们是从本模块定位资源，所以将句柄简单地置为NULL即可 HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(ITEMID), TEXT(&quot;MyType&quot;)); if (NULL == hRsrc) return FALSE; //获取资源的大小 DWORD dwSize = SizeofResource(NULL, hRsrc); [...]&lt;img src=&quot;http://www1.feedsky.com/t1/586942789/te6a/feedsky/s.gif?r=http://www.bugbig.net/vc-use-custom-resources-dynamic-load-dlls-release/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>VC</category><category>c++</category><pubDate>Fri, 02 Sep 2011 11:30:52 +0800</pubDate><author>admin</author><comments>http://www.bugbig.net/vc-use-custom-resources-dynamic-load-dlls-release/#comments</comments><guid isPermaLink="false">http://www.bugbig.net/?p=219</guid><dc:creator>admin</dc:creator><fs:srclink>http://www.bugbig.net/vc-use-custom-resources-dynamic-load-dlls-release/</fs:srclink><fs:srcfeed>http://www.bugbig.net/feed/</fs:srcfeed><fs:itemid>feedsky/te6a/~8717488/586942789/6835310</fs:itemid></item><item><title>如何使用Socket发送HTTP1.0 GET POST请求包</title><link>http://www.bugbig.net/how-to-use-socket-send-http1-0-get-post-request-packet/</link><content:encoded>&lt;p&gt;HTTP报文是面向文本的，报文中的每一个字段都是一些ASCII码串，各个字段的长度是不确定的。HTTP有两类报文：请求报文和响应报文。&lt;span id=&quot;more-208&quot;&gt;&lt;/span&gt;&lt;br /&gt;
请求报文&lt;br /&gt;
一个HTTP请求报文由请求行（request line）、请求头部（header）、空行和请求数据4个部分组成，下图给出了请求报文的一般格式。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bugbig.net/wp-content/uploads/2011/08/clip_image002.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-209&quot; title=&quot;clip_image002&quot; src=&quot;http://www.bugbig.net/wp-content/uploads/2011/08/clip_image002-300x106.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;106&quot; /&gt;&lt;/a&gt;&lt;strong&gt;（1）请求行&lt;/strong&gt;&lt;br /&gt;
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成，它们用空格分隔。例如，GET /index.html HTTP/1.1。&lt;br /&gt;
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。这里介绍最常用的GET方法和POST方法。&lt;br /&gt;
GET：当客户端要从服务器中读取文档时，使用GET方法。GET方法要求服务器将URL定位的资源放在响应报文的数据部分，回送给客户端。使用GET方法时，请求参数和对应的值附加在URL后面，利用一个问号（“?”）代表URL的结尾与请求参数的开始，传递参数长度受限制。例如，/index.jsp?id=100&amp;amp;op=bind。&lt;br /&gt;
POST：当客户端给服务器提供信息较多时可以使用POST方法。POST方法将请求参数封装在HTTP请求数据中，以名称/值的形式出现，可以传输大量数据，可用来传送文件。&lt;br /&gt;
&lt;strong&gt;（2）请求头部&lt;/strong&gt;&lt;br /&gt;
请求头部由关键字/值对组成，每行一对，关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息，典型的请求头有：&lt;br /&gt;
User-Agent：产生请求的浏览器类型。&lt;br /&gt;
Accept：客户端可识别的内容类型列表。&lt;br /&gt;
Host：请求的主机名，允许多个域名同处一个IP地址，即虚拟主机。&lt;br /&gt;
&lt;strong&gt;（3）空行&lt;/strong&gt;&lt;br /&gt;
最后一个请求头之后是一个空行，发送回车符和换行符，通知服务器以下不再有请求头。&lt;br /&gt;
对于一个完整的http请求来说空行是必须的，否则服务器会认为本次请求的数据尚未完全发送到服务器，处于等待状态。&lt;br /&gt;
&lt;strong&gt;（4）请求数据&lt;/strong&gt;&lt;br /&gt;
请求数据不在GET方法中使用，而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(5)请求示例&lt;/strong&gt;&lt;br /&gt;
POST：&lt;br /&gt;
POST报文头如下：&lt;/p&gt;
&lt;pre&gt;POST /serch.php HTTP/1.0
Accept-Language: zh-cn
host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 12
sn=123&amp;amp;n=asa&lt;/pre&gt;
&lt;p&gt;在http头后边有一空行，空行后边接着发送post数据，长度通过Content-Length: 12&lt;br /&gt;
指出，此post数据中包含两项&lt;br /&gt;
sn=123&lt;br /&gt;
n=asa&lt;br /&gt;
其中：Content-Type: application/x-www-form-urlencoded 指定POST数据的编码类型&lt;br /&gt;
Content-Length: 12 POST数据的长度&lt;br /&gt;
GET：&lt;br /&gt;
GET报问头如下：&lt;/p&gt;
&lt;pre&gt;GET /index.php?sn=123&amp;amp;n=asa HTTP/1.0
Accept-Language: zh-cn
host: localhost&lt;/pre&gt;
&lt;p&gt;这是最简单的GET请求.&lt;/p&gt;
&lt;p&gt;示例请求报头代码:&lt;/p&gt;
&lt;p&gt;POST:&lt;/p&gt;
&lt;pre&gt;
&quot;POST /url.php HTTP/1.0\r\nHost:localhost\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 15\r\n\r\n123=456&amp;amp;789=abc&quot;&lt;/pre&gt;
&lt;p&gt;GET:&lt;/p&gt;
&lt;pre&gt;
&quot;GET /url.php HTTP/1.0\r\nHost:localhost\r\n\r\n&quot;&lt;/pre&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/586942790/te6a/feedsky/s.gif?r=http://www.bugbig.net/how-to-use-socket-send-http1-0-get-post-request-packet/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.bugbig.net/how-to-use-socket-send-http1-0-get-post-request-packet/feed/</wfw:commentRss><slash:comments>2</slash:comments><description>HTTP报文是面向文本的，报文中的每一个字段都是一些ASCII码串，各个字段的长度是不确定的。HTTP有两类报文：请求报文和响应报文。 请求报文 一个HTTP请求报文由请求行（request line）、请求头部（header）、空行和请求数据4个部分组成，下图给出了请求报文的一般格式。 （1）请求行 请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成，它们用空格分隔。例如，GET /index.html HTTP/1.1。 HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。这里介绍最常用的GET方法和POST方法。 GET：当客户端要从服务器中读取文档时，使用GET方法。GET方法要求服务器将URL定位的资源放在响应报文的数据部分，回送给客户端。使用GET方法时，请求参数和对应的值附加在URL后面，利用一个问号（“?”）代表URL的结尾与请求参数的开始，传递参数长度受限制。例如，/index.jsp?id=100&amp;#38;op=bind。 POST：当客户端给服务器提供信息较多时可以使用POST方法。POST方法将请求参数封装在HTTP请求数据中，以名称/值的形式出现，可以传输大量数据，可用来传送文件。 （2）请求头部 请求头部由关键字/值对组成，每行一对，关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息，典型的请求头有： User-Agent：产生请求的浏览器类型。 Accept：客户端可识别的内容类型列表。 Host：请求的主机名，允许多个域名同处一个IP地址，即虚拟主机。 （3）空行 最后一个请求头之后是一个空行，发送回车符和换行符，通知服务器以下不再有请求头。 对于一个完整的http请求来说空行是必须的，否则服务器会认为本次请求的数据尚未完全发送到服务器，处于等待状态。 （4）请求数据 请求数据不在GET方法中使用，而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。 (5)请求示例 POST： POST报文头如下： POST /serch.php HTTP/1.0 Accept-Language: zh-cn host: localhost Content-Type: application/x-www-form-urlencoded Content-Length: 12 sn=123&amp;#38;n=asa 在http头后边有一空行，空行后边接着发送post数据，长度通过Content-Length: 12 指出，此post数据中包含两项 sn=123 n=asa 其中：Content-Type: application/x-www-form-urlencoded 指定POST数据的编码类型 Content-Length: 12 POST数据的长度 GET： GET报问头如下： GET /index.php?sn=123&amp;#38;n=asa HTTP/1.0 Accept-Language: zh-cn host: [...]&lt;img src=&quot;http://www1.feedsky.com/t1/586942790/te6a/feedsky/s.gif?r=http://www.bugbig.net/how-to-use-socket-send-http1-0-get-post-request-packet/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>Socket</category><category>网络通信</category><category>c++</category><pubDate>Sun, 21 Aug 2011 21:10:47 +0800</pubDate><author>admin</author><comments>http://www.bugbig.net/how-to-use-socket-send-http1-0-get-post-request-packet/#comments</comments><guid isPermaLink="false">http://www.bugbig.net/?p=208</guid><dc:creator>admin</dc:creator><fs:srclink>http://www.bugbig.net/how-to-use-socket-send-http1-0-get-post-request-packet/</fs:srclink><fs:srcfeed>http://www.bugbig.net/feed/</fs:srcfeed><fs:itemid>feedsky/te6a/~8717488/586942790/6835310</fs:itemid></item><item><title>JQuery 选择器</title><link>http://www.bugbig.net/jquery-select/</link><content:encoded>&lt;p&gt;在学习JQuery的开始了解它神秘般的$选择器是必不可少的,JQuery的选择器使用方便功能强大是必不可少的语法,下面介绍下它的使用方法!&lt;br /&gt;
&lt;span id=&quot;more-195&quot;&gt;&lt;/span&gt;&lt;br /&gt;
JQuery的选择器主要是方便DOM元素的选择修改等,使页面元素变得更加容易,更加灵活,从而大大减轻了开发人员的压力.可见,jQuery选择器的重要性,当然想一下子掌握所有选择器也是很困难的,这个得靠实践和积累.&lt;/p&gt;
&lt;p&gt;将JQuery选择器分类是很有利于学习与记忆的!下面把它分为以下几类:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1:基本选择器&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;1, #ID                根据元素ID选择&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;2, elementname 根据元素名称选择&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;3, .classname     根据元素CSS类名选择&lt;/p&gt;
&lt;p&gt;例:&lt;/p&gt;
&lt;pre&gt;$(&quot;#id&quot;)     //选择ID为id的元素
$(&quot;div&quot;)      //选择页面上所有的div元素
$(&quot;.class&quot;)  //选择页面上所有CSS类名为class的元素&lt;/pre&gt;
&lt;p&gt;以上三种为最常见的选择器,其中ID选择器是效率最高的,在可能的情况下应该尽量使用它.&lt;/p&gt;
&lt;p&gt;还可以组合起来用例如：$(&amp;#8220;#id div&amp;#8221;) 选择ID为id下的所有div元素.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2:层次选择器&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;1, ancestor descendant    祖先和子孙选择器&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;2, parent&amp;gt;child           父子节点选择器&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;3, prev+next                同级别选择器&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;4, prev~siblings         过滤选择器&lt;/p&gt;
&lt;p&gt;例:&lt;/p&gt;
&lt;pre&gt;&amp;lt;div id=&quot;test&quot;&amp;gt;
   &amp;lt;a&amp;gt;1&amp;lt;/a&amp;gt;
   &amp;lt;a&amp;gt;2&amp;lt;/a&amp;gt;
   &amp;lt;a id=&quot;the&quot;&amp;gt;3&amp;lt;/a&amp;gt;
   &amp;lt;a&amp;gt;4&amp;lt;/a&amp;gt;
   &amp;lt;a&amp;gt;5&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;

$(&quot;#test a&quot;)                       //选中的结果为12345
$(&quot;#test&amp;gt;a&quot;)                      //选中的结果为1
$(&quot;#the+a&quot;)                       //选中的结果为4
$(&quot;#the~a&quot;)                       //结果为45&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;3:基本过滤选择器&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;1, :first                            找到第一元素&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;2, :last                            找到最后一个元素&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;3, :not(selector)              去除与给定选择器匹配的元素&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;4, :even                           匹配索引值为偶数的元素 从0开始计数&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;5, :odd                             匹配索引值为奇数的元素 从0开始计数&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;6, :eq(index)                    匹配一个给定索引值元素 从0开始&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;7, :gt(index)                     匹配大于给定索引值元素 从0开始&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;8, :lt(index)                      匹配小于给定索引值元素 从0开始&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;9, :header                        选择h1,h2,h3一类的标签 (目前没用过)&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;10,:animated                    匹配正执行动画效果的元素 (目前没用过)&lt;/p&gt;
&lt;p&gt;例:&lt;/p&gt;
&lt;pre&gt;&amp;lt;ul&amp;gt;
   &amp;lt;li&amp;gt;1&amp;lt;/li&amp;gt;
   &amp;lt;li class=&quot;cls&quot;&amp;gt;2&amp;lt;/li&amp;gt;
   &amp;lt;li&amp;gt;3&amp;lt;/li&amp;gt;
   &amp;lt;li&amp;gt;4&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;

$(&quot;li:first&quot;)                       //结果为1
$(&quot;li:last&quot;)                        //结果为4
$(&quot;li:not(.cls)&quot;)                  //结果为134
$(&quot;li:even&quot;)                       //结果为13
$(&quot;li:odd&quot;)                        //结果为24
$(&quot;li:ep(1)&quot;)                      //结果为2
$(&quot;li:gt(2)&quot;)                        //结果为4
$(&quot;li:lt(2)&quot;)                        //结果为12&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;4:内容过滤器&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;1, :contains(text)              匹配包含给定文本的元素&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;2, :empty                       　匹配所有不包含子元素或者文本的空元素&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;3, :has(selector)              匹配含有选择器所匹配的元素&lt;/p&gt;
&lt;p&gt;例:&lt;/p&gt;
&lt;pre&gt;&amp;lt;ul&amp;gt;
   &amp;lt;li&amp;gt;a123&amp;lt;/li&amp;gt;
   &amp;lt;li&amp;gt;b456&amp;lt;/li&amp;gt;
   &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;
   &amp;lt;li&amp;gt;c789&amp;lt;/li&amp;gt;
   &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;abc&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
$(&quot;li:contains('a')&quot;)                  //结果为a123 abc
$(&quot;li:empty+li&quot;)                       //结果为c789
$(&quot;li:has(p)&quot;)                          //结果为abc&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;5:可见性过滤器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1, :hidden    匹配不可见元素&lt;/p&gt;
&lt;p&gt;2, :visible     匹配可见元素&lt;/p&gt;
&lt;p&gt;例:&lt;/p&gt;
&lt;pre&gt;&amp;lt;ul&amp;gt;
   &amp;lt;li&amp;gt;可见&amp;lt;/li&amp;gt;
   &amp;lt;li style=&quot;display:none;&quot;&amp;gt;不可见&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;

$(&quot;li:hidden&quot;)                  //结果为不可见
$(&quot;li:visible&quot;)                  //结果为看见&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;6:属性过滤器&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;1, [attribute=value]                 匹配属性是给定值的元素&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;2, [attribute^=value]               匹配属性是以给定值开始的元素&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;3, [attribute$=value]              匹配属性是以给定值结束的元素&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;4, [attribute*=value]               匹配属性包含给定值的元素&lt;/p&gt;
&lt;p&gt;例:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;img src=&quot;/abc/def/sss.jpg&quot; alt=&quot;abc&quot;/&amp;gt;   1
&amp;lt;img src=&quot;/abc/def/589.jpg&quot;/&amp;gt;                  2
&amp;lt;img  alt=&quot;qwe&quot;/&amp;gt;                                     3

$(&quot;img[src]&quot;)                       //结果为12
$(&quot;img[alt=qwe]&quot;)              //结果为3
$(&quot;img[src^=/abc/]&quot;)           //结果为12
$(&quot;img[alt$=bc]&quot;)                //结果为1
$(&quot;img[src*=def]&quot;)            //结果为12&lt;/pre&gt;
&lt;p&gt;JQuery的选择器就到这里了吧！还有更复杂的选择器没有讲到，这些选择器应该能在平时的工作中遇到！&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/586942791/te6a/feedsky/s.gif?r=http://www.bugbig.net/jquery-select/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.bugbig.net/jquery-select/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>在学习JQuery的开始了解它神秘般的$选择器是必不可少的,JQuery的选择器使用方便功能强大是必不可少的语法,下面介绍下它的使用方法! JQuery的选择器主要是方便DOM元素的选择修改等,使页面元素变得更加容易,更加灵活,从而大大减轻了开发人员的压力.可见,jQuery选择器的重要性,当然想一下子掌握所有选择器也是很困难的,这个得靠实践和积累. 将JQuery选择器分类是很有利于学习与记忆的!下面把它分为以下几类: 1:基本选择器 1, #ID                根据元素ID选择 2, elementname 根据元素名称选择 3, .classname     根据元素CSS类名选择 例: $(&quot;#id&quot;)     //选择ID为id的元素 $(&quot;div&quot;)      //选择页面上所有的div元素 $(&quot;.class&quot;)  //选择页面上所有CSS类名为class的元素 以上三种为最常见的选择器,其中ID选择器是效率最高的,在可能的情况下应该尽量使用它. 还可以组合起来用例如：$(&amp;#8220;#id div&amp;#8221;) 选择ID为id下的所有div元素. 2:层次选择器 1, ancestor descendant    祖先和子孙选择器 2, parent&amp;#62;child           父子节点选择器 3, prev+next             [...]&lt;img src=&quot;http://www1.feedsky.com/t1/586942791/te6a/feedsky/s.gif?r=http://www.bugbig.net/jquery-select/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>jqueay</category><category>javascript</category><pubDate>Sat, 13 Aug 2011 11:54:50 +0800</pubDate><author>admin</author><comments>http://www.bugbig.net/jquery-select/#comments</comments><guid isPermaLink="false">http://www.bugbig.net/?p=195</guid><dc:creator>admin</dc:creator><fs:srclink>http://www.bugbig.net/jquery-select/</fs:srclink><fs:srcfeed>http://www.bugbig.net/feed/</fs:srcfeed><fs:itemid>feedsky/te6a/~8717488/586942791/6835310</fs:itemid></item><item><title>JQuery学习之-ready()方法</title><link>http://www.bugbig.net/jquery-study-reday-function/</link><content:encoded>&lt;p&gt;JQuery的ready()方法可以算是学习JQuery的第一步吧！这也是对一些人来说。看下面的语法：&lt;/p&gt;
&lt;pre&gt;$(document).ready(function(){...});&lt;/pre&gt;
&lt;p&gt;&lt;span id=&quot;more-184&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;$().ready(function(){...});&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;$(function(){...});&lt;/pre&gt;
&lt;p&gt;ready()方法是执行在所有的元素加载完后的方法，ready()不同于DOM的onload()方法。&lt;/p&gt;
&lt;p&gt;ready() 方法不应与 &amp;lt;body onload=&amp;#8221;&quot;&amp;gt; 一起使用。&lt;/p&gt;
&lt;h2&gt;定义和用法&lt;/h2&gt;
&lt;p&gt;当 DOM（文档对象模型） 已经加载，并且页面（包括图像）已经完全呈现时，会发生 ready 事件。&lt;/p&gt;
&lt;p&gt;由于该事件在文档就绪后发生，因此把所有其他的 jQuery 事件和函数置于该事件中是非常好的做法。正如上面的例子中那样。&lt;/p&gt;
&lt;p&gt;ready() 函数仅能用于当前文档，因此无需选择器。&lt;/p&gt;
&lt;p&gt;ready() 函数规定当 ready 事件发生时执行的代码。&lt;/p&gt;
&lt;h2&gt;实例&lt;/h2&gt;
&lt;p&gt;在文档加载完后执行函数：&lt;/p&gt;
&lt;pre&gt;$(document).ready(function(){
  $(&quot;.btn&quot;).click(function(){
    $(&quot;p&quot;).slideToggle();
  });
});&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/586942792/te6a/feedsky/s.gif?r=http://www.bugbig.net/jquery-study-reday-function/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.bugbig.net/jquery-study-reday-function/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>JQuery的ready()方法可以算是学习JQuery的第一步吧！这也是对一些人来说。看下面的语法： $(document).ready(function(){...}); $().ready(function(){...}); &amp;#160; $(function(){...}); ready()方法是执行在所有的元素加载完后的方法，ready()不同于DOM的onload()方法。 ready() 方法不应与 &amp;#60;body onload=&amp;#8221;&quot;&amp;#62; 一起使用。 定义和用法 当 DOM（文档对象模型） 已经加载，并且页面（包括图像）已经完全呈现时，会发生 ready 事件。 由于该事件在文档就绪后发生，因此把所有其他的 jQuery 事件和函数置于该事件中是非常好的做法。正如上面的例子中那样。 ready() 函数仅能用于当前文档，因此无需选择器。 ready() 函数规定当 ready 事件发生时执行的代码。 实例 在文档加载完后执行函数： $(document).ready(function(){ $(&quot;.btn&quot;).click(function(){ $(&quot;p&quot;).slideToggle(); }); }); &amp;#160;&lt;img src=&quot;http://www1.feedsky.com/t1/586942792/te6a/feedsky/s.gif?r=http://www.bugbig.net/jquery-study-reday-function/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>jqueay</category><category>ready</category><category>javascript</category><pubDate>Wed, 10 Aug 2011 12:26:07 +0800</pubDate><author>admin</author><comments>http://www.bugbig.net/jquery-study-reday-function/#comments</comments><guid isPermaLink="false">http://www.bugbig.net/?p=184</guid><dc:creator>admin</dc:creator><fs:srclink>http://www.bugbig.net/jquery-study-reday-function/</fs:srclink><fs:srcfeed>http://www.bugbig.net/feed/</fs:srcfeed><fs:itemid>feedsky/te6a/~8717488/586942792/6835310</fs:itemid></item><item><title>WordPress使用自带的Akismet插件屏蔽垃圾评论</title><link>http://www.bugbig.net/wordpress%e4%bd%bf%e7%94%a8%e8%87%aa%e5%b8%a6%e7%9a%84akismet%e6%8f%92%e4%bb%b6%e5%b1%8f%e8%94%bd%e5%9e%83%e5%9c%be%e8%af%84%e8%ae%ba/</link><content:encoded>&lt;p&gt;刚开始写博客不久居然就被黑评给盯上了,想到就后怕呀,虽然后台设置了评论要审核才能通过,但是每天到后台去删那些可怕的评论也烦呀!垃圾评论英文的特别多,有卖药的，有卖电话的，有做网站广&lt;span id=&quot;more-175&quot;&gt;&lt;/span&gt;告的，有……删除都烦死了.被弄疯了后没办法只能向Google求助了,记得Wordpress好像自带了个屏蔽垃圾评论的插件，以前弄了次没弄明白也就没弄了！那时候还没遇到个可怕的垃圾评论！这次硬把它搞明白了，看下面使用方法：&lt;/p&gt;
&lt;p&gt;在开启Akismet插件时它需要一个&lt;a href=&quot;http://akismet.com/wordpress/&quot; target=&quot;_blank&quot;&gt;Akismet API key&lt;/a&gt;！这东西得到他们的网站上去注册！可以点击get an Akismet API key免费注册！如下图：&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.bugbig.net/wp-content/uploads/2011/07/5484sdf.jpg&quot;&gt;&lt;img class=&quot;size-medium wp-image-177 aligncenter&quot; title=&quot;5484sdf&quot; src=&quot;http://www.bugbig.net/wp-content/uploads/2011/07/5484sdf-300x210.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;210&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;注册这个API key 时可以给钱也可以不给钱，给不给钱就看自己的钱包咯！不给钱的话就选择最后一个注册：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bugbig.net/wp-content/uploads/2011/07/ergsertg.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-178&quot; title=&quot;ergsertg&quot; src=&quot;http://www.bugbig.net/wp-content/uploads/2011/07/ergsertg-300x160.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;160&quot; /&gt;&lt;/a&gt;选好后填写好个人信息，记得把那个小滑标滑到最后右边出现一个哭脸就行了！&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bugbig.net/wp-content/uploads/2011/07/fthfthftsd.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-179&quot; title=&quot;fthfthftsd&quot; src=&quot;http://www.bugbig.net/wp-content/uploads/2011/07/fthfthftsd-300x165.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;165&quot; /&gt;&lt;/a&gt;注册成功后就会给你填写的邮箱发送Akismet API key了，到后台Akismet 配置填写收到的那个Akismet  api key保存就行了！&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/586942793/te6a/feedsky/s.gif?r=http://www.bugbig.net/wordpress%e4%bd%bf%e7%94%a8%e8%87%aa%e5%b8%a6%e7%9a%84akismet%e6%8f%92%e4%bb%b6%e5%b1%8f%e8%94%bd%e5%9e%83%e5%9c%be%e8%af%84%e8%ae%ba/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.bugbig.net/wordpress%e4%bd%bf%e7%94%a8%e8%87%aa%e5%b8%a6%e7%9a%84akismet%e6%8f%92%e4%bb%b6%e5%b1%8f%e8%94%bd%e5%9e%83%e5%9c%be%e8%af%84%e8%ae%ba/feed/</wfw:commentRss><slash:comments>2</slash:comments><description>刚开始写博客不久居然就被黑评给盯上了,想到就后怕呀,虽然后台设置了评论要审核才能通过,但是每天到后台去删那些可怕的评论也烦呀!垃圾评论英文的特别多,有卖药的，有卖电话的，有做网站广告的，有……删除都烦死了.被弄疯了后没办法只能向Google求助了,记得Wordpress好像自带了个屏蔽垃圾评论的插件，以前弄了次没弄明白也就没弄了！那时候还没遇到个可怕的垃圾评论！这次硬把它搞明白了，看下面使用方法： 在开启Akismet插件时它需要一个Akismet API key！这东西得到他们的网站上去注册！可以点击get an Akismet API key免费注册！如下图： &amp;#160; 注册这个API key 时可以给钱也可以不给钱，给不给钱就看自己的钱包咯！不给钱的话就选择最后一个注册： 选好后填写好个人信息，记得把那个小滑标滑到最后右边出现一个哭脸就行了！ 注册成功后就会给你填写的邮箱发送Akismet API key了，到后台Akismet 配置填写收到的那个Akismet  api key保存就行了！&lt;img src=&quot;http://www1.feedsky.com/t1/586942793/te6a/feedsky/s.gif?r=http://www.bugbig.net/wordpress%e4%bd%bf%e7%94%a8%e8%87%aa%e5%b8%a6%e7%9a%84akismet%e6%8f%92%e4%bb%b6%e5%b1%8f%e8%94%bd%e5%9e%83%e5%9c%be%e8%af%84%e8%ae%ba/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>wordpress</category><category>插件</category><category>Akismet</category><pubDate>Mon, 11 Jul 2011 15:01:16 +0800</pubDate><author>admin</author><comments>http://www.bugbig.net/wordpress%e4%bd%bf%e7%94%a8%e8%87%aa%e5%b8%a6%e7%9a%84akismet%e6%8f%92%e4%bb%b6%e5%b1%8f%e8%94%bd%e5%9e%83%e5%9c%be%e8%af%84%e8%ae%ba/#comments</comments><guid isPermaLink="false">http://www.bugbig.net/?p=175</guid><dc:creator>admin</dc:creator><fs:srclink>http://www.bugbig.net/wordpress%e4%bd%bf%e7%94%a8%e8%87%aa%e5%b8%a6%e7%9a%84akismet%e6%8f%92%e4%bb%b6%e5%b1%8f%e8%94%bd%e5%9e%83%e5%9c%be%e8%af%84%e8%ae%ba/</fs:srclink><fs:srcfeed>http://www.bugbig.net/feed/</fs:srcfeed><fs:itemid>feedsky/te6a/~8717488/586942793/6835310</fs:itemid></item><item><title>WordPress不停的显示随机文章</title><link>http://www.bugbig.net/wordpress-stop-the-display-random-articles/</link><content:encoded>&lt;p&gt;网上很多显示随机文章的代码，我感觉显示一次不够需要不停的显示才算真正的随机显示文章！在网上也找了些东东，左弄弄右弄弄就弄出了个随机显示文章的方法！不啰嗦了看下面&lt;span id=&quot;more-167&quot;&gt;&lt;/span&gt;的实现！&lt;/p&gt;
&lt;p&gt;首先在侧边栏添加个Text小工具标题就写随机文章吧！放什么位置就看个人爱好了！再用浏览器工具查看那个随机文章ID，怎么查看就不用啰嗦了吧！我用的是Google浏览器，看下图我查看的：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bugbig.net/wp-content/uploads/2011/07/Screenshot.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-168&quot; title=&quot;Screenshot&quot; src=&quot;http://www.bugbig.net/wp-content/uploads/2011/07/Screenshot.png&quot; alt=&quot;&quot; width=&quot;298&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;查到后记下来，新建一个ajax-rand-post.php文件输入下面的代码传到wordpress当前主题文件下&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?php require( dirname(__FILE__) . '/../../../wp-load.php' );?&amp;gt;
&amp;lt;ul&amp;gt;  &amp;lt;?php $rand_posts = get_posts('numberposts=5&amp;amp;orderby=rand');
foreach( $rand_posts as $post ) : ?&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&quot;&amp;lt;?php the_permalink(); ?&amp;gt;&quot;&amp;gt;&amp;lt;?php the_title(); ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;?php endforeach; ?&amp;gt;
&amp;lt;/ul&amp;gt;&lt;/pre&gt;
&lt;p&gt;搞定后转到小工具页面在刚添加的Text小工具文本内输入下面的代码：&lt;/p&gt;
&lt;pre&gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
function randpost(){
$('&lt;span style=&quot;color: #ff0000;&quot;&gt;#text-5&lt;/span&gt; div').load('&lt;span style=&quot;color: #ff0000;&quot;&gt;/wp-content/themes/SimpleD/ajax-rand-post.php&lt;/span&gt;');
}
randpost();
window.setInterval(randpost,5000);
&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;红色的字体是要修改的，我查到的随机文章ID是&lt;span style=&quot;color: #ff0000;&quot;&gt;text-5&lt;/span&gt;修改成你查到的，路径修改成你主题文件夹的目录，5000就是5秒可以设成自己喜欢的！&lt;/p&gt;
&lt;p&gt;完了！没看的了！快去试试吧！&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/586942794/te6a/feedsky/s.gif?r=http://www.bugbig.net/wordpress-stop-the-display-random-articles/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://www.bugbig.net/wordpress-stop-the-display-random-articles/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>网上很多显示随机文章的代码，我感觉显示一次不够需要不停的显示才算真正的随机显示文章！在网上也找了些东东，左弄弄右弄弄就弄出了个随机显示文章的方法！不啰嗦了看下面的实现！ 首先在侧边栏添加个Text小工具标题就写随机文章吧！放什么位置就看个人爱好了！再用浏览器工具查看那个随机文章ID，怎么查看就不用啰嗦了吧！我用的是Google浏览器，看下图我查看的： 查到后记下来，新建一个ajax-rand-post.php文件输入下面的代码传到wordpress当前主题文件下 &amp;#60;?php require( dirname(__FILE__) . '/../../../wp-load.php' );?&amp;#62; &amp;#60;ul&amp;#62;  &amp;#60;?php $rand_posts = get_posts('numberposts=5&amp;#38;orderby=rand'); foreach( $rand_posts as $post ) : ?&amp;#62; &amp;#60;li&amp;#62;&amp;#60;a href=&quot;&amp;#60;?php the_permalink(); ?&amp;#62;&quot;&amp;#62;&amp;#60;?php the_title(); ?&amp;#62;&amp;#60;/a&amp;#62;&amp;#60;/li&amp;#62; &amp;#60;?php endforeach; ?&amp;#62; &amp;#60;/ul&amp;#62; 搞定后转到小工具页面在刚添加的Text小工具文本内输入下面的代码： &amp;#60;script type=&quot;text/javascript&quot;&amp;#62; function randpost(){ $('#text-5 div').load('/wp-content/themes/SimpleD/ajax-rand-post.php'); } randpost(); window.setInterval(randpost,5000); &amp;#60;/script&amp;#62; 红色的字体是要修改的，我查到的随机文章ID是text-5修改成你查到的，路径修改成你主题文件夹的目录，5000就是5秒可以设成自己喜欢的！ 完了！没看的了！快去试试吧！&lt;img src=&quot;http://www1.feedsky.com/t1/586942794/te6a/feedsky/s.gif?r=http://www.bugbig.net/wordpress-stop-the-display-random-articles/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>wordpress</category><category>widget</category><pubDate>Fri, 01 Jul 2011 14:49:42 +0800</pubDate><author>admin</author><comments>http://www.bugbig.net/wordpress-stop-the-display-random-articles/#comments</comments><guid isPermaLink="false">http://www.bugbig.net/?p=167</guid><dc:creator>admin</dc:creator><fs:srclink>http://www.bugbig.net/wordpress-stop-the-display-random-articles/</fs:srclink><fs:srcfeed>http://www.bugbig.net/feed/</fs:srcfeed><fs:itemid>feedsky/te6a/~8717488/586942794/6835310</fs:itemid></item></channel></rss>
