??xml version="1.0" encoding="utf-8" standalone="yes"?>国产成人AV综合久久,无码精品久久一区二区三区,久久99国产一区二区三区http://www.shnenglu.com/guogangj/category/13734.html创作Q也是一U学习的q程?/description>zh-cnThu, 08 Sep 2011 13:09:17 GMTThu, 08 Sep 2011 13:09:17 GMT60安装VS2010后VS2008无法调试Windows MobileE序的问?/title><link>http://www.shnenglu.com/guogangj/archive/2011/09/08/155351.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Thu, 08 Sep 2011 06:07:00 GMT</pubDate><guid>http://www.shnenglu.com/guogangj/archive/2011/09/08/155351.html</guid><wfw:comment>http://www.shnenglu.com/guogangj/comments/155351.html</wfw:comment><comments>http://www.shnenglu.com/guogangj/archive/2011/09/08/155351.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/guogangj/comments/commentRss/155351.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guogangj/services/trackbacks/155351.html</trackback:ping><description><![CDATA[大概大约半年多前遇到q一ơ,当时Windows Phone 7的SDK发布Q好奇,也就下蝲了一个安装了Q感觉在公司的破机器QE2200的CPUQ上跑得很慢Q更郁闷的是׃昑֍不支持DX9QWindows Phone 7模拟器的q行效果惨不忍睹Q而这些其实都没什么,因ؓ装了q个Q导致我的VS2008无法调试Windows Mobile的程序了Q现象如图:<br /><img border="0" alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/f5_error.png" width="415" height="249" /><br />按F5QDeploy成功之后q卛_个消息款Q只有一?#8220;定”按钮Q没有Q何别的提C。折腾了半天依旧如此Q网上查资料Q可能是׃q做Windows Mobile开发的人太,没几个h遇到q个问题Q相似的都是说ASP.net在VS2010下无法启动调试,需要修改Web.config配置{?br /><br />不幸中的万幸是我卸蝲掉VS2010之后Q一切都正常了,所以之后也一直没安装VS2010?br /><br />而最q项目需求又要用到VS2010Q我清理了半天已l?#8220;见红”的系l盘之后开始安装VS2010 Ultimate版本Q之前装的是Express版,安装中还不断祷不要出现以前那种问题。结果,q是出现了,N我只能卸载掉VS2010么?毕竟调试Windows MobileE序是必ȝ。心不甘Q毕竟装一ơ卸一ơ花Ҏ间不?br /><br />用google搜烦了半天后Q终于,功夫不负有心人,在Microsoft的官方网站上扑ֈ了解x案:<br /><a >http://social.msdn.microsoft.com/Forums/en/windowsphone7series/thread/7afdadc0-7e16-4018-85a8-a13fe9c4b8cb</a><br />览完整个帖子之后,知道大概~由是这P<br /><br />׃VS2010改变了某些环境变量,DVS2008找不到调试器Q在我的机器上,VS2008的智能设备调试器存放处是Q?br />C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\Debugger\target\wce400\armv4i\edm2.exe<br />这个文件复制到VS2010的相应目录下OK了:<br />D:\Program Files\Microsoft Visual Studio 10.0\SmartDevices\Debugger\target\wce400\armv4i\edm2.exe<br />也许你已l发玎ͼ׃pȝ盘捉襟见肘的剩余I间Q我把VS2010安装到D盘了Q但在系l盘依旧要占用不空间的。希望老板很快l我换好机器……<br /><img src ="http://www.shnenglu.com/guogangj/aggbug/155351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-09-08 14:07 <a href="http://www.shnenglu.com/guogangj/archive/2011/09/08/155351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>帮Windows Mobile实现gmtimeQlocaltimeQmktime和strftimehttp://www.shnenglu.com/guogangj/archive/2011/06/30/149827.htmlJiang GuogangJiang GuogangThu, 30 Jun 2011 08:45:00 GMThttp://www.shnenglu.com/guogangj/archive/2011/06/30/149827.htmlhttp://www.shnenglu.com/guogangj/comments/149827.htmlhttp://www.shnenglu.com/guogangj/archive/2011/06/30/149827.html#Feedback1http://www.shnenglu.com/guogangj/comments/commentRss/149827.htmlhttp://www.shnenglu.com/guogangj/services/trackbacks/149827.html阅读全文

Jiang Guogang 2011-06-30 16:45 发表评论
]]>
Windows Mobile上网讄详细图解http://www.shnenglu.com/guogangj/archive/2011/05/31/147787.htmlJiang GuogangJiang GuogangTue, 31 May 2011 13:48:00 GMThttp://www.shnenglu.com/guogangj/archive/2011/05/31/147787.htmlhttp://www.shnenglu.com/guogangj/comments/147787.htmlhttp://www.shnenglu.com/guogangj/archive/2011/05/31/147787.html#Feedback0http://www.shnenglu.com/guogangj/comments/commentRss/147787.htmlhttp://www.shnenglu.com/guogangj/services/trackbacks/147787.html开?-> 讄 -> q接 -> q接
打开q接讄对话框,在我的手Z是这hC的Q?br />
<?>
各台机器上可能不一Pq没关系Q我们现在点“高”标签Q如图:

<?>
再点“选择|络”按钮Q如图:

<?>
点击下拉框,发觉除了“单位讄”?#8220;Internet讄”两个|络讄之外Q还有一个名?#8220;MMS”的设|,Z减少qhQ我们现在只要保?#8220;单位讄”?#8220;Internet 讄”Q把其它的设|删除。在下拉框中选中“MMS”Q如图:

<?>
?#8220;~辑”按钮Q如图:

<?>
选择“常规”标签Q如图:

<?>
?#8220;删除讄”按钮?br />全部删除不必要的|络讄之后Q(特别说明Q事实上Q?#8220;单位讄”?#8220;Internet 讄”两个|络讄虽然不能被删除,但它们的名称却是可以改的Q这里假设这两个|络讄的名字还是默认的名字Q没有被修改Q在“选择|络”对话框中Q按照图3去设|,上面选择“Internet 讄”Q下面选择“单位讄”Q?#8220;单位讄”是个不太好理解的名称Q在英文版的Windows Mobile中,它的名字?#8220;My Work Network”Q直译过来应该是“我的工作|络”Q?#8220;Internet 讄”在英文版中的名称?#8220;My ISP”Q直译过来应该是“我的Internet服务提供?#8221;Qȝ来说Q意思都不是很明,q也是让惑的原因之一?br />特别要说明一下的是Q?#8220;Internet 讄”?#8220;单位讄”q两个网l设|是删除不掉的?br />我们现在单地q么理解Q?br />“Internet 讄”是直q模式,?#8220;单位讄”是代理模式?br />现在Q我们点“在程序自动连接到Internet?#8221;下面?#8220;~辑”按钮Q如图:

<?>
如果已经有连接项了,那么先把q接删除,Ҏ是按住连接项Q然后在呼出的上下文菜单中选择“删除”Q如图:

<?>
在图7的界面中?#8220;新徏”按钮Q然后如图设|:

<?>
其中的名U可以v别的名字Q不一定是“UdInternet”Q这个ƈ不媄响最l的l果Q好了之后点“下一?#8221;Q再如图讄Q?br />
<?0>
特别说明Q我使用的网l是Ud的,所以这里填cmnetQ如果我没记错的话,联通的q里应该填写“uninet”Q联?G|络的话应该填写“3gnet”Q电信的则填?#8220;ctnet”?br />好了之后?#8220;下一?#8221;Q这步留I,什么都不用填,直接点完成,如图Q?br />
<?1>
q个时候,我们p看到我们刚添加的q接了Q如图:

<?2>
?#8220;ok”Q回C一界面Q现在点“在程序自动连接到专用|络?#8221;下面?#8220;~辑”按钮Q出CcM?的界面,删除掉不必要的连接项后,我们?#8220;新徏”Q如图设|:

<?3>
完成后点下一步,再如图设|:

<?4>
q里我输入的是cmwapQ因为我用的是移动的|络Q联通的应该是uniwapQ联?G的应该是3gwapQ电信的应该是ctwapQ大家根据实际情况输入。然后下一步,q步不需要填写什么内容,留空卛_。再?#8220;完成”Q如图:

<?5>
“单位讄”和前面的“Internet 讄”不同的是多了“VPN”?#8220;代理服务器设|?#8221;的标{,从上囑֏以看出来Q所以我前面也提CQ?#8220;Internet 讄”是直q模式,?#8220;单位讄”是代理模式。我们接下来讄代理服务器,?#8220;代理服务器设|?#8221;标签Q如图设|:

<?6>
再点?#8220;高”按钮Q如图设|:

<?7>
okQokQok……
q样应该完成了?br />如果q是不行Q那估计是手机的电话模块有问题Q我遇到过q种情况Q电话能打,短信能收能发Q但|络无论如何都用不了Q重新刷机有可能解决q个问题Q另外还有可能就是电话欠费而停ZQ即便你充了||络服务也未必马上能开通,关闭q新打开电话或者重启手机可能解册个问题?img src ="http://www.shnenglu.com/guogangj/aggbug/147787.html" width = "1" height = "1" />

Jiang Guogang 2011-05-31 21:48 发表评论
]]>
奇怪的Windows Mobile输入面板h问题http://www.shnenglu.com/guogangj/archive/2011/04/12/144018.htmlJiang GuogangJiang GuogangTue, 12 Apr 2011 03:25:00 GMThttp://www.shnenglu.com/guogangj/archive/2011/04/12/144018.htmlhttp://www.shnenglu.com/guogangj/comments/144018.htmlhttp://www.shnenglu.com/guogangj/archive/2011/04/12/144018.html#Feedback0http://www.shnenglu.com/guogangj/comments/commentRss/144018.htmlhttp://www.shnenglu.com/guogangj/services/trackbacks/144018.htmlq是最q弄的一个程序,其实以前在用别的程序的时候貌g出现q类似的问题Q那是Q有些时候点击菜单栏上的输入法按钮,输入法面板却无法正常隐藏。而经q进一步研I后发现Q其实ƈ不是没有隐藏Q而是没有hQ而且不能通过常规的手D|hQ比如调用InvalidateRectQ或?#8220;遮挡/重新调出”{常规手Dc如图:



仔细看菜单栏上的“S”按钮Q这是搜狗输入法的按钮,现在它应该处于关闭状态,而输入法面板却还在显C,q且Q点上去无效Q效果是“点击IK?#8221;Q下面这张图是输入法面板正常的情况:



q是菜单栏上的输入法按钮处于Ȁzȝ态?br>
当出现问题的时候,你让企图通过“遮挡/重新调出”的手D让q块区域重绘Q那会导致类g面的情况Q下面这张图是我呼出开始菜单,然后又关闭开始菜单之后,得到的结果?br>


事实上,我的应用E序H口实是填满了整个客户区的Q至于ؓ什么不能正常刷斎ͼ真是令h费解。但l过大量折腾Q我看v来是解决了这个问题,那就是把我窗口处理函C的代码拿掉一点:

    case WM_ACTIVATE:
        SHHandleWMActivate(hWnd, wParam, lParam, 
&s_sai, FALSE);
        
break;
//    case WM_SETTINGCHANGE:
//        SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai);
//        break;

下面注释掉的代码是我拿掉的代码Q似乎这个问题就不再出现了,但ؓ什么这hq是不懂。而Windows Mobile开发中遇到的这U问题真是数不胜?#8230;…

Jiang Guogang 2011-04-12 11:25 发表评论
]]>
Windows Mobile的安全模型简?/title><link>http://www.shnenglu.com/guogangj/archive/2011/04/02/143292.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Sat, 02 Apr 2011 09:26:00 GMT</pubDate><guid>http://www.shnenglu.com/guogangj/archive/2011/04/02/143292.html</guid><wfw:comment>http://www.shnenglu.com/guogangj/comments/143292.html</wfw:comment><comments>http://www.shnenglu.com/guogangj/archive/2011/04/02/143292.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/guogangj/comments/commentRss/143292.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guogangj/services/trackbacks/143292.html</trackback:ping><description><![CDATA[PocketPC可用W一套安全模型(T1Q,而SmartPhone则可用第一套和W二套安全模型(T2Q。安全模型ƈ不能保Windows Mobile一定不受到恶意E序的媄响?br><br><strong>安全模型的几个方?br><br>1Q应用程序执?br></strong>针对可执行程序,控制q行在机器中的程序以及这些程序能q什么?br><br><strong>2Q设备配|?br></strong>针对讑֤理讄Q控制谁能够讉K讑֤的配|以及相兌问别?br><br><strong>3Q远E访问接口(RAPIQ?br></strong>通过ActiveSync来控制桌面Windows的程序能在设备上q啥?br><br><span style="FONT-SIZE: 24pt"><strong>T1<br></strong></span>T1区分“已签?#8221;QsignedQ和“未签?#8221;QunsignedQ的应用E序。已{֐的程序拥有特权,拥有Ҏ可以访问设备上的所有资源,包括各种pȝAPIQ受保护的注册表键值等。如需了解更多Q请在MSDN上查?#8220;Privileged APIs”?br><br>对于未签名的应用E序Q则使用以下{略来决定这个程序是否可以在讑֤上运行:<br><br>“Unsigned Application{略”(SECPOLICY_UNSIGNEDAPPS)被用来检一个未{֐应用E序是否可以在设备上q行?br><br>如果允许q行未签名应用程?SECPOLICY_UNSIGNEDAPPS=1)Q那么就?#8220;Unsigned Prompt{略”(SECPOLICY_UNSIGNEDPROMPT)Q如?#8220;Unsigned Prompt{略”?Q那么就不提C用P直接让应用程序以Ҏ模式q行Q如?#8220;Unsigned Prompt{略”?Q那么就要提C用P是否让这个程序运行,如果用户?#8220;?#8221;Q这个程序就以特权模式运行了?br><br><span style="FONT-SIZE: 24pt"><strong>T2<br></strong></span>T2(SECPOLICY_PRIVELEGEDAPPS=0)模型提供了更好的伸羃性。在T1模型Q应用程序只有两U可能,一是运行,二是不运行,而在T2模型中,一个应用程序的q行q有“普通模?#8221;?#8220;Ҏ模式”之分。已{֐应用E序以特权模式运行的时候, 可以讉K讑֤的一切资源;已签名应用程序以普通模式运行的时候,不可以访问受保护的系lAPI和注册表?br><br>T2模型Ҏ应用E序的签名来军_它是“Ҏ模式”q行q是“普通模?#8221;q行。如果应用程序是用特权证书签名的Q那么就?#8220;Ҏ模式”q行Q如果应用程序是用普通证书签名的Q那q“普通模?#8221;q行?br><br>T1和T2怺间不能自由切换,如果要换Q那得重新弄。(弄个新的ROMQ? <img src ="http://www.shnenglu.com/guogangj/aggbug/143292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-04-02 17:26 <a href="http://www.shnenglu.com/guogangj/archive/2011/04/02/143292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>析Windows Mobile内存机制http://www.shnenglu.com/guogangj/archive/2011/03/24/142653.htmlJiang GuogangJiang GuogangThu, 24 Mar 2011 08:39:00 GMThttp://www.shnenglu.com/guogangj/archive/2011/03/24/142653.htmlhttp://www.shnenglu.com/guogangj/comments/142653.htmlhttp://www.shnenglu.com/guogangj/archive/2011/03/24/142653.html#Feedback2http://www.shnenglu.com/guogangj/comments/commentRss/142653.htmlhttp://www.shnenglu.com/guogangj/services/trackbacks/142653.html
首先说硬件上的ROMQRAMQ我们购买手机的时候,在手机参数里通常喜欢q么说明Q以我的HTC HD2ZQ:

ROMQ?024M
RAMQ?76M

q是什么意思呢Q这指的是手Z面的两颗芯片的数据容量,ROMq颗芯片其实q真的Read-onlyQ它的特点只是断电后上面数据不会丢失Q而RAMq颗芯片则跟我们PC上的内存条芯片一P断电后数据丢失?br>
接下来是操作pȝ所说的ROM和RAMQWindows Mobile的刷机其实就是将ROM文g的内容写入到那颗ROM芯片厅R而操作系l第一ơ启动的时候将完成一些后l的相关初始化。Windows Mobile所认ؓ的ROMQ指的是ROM芯片中被写入的那些只ȝ部分Q这部分的内Ҏ不能改变的,Q刷机才能改Q那么剩下的能被E序和操作系l改变的Q就是RAM了,所以RAM也不{同于硬件上的RAM芯片Q它q包括了ROM芯片中可以读写的那一部分?br>
那么Q下面所提到的ROM和RAM都是操作pȝ概念上的ROM和RAMQ而不是硬件上ROM芯片和RAM芯片?br>
MWindows Mobile讑֤QROM保存了整个操作系l,包括操作pȝ自带的那些应用程序,也都在ROM里边。如果ROM里边的模块(在资源管理器中看到的可执行文Ӟ通常是EXE和DLLQ在q里UC为模块)没有被压~,那么操作pȝ它“当地执行”QExcute In PlaceQ也是~写词XIPQ;反之Q如果ROM里边的模块是压羃q的Q那操作pȝ只能先把模块解压羃到RAM中,然后再在RAM中执行它。至于哪些模块可以XIPQ那是OEM相关的?br>
使用XIP有很大好处,最重要的是节省了宝늚RAMQ也节省了模块家载入RAM中所需要消耗的旉?br>
那我们^常安装的软gQ保存的配置Q是存放在哪里呢Q——存攑֜“对象存储”QObject StoreQ或者卡上,存放?#8220;对象存储”或者卡上的可执行模块,是无法XIP的,只能先加载入RAMQ然后再在RAM中执行?br>
上面提到?#8220;对象存储”Q下面进一步讲解:

Windows Mobile的RAMQ再ơ提醒一下,指的不是g上的RAM芯片Q分Z个部分:

其一是“对象存储”Q?#8220;对象存储”里的内容在断电后l箋保留Q不会丢失;另一个就?#8220;E序内存”Q程序内存的内容会在断电后丢失?br>
“对象存储”存放的内容包括各U文Ӟ数据库,数据库记录,注册表等Q?#8220;E序内存”则存攑ֺ用程序运行时候的堆(heapQ和栈(stackQ?br>
当Windows Mobile启动的时候,它创Z单独?G虚拟地址I间Q这4G的空间中划分?3个格子,每个格子32MQ所有的q程׃nq个地址I间Q当一个进E启动的时候,操作pȝ׃ؓ它选一个格子来映射。这是跟桌面的Windows很不一L机制Q据说Windows CE 6.0已经改进了这U内存机Ӟ但最新版本的Windows Mobile 6.5其实q是ZWindows CE 5.x内核的。微软这么设计估计是因ؓ惌省便携式讑֤本来很宝贵的资源,但这样做的缺Ҏ而易见,一是只能最多跑32个进E(W?个格子L用来映射前端q程的地址I间Q,二是每个q程默认只能?2M的虚拟空_虽然你还可以通过内存映射文g机制或调用VirtualAlloc函数来分配超q?2M的虚拟内存)?br>
 

我们在Windows Mobile的系l设|里面看到的“d?#8221;Q指的就是RAM。而ROM呢?ROM不光是只读,我认为它q是不可读,几乎不可见的Q常规的E序是看不到ROM的,即便你能够在资源理器里扑ֈ那些属于ROM?#8220;文g”Q但你还是无法读取它或者将?#8220;复制”出来?br>


如上图,d存分两类Q一?#8220;存储”Q一?#8220;E序”Q其实也是前面提到?#8220;对象存储”?#8220;E序内存”了。也怽发觉“E序”的d存只?60.02MQ而不是硬件上标称?76MQ要解释q个可相当不ҎQ具体参考我前面转蝲的一文章:

http://www.shnenglu.com/guogangj/archive/2010/12/19/136927.html


Jiang Guogang 2011-03-24 16:39 发表评论
]]>
Windows Mobile中文拼音?/title><link>http://www.shnenglu.com/guogangj/archive/2011/02/12/139943.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Sat, 12 Feb 2011 09:05:00 GMT</pubDate><guid>http://www.shnenglu.com/guogangj/archive/2011/02/12/139943.html</guid><wfw:comment>http://www.shnenglu.com/guogangj/comments/139943.html</wfw:comment><comments>http://www.shnenglu.com/guogangj/archive/2011/02/12/139943.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/guogangj/comments/commentRss/139943.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guogangj/services/trackbacks/139943.html</trackback:ping><description><![CDATA[Z实现中文拼音序,必能够用拼音来比较汉字大,默认情况下,Windows Mobile下的字符都是UNICODEQUNICODE明显q不是拼韛_Q所以不能直接用_tcscmp之类的函敎ͼ我记得Windows环境下可用strcoll实现Q但当我在Windows Mobile环境下尝试用strcollӞ却发现strcollq没有被实现Q郁闗查了很多资料之后,发觉GBK码是拼音序的QOKQ就用这个权宜之计吧Q?br> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">  MAX_WCHAR_LENGTH   64</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">  MAX_CHAR_BUFF_LEN  (MAX_WCHAR_LENGTH*2)</span><span style="COLOR: #000000"><br><br>INT StrCmpPinyin(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> WCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> str1, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> WCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> str2)<br>{<br>    WCHAR szWStr1[MAX_WCHAR_LENGTH];<br>    WCHAR szWStr2[MAX_WCHAR_LENGTH];<br>    CHAR szStr1[MAX_CHAR_BUFF_LEN];<br>    CHAR szStr2[MAX_CHAR_BUFF_LEN];<br>    <br>    StringCchCopyW(szWStr1, MAX_WCHAR_LENGTH, str1);<br>    StringCchCopyW(szWStr2, MAX_WCHAR_LENGTH, str2);<br><br>    WideCharToMultiByte(CP_ACP, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, szWStr1, </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, szStr1, MAX_CHAR_BUFF_LEN, NULL, NULL);<br>    WideCharToMultiByte(CP_ACP, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, szWStr2, </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, szStr2, MAX_CHAR_BUFF_LEN, NULL, NULL);<br><br>    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> _stricmp(szStr1, szStr2);<br>}</span></div> 试了一下,效率q行…… <img src ="http://www.shnenglu.com/guogangj/aggbug/139943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guogangj/" target="_blank">Jiang Guogang</a> 2011-02-12 17:05 <a href="http://www.shnenglu.com/guogangj/archive/2011/02/12/139943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]谁用了我的内?-PPC RAM的缺失本?/title><link>http://www.shnenglu.com/guogangj/archive/2010/12/19/136927.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Sun, 19 Dec 2010 04:27:00 GMT</pubDate><guid>http://www.shnenglu.com/guogangj/archive/2010/12/19/136927.html</guid><wfw:comment>http://www.shnenglu.com/guogangj/comments/136927.html</wfw:comment><comments>http://www.shnenglu.com/guogangj/archive/2010/12/19/136927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/guogangj/comments/commentRss/136927.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guogangj/services/trackbacks/136927.html</trackback:ping><description><![CDATA[<p><span style="COLOR: #0000ff">博主Q关于Windows Mobile的ROM和RAM的相关问题,我也实够头大的Q虽然自qq了一些研I有了一些结论,但还是未能完全解释ؓ什么会q样Q今天偶找C文章,ȝ比较全面的描qCq些相关的细节问题,虽然对于一个Y件开发者来_不明白这些也关系不大Q但有一个比较全面的了解很明显能够帮助我们理清思\?br></span><br>转自Q?a >http://club.tech.sina.com.cn/mobile/thread-61369-1-1.html</a><br><br>|上看帖Q发现常有网友尤其新手在问:我的机器标称?28 MB 的RAMQؓ什么打开pȝ讄里的内存选项却显CȝE序内存QRAMQ只?1x MB?0x MB。机器RAM说是64 MB, 可是Z么ȝ内存昄只有5x 甚至4x MBQ?br><br>回答则是五花八门Q莫衷一是:内置软gQ后台程序,开机服务和E序Q系l缓存或~冲池,帔R内存的核心占用,pȝ占用Q甚而解释ؓLl就占用的(部分ROM占用Q?……<br><br>个别回答更ؓ武断Q谁的PPC使用中的内存加上剩余内存会等于机器所标称的内存的Q-Q所以实在没有深I的必要?br><br>话虽如此Q毕竟这个差值对不同的机器往往不同Q个别甚至相差还很大Q因而很多用户仍免不了有些心中惴惴?br><br>那么I竟哪种解释更ؓ准确呢?本文的目的就是解开一部分用户心中的这个疑惑?br><br><strong style="FONT-SIZE: 24pt">【谁用了我的内存Q?br></strong>Z么WM5/6pȝ昄的ȝ序内存(RAMQ会比标U内存总量几兆,十几兆,甚至几十兆字节的定w呢?</p> <p>产生q种疑问的根源在于WM5/6pȝ讄实际q没有显C出实际ȝRAM定wQ它所昄的只是WM操作pȝ在蝲入时及蝲入后应用E序和进E所可控?支配的内存总量Q它包括“已?#8221;QIn useQ和“闲置”(Free)两部分。其?#8220;已?#8221;部分除操作系l占用外Q还包括了硬仉动,个h信息理Q电话拨L在系l启动时自动加蝲的,用户实际没有控制权的E序。这些程序,一部分来自微YQ一部分来自讑֤刉商Q还有一部分来自Ud通讯服务商(PPC PhoneQ?/p> <p>除设|中所昄的d量外Q其余部分的内存被固定用作了其它斚w的用途而ƈ未被pȝ讄里的内存状况昄所计算在内。这是用h不能控制的ƈ且更为隐蔽的另一部分被占内存?/p> <p>q部分隐蔽的被占内存主要被用在了五个斚w?/p> <p><strong>1. ~存池(Page PoolQ?/strong></p> <p>pȝq行E序Q程序代码和代码所产生的数据都会消耗内存。对于NOR型flash ROM的设备,代码可以从ROM里直接被CPU调用执行。这U执行方式叫?#8220;立即执行”?#8220;地执行” (XIP: execute in place)。对于NAND型flash ROM的设备,E序代码必须首先被调入内存,然后再从内存里被CPU逐条执行。如果没有缓存池Q代码会首先被全部调入普通的内存里。缓存池实际上就是vC限制执行代码时占用过多内存的作用Q也是_出了缓存池定w的其余代码不会被预先调入内存Q而只有需要时再行调入?/p> <p>WM5pȝ的NAND型ROM讑֤的缓存池大小一般是4.5 MB?/p> <p><strong>2. 频协议栈(Radio StackQ?/strong></p> <p>在PPC手机中,有相当部分的代码是用于和发射基站间的通讯。在某些讑֤里,q一无线通讯模块有自qRAM和ROM。而在其它讑֤里,无线通讯模块的代码是被存储在pȝ的ROM里的。这P它或者是地执行Q或者是调入内存执行。如果是后者,那么q部分被占内存会直接从ȝ内存中划掉而不被计入系l设|里所昄的ȝ内存定w的?/p> <p>q一模块Q射频协议栈Q占用约 4 MB内存?/p> <p><strong>3. 直接存取内存区(DMA BuffersQ?/strong></p> <p>一些硬件可以不lCPU的处理和控制而自行写内存Q这叫作直接性内存读?DMA: Direct Memory AccessQ。这块内存区在系l加载前已被事先分出Q而不受CPU支配Q。这U方式的优点在于能够极高效和通常更低能耗地q行数据的传送。在早期?PPC里,q主要用在音频采集上Q通常占用内存很小。现在,它被用于视频采集Q从而也占用了大得多的内存?/p> <p>机器的生产商会根据机器在应用斚w的定位来调整q部分内存的大小。譬如如果主要用途是预设为拍照,则会需要较的DMA内存Q而如果考虑用于摄像Q则需要占用大得多的内存,而如果是视频会议的话Q所需内存会更大?/p> <p>直接存取内存区的定w?00 KB ?6 MB 不等。对于把视频采集作ؓ主要应用方向之一的机器,可能会在4 MB左右?/p> <p><strong>4. 核心区(XIP KernelQ?/strong></p> <p>操作pȝ最核心的部分需要就地执行(XIPQ的模式。对于NAND型ROM的设备,在系l加载时Q需要把q部分代码首先蝲入内存,q从q部分代码开始执行后面的d。由于系l正在运行时q无法分辨正被执行的q部分核心代码是从ROMq是RAM执行的,所以它会假设是从ROM里执行的从而把q部分内存排除在外?/p> <p>核心区占用约 1.5 ?2 MB 大小?/p> <p><strong>5. 帧缓冲区Qthe Frame Buffer)</strong></p> <p>q部分内存专门用作存储当前屏q上昄的一切信息。大多数讑֤Q每个像素占用两个字节(16-bit 65535U色彩)。所以一?20x240的QVGA屏需?50 KBQ?40x480的VGA屏需?00 KB。有时ؓ了显C性能斚w的原因,机器 会设|两个~冲区,q样׃占用1.2 MB的内存容量?/p> <p>最后来做一下加法:Page Pool (+Radio Stack)+DMA Buffer+XIP Kernel+Frame Buffer</p> <p>4.5 (+4) + 0.3 | 6 + 1.5 | 2 + 0.15 | 1.2 = 6.45 | 13.7 (10.45 | 17.7)</p> <p>所以基于NAND型ROM 的PPC里所占用的未昄内存范围?.45-13.7 MBQPPC Phone会多占用U? MB。而基于NOR型flash ROM的机器可能会减少U?.5 MB (PPC) 的内存占用。其它方面,有摄像头其更强调动态视频摄录效果的讑֤占用定w会更大,VGA昄的机器也会高一些?/p> <p>举例Q手头的HP iPAQ 21x (PPCQ?40x480 VGAQ无摄像_WM6QNAND flash ROM): 128 MB(?-121.40(昄)Q?.6 MBQ与上面的估结果相当符合。对于现在市Z一般配|的PPC手机Q基本都是基于NAND型flash ROM的设备)Q这部分未显C内存大U会占用13-15 MB的空间?/p> <p>另外Q需要说明的个例是HTC Touch DiaMond。该ƾ机器号U有192 MB DDR SDRAMQ但实际上其中的64 MB是内|于CPU中的昑֭Q供3D囑Ş昄用,有说亦用于无U模块的Q,所以对整个pȝ而言Q可资利用的有效内存仍只?28 MBQ内存利用上在图形显C方面或怼节省一?--未知Q。因此与其它128 MB RAM的类似配|的讑֤相比Q钻x的用户ƈ没有发现在可用RAM上有什么优ѝHTC Touch HD的标URAM定w也存在同L数字游戏?/p> <p>最后强调的一ҎQ在对内存的利用和分配上Q机器生产商d能会针对不同型号机器的某些组件作一定调_也M在预载应用Y件与速度及用户可利用的内存资源上作出取舍。所以即使对于具有相同操作系l和同样标称内存但不同款型的机器Q机器启动后的用户可用内存也可能会相差很大?/p> <p><span style="FONT-SIZE: 24pt"><strong>【关于Flash ROM的基本常识?/strong></span></p> <p>在性能上,RAM的读写速度非常快(诅R写速度基本相当Q,׃需要频J刷斎ͼ也非常耗电Q所以对掌上讑֤而言QRAMq完全是多多益善,q多闲置无用的RAM会耗掉大量不必要的电力Q;而ROM的读写速度相比RAM慢很多,其是写入速度更慢Q但耗电较少Q由于不需要高频刷新来l持记忆Q?br><br>所以应用上QROM主要是用以存储程序和数据Q而RAM主要用以q行E序?br><br>Flash ROM 按照实现的整个电路逻辑l构及相应存储单元擦写操作的不同分ؓNAND和NOR两种cd。NOR型提供完整的d与资料ȝQƈ允许随机存取内存上的M区域Q因而其特点是读取数据快Q但需要较长的旉q行擦写。NAND型没有随机存取外部寻址ȝQ必M区块性的方式q行d。与NOR型相比,它具有具有较快的擦写旉,但数据读取的速度较慢。NAND型ROM的每个储存单元的面积也更,q得NAND Flash相较于NOR Flashh较高的储存密度与较低的单位存储成本。同时它的可重复擦写ơ数也高出NOR Flash一个量U。所以现在所有的存储卡都是NAND型的flash ROM?br><br>NOR型ROM更类gl的ROMQ支持CPUq行字节U别的读取。而NAND型ROM则类g盘Q适合作ؓ大量数据存储介质。所以对于NOR?ROMQCPU可以q行地执行QXIPQ而省M把代码先dRAM的步骤,载入和运行代码的速度更快Qƈ可减所需的RAMI间?br><br>在实际系l中QXIP只能用于底层的(操作pȝQ代码。对于后l安装的被列入文件系l的E序Q是必须载入RAM才能够被CPU执行的?br><br>对于NOR flash ROM和XIP的关pd补充一点的是,qNOR型flash ROM都会选择XIP方式。因为对于一块flash ROM芯片不能同时q行?写操作,所以如果代码和数据都装在一个ROM上,既要XIPQ又要同时进行数据写入的话,实现上相当麻烦(因ؓ写入时无法从 ROMd代码Q所以对中断的处理会很复杂)。所以解x法或者是不用XIPQ或者是XIP代码和数据区分离在两个ROM上,或者采用比较复杂的技术来实现QIPSMQ?br><br><span style="FONT-SIZE: 24pt"><strong>【关于设备里ROM的占用情c?br></strong></span>应有的朋友的要求Q这里补充说明一下关于ROM的占用情c对于ROM占用Q由于没有黑q(除引D录和文g分配表外Q,所以情形相对简单一些?<br><br>与RAM的情冉|些类|在系l设|里QROMQ即存储内存QStorage)的d量与讑֤的标定ROM相比有一个几十兆的大~口。D例而言QHP iPAQ 210pdQWM6.0, 标定256 MB ROM, pȝ讄昄d储内存ؓ162.30 MB, 有近96 MB的差倹{但发现q解释这个差值则单明了得多。这部分pȝ讄没有昄的空间是从Y件意义上来说的真正的ROMQ只读)部分Q文件系l没有读写的权力Q是pȝ的操作系l和备䆾文g以及预装在ROM部分的程序(包括来自微YQ设备制造商以及Ud服务商,对于自制的系l还包括ROM包里的其它程序和数据Q,主要装在\windows目录下。用资源理器查看属性会发现有ROM属性,Ҏ件无法修改,也无法复ӞQ操作系l是止对ROM文g的操作的。所以操作系l在昄时把q部分干脆拿了出来,因ؓq是文gpȝ无法使用的部分。修改这部分文g的途径只有通过刷ROM来重写。硬启时讑֤也是通过q部分文件来恢复pȝ到初始状态?br><br>启后会发现存储内存的已使用部分q不?Q这是根据ROM文g恢复的,文gpȝ内可以读写的部分操作pȝ的文件。现在我们做加法。把所有设备上的存储空_除存储卡外)加v来。以手头的iPAQZQ用Resco ExplorerQ把所有目录和文g全选(包括"iPAQ File Store“Q这实际是从pȝ的flash ROM分出的一个存储卡l构Q在启时不会被hQ,LSD Card和CF CardQ如果有的话Q以及RAM Disk QRAM模拟的)?11.15 MB。系l设|里的空闲存储空间ؓ134.83 MB。ȝROM定w是Q?11.15+134.83 = 245.98 MB?br><br>q个数字接近256 MB了,但仍有约10 MB的差距?br><br>q里可以惛_的有两种解释?br><br>W一Q是由文件系l的l构Q尤其是大量文仉成的?br><br>一般写入一?个字节甚?字节的文Ӟ虽然查看发现全部文g的d节数没有增加Q但实际上这个文件已l占用了一个区Q比?12个字节的I间Q所以系l的可用I间实际已经减少?12个字节。对于大文g来讲Q这个比例会很低Q但对小文gQ这个浪费的I间比例很高Q尤其是很多文件时Q浪费的ȝI间q当可观了。这个现象在盘上尤其突出,因ؓ它的每个最的文g单位-的I间相对更大Q所以比?个字节的文gQ会占用4KB或更?fat, fat32)的有效空间?br><br>但WMpȝ的ROMQ只读)文g使用的不是一般的文g体系Q而是压羃的Ş式,x件大是多少Q就会实际占用多(关于q一点,见下一部分的说明)。这样就只能q二点来解释?br><br>W二QROM的ȝ间的小于标定容量?br><br>q里涉及到存储介质容量的单位问题。在计算机应用方面,1KB=1024字节Q而不?000, 1MB=2^20, 1GB=2^30。但是存储介质(盘Q存储卡{)的生产厂家在宣传产品Ӟh了单位,x定容量的1MB=1,000,000 字节Q而不?^20=1,048,576 字节Q?GB=1,000,000,000字节Q而不?^30=1,073,741,824字节Q从而变盔R低了成本。所以买回来的号U?0G的硬盘,计算Z昄的可用空间只?0多GB。存储卡也是如此。(?% (M为单??7%QG为单位)Q?br><br>所以对于和存储卡在物理上一致的pȝ内置ROMQ出现同L数字游戏也ƈ不新奇?br><br>另外是flash ROM的实际容量对于比如每个卡可能都不同,有一个L动范_flash ROM在生产时也会留有一定的冗余I间以备出现坏区时备用?br><br>所以考虑W二点原因,245.98 X 1.024^2= 257.93 MBQ这与标定的256 MB的ROMd量是基本d的?br><br>注:关于q部分的讨论可能有错漏,需参考更多资料核实?/p> <p><span style="FONT-SIZE: 24pt"><strong>?关于WMpȝ“\Windows”目录下的两类文g ?br></strong></span>搞清q一点,其一是ؓ上一部分关于ROMI间的分析作补充说明Q其二是Z阐明Z么通常无法对\Windowspȝ里的ROM属性的文gq行常规的文件操作,Z么对有些pȝ文gQ非ROM属性)却可以?br><br>实际上WMpȝ对内|ROM的用,的确是分成了两部分区别对待的。其一是文ӞFilesQ部分,其二是模?Modules)部分?br><br>文g部分与磁盘、存储卡{用来存放文件的存储I间的性质和文件结构是一cȝQ原则上用户h完全的读写权力。操作系l里所有图片及多媒体文仉被存攑֜q一部分。这也是Z么我们可以随意更换桌面图片-Q尽桌面图片文件也是属于操作系l自带的文g之一。一些程序也是以通常的(可执行)文g形式存放在这部分的,所以也会发现对某些“\Windows“的可执行文g我们也可以随意处|。(<span style="COLOR: #ff0000">博主Q假如我删除了这cLӞ在硬重置的时候它们会被恢复么Q如果会Q那如何解释Q?/span>Q?br><br>对于W二部分的文Ӟ则用常规的方法来q行操作一般都是无能ؓ力的。查看属性就会发现这cL仉标有一?#8220;ROM”属性,而且无法更改。实际上Q这部分E序文g在被刷入flash ROM前,是经q了特别处理的。大多数文g的文件头已被截去Q文件代码和数据在ROM里的存放地址也是完全固定的。所以从存放的Ş式来_q些E序是可以直接被q行而不必先被调入RAM的。即便不需要XIPQ这U存储Ş式也提高了代码蝲入、执行的效率。另外,q些文g本n变小了,而且不同文g能够以更紧凑的Ş式存攑֜q个部分Q从而节省了ROMI间?br><br>存放的Ş式也军_了即使可以把ROM属性的E序文g拯出来Q有工具可以做到Q,也无法立即用它们-Q必d利用工具重新生成一个正常文Ӟ加上文g_Q同时还要考虑到有些程序可能针对特定的讑֤q行q代码的优化与压~-Q这军_了这不是一件直截了当,总能成功的活ѝ?所以通常制作的新ROML非常依赖于特定机型的?/p> <img src ="http://www.shnenglu.com/guogangj/aggbug/136927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guogangj/" target="_blank">Jiang Guogang</a> 2010-12-19 12:27 <a href="http://www.shnenglu.com/guogangj/archive/2010/12/19/136927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WM_SIZE在WM_CREATE之前Q?/title><link>http://www.shnenglu.com/guogangj/archive/2010/10/21/130733.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Thu, 21 Oct 2010 05:01:00 GMT</pubDate><guid>http://www.shnenglu.com/guogangj/archive/2010/10/21/130733.html</guid><wfw:comment>http://www.shnenglu.com/guogangj/comments/130733.html</wfw:comment><comments>http://www.shnenglu.com/guogangj/archive/2010/10/21/130733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/guogangj/comments/commentRss/130733.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guogangj/services/trackbacks/130733.html</trackback:ping><description><![CDATA[我一直认为创Z个窗口的时候,H口处理q程处理WM_CREATE是在处理WM_SIZE之前的,所以很多初始化的东襉K攑֜WM_CREATE处来做,但最q弄一个程序发现到了WM_SIZE处出错,原因是空指针Q而这个指针应该是在WM_CREATE的时候被赋值的Q奇怪了Q难道WM_SIZE会在WM_CREATE之前Q于是设两个断点Q不看不知道Q一看还真的如此Q如下图Q?br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/size_before_create_1.png" width=684 height=291><br>E序每次L先触到WM_SIZE的这个断点,N我理解一直有误?于是我创Z一个hello worldE序Q调试了半天Q又发觉没有q个问题QWM_CREATEL在WM_SIZE之前Q我试在别处重现问题,无果……现在Q你再仔l看一下上图,你发现问题了么?<br><br>我想l过我这么提C,你应该知道了Q原因就是WM_CREATEq个断点前一行的SetWindowLongq个调用Q这个调用会引v一个WM_SIZE事gQ所以这制造了WM_SIZE在WM_CREATE之前q个假象。处理这个问题很单,把SetWindowLongq行拿掉Q然后把WS_NONAVDONEBUTTONq个属性交lCreateWindowQ如下图Q?br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/size_before_create_2.png" width=835 height=140><br>q样好了,我想Z提个问题Q我在设计一个程序的时候,也碰C“布局”?#8220;加蝲”的先后问题,因ؓ布局可能需要重新调整加载的资源Q而加载资源又需要参考布局的尺寸,׃功能上的原因Q我必须把两者分开Q所以存在我前面说的q个先鸡先蛋的难题。最后我是这么弄的,做一?#8220;资源是否已经加蝲”的标志,然后L?#8220;布局”Q布局的时候检查这个标志,如果没有资源的加载,那就只更改尺寸参数而不调整资源Q这Lh没什么问题了Q从逻辑上来说我的设计确实是WM_SIZE优先于WM_CREATE……<br><br>Ƣ迎对这些方面的设计问题留言讨论? <img src ="http://www.shnenglu.com/guogangj/aggbug/130733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guogangj/" target="_blank">Jiang Guogang</a> 2010-10-21 13:01 <a href="http://www.shnenglu.com/guogangj/archive/2010/10/21/130733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让窗口“最大化”显C?/title><link>http://www.shnenglu.com/guogangj/archive/2010/08/20/124098.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Fri, 20 Aug 2010 07:24:00 GMT</pubDate><guid>http://www.shnenglu.com/guogangj/archive/2010/08/20/124098.html</guid><wfw:comment>http://www.shnenglu.com/guogangj/comments/124098.html</wfw:comment><comments>http://www.shnenglu.com/guogangj/archive/2010/08/20/124098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/guogangj/comments/commentRss/124098.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guogangj/services/trackbacks/124098.html</trackback:ping><description><![CDATA[<p>闲话不说了,q是一U可能有问题的做法:</p> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> cap </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetSystemMetrics(SM_CYCAPTION);<br>    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> wid </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetSystemMetrics(SM_CXSCREEN);<br>    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> hei </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetSystemMetrics(SM_CYSCREEN);<br><br>    hWnd </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CreateWindow(szWindowClass, szTitle, WS_NONAVDONEBUTTON</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">WS_VISIBLE</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">WS_POPUP,<br>        </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, cap, wid, hei</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">cap, NULL, NULL, hInstance, NULL);</span></div> q才是比较地道的做法Q?br> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">    RECT rectWorkArea;<br>    SystemParametersInfo(SPI_GETWORKAREA, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, (PVOID)</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">rectWorkArea, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><br>    hWnd </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CreateWindow(szWindowClass, TEXT(</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">), WS_NONAVDONEBUTTON</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">WS_VISIBLE</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">WS_POPUP,<br>        rectWorkArea.left, rectWorkArea.top, rectWorkArea.right</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">rectWorkArea.left,<br>        rectWorkArea.bottom</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">rectWorkArea.top, NULL, NULL, hInstance, NULL);</span></div> 两种创徏出来的窗口的高度可能相差几个像素Q前一U方法可能导致窗口在创徏完之后,有一ơ莫名其妙的WM_SIZE消息产生Q有些东西啊Q懂是懂,不懂是不懂……想也想不出来? <img src ="http://www.shnenglu.com/guogangj/aggbug/124098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guogangj/" target="_blank">Jiang Guogang</a> 2010-08-20 15:24 <a href="http://www.shnenglu.com/guogangj/archive/2010/08/20/124098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows Mobile锁屏软g的初U实?/title><link>http://www.shnenglu.com/guogangj/archive/2010/08/09/122733.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Mon, 09 Aug 2010 02:13:00 GMT</pubDate><guid>http://www.shnenglu.com/guogangj/archive/2010/08/09/122733.html</guid><wfw:comment>http://www.shnenglu.com/guogangj/comments/122733.html</wfw:comment><comments>http://www.shnenglu.com/guogangj/archive/2010/08/09/122733.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/guogangj/comments/commentRss/122733.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guogangj/services/trackbacks/122733.html</trackback:ping><description><![CDATA[锁屏q不是一个很隄功能Q初步想了一下觉得这P其实未必……本文是我琢磨了好几天下来的成果,而且只是“初”的,对Windows Mobile不够熟,没h辅导Q真是篏啊?br><br>先给读者些感性认识,q是我手ZWindows Mobile 6.1默认的锁屏程序:<br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/lockscreen1_1.png" width=320 height=320><br>虽然说是锁屏Q其实是q键盘一块儿锁了Q真正的英文名称是叫“Lock Device”的,锁设备。锁了之后,你碰一键盘上其它按键Q大致就q样昄Q?br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/lockscreen1_2.png" width=320 height=320><br>表示你要l箋使用讑֤的话Q得?#8220;解锁”?br>从按键盘按键讑֤q有反应q点上看Q所谓锁屏其实ƈ没有真正屏蔽掉所有按键,只是对这些按键进行了一些别的处理而已?br><br>但无疑这个锁屏太土了Q很多h不喜Ƣ,所以才有了别的锁屏软gQ比如下面这个叫S2U2Q这是个免费软gQ好评率q蛮高的Q这是它默认的锁屏界面,其实界面q是可以定制的,可以弄得很漂亮:<br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/lockscreen1_3.png" width=320 height=320><br>q个软g?#8220;锁屏”方式跟系l默认的有所不同了,它貌似屏蔽了所有的键盘按键Q只能通过滑动屏幕上的那个滑块来解锁?br>现在接下来找个Windows Mobile 6.5的手机看看?br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/lockscreen1_4.png" width=240 height=320><br>更好看一些,我稍微研I了一?.5的锁屏,其实也ƈ非屏蔽所有按键,你可以这么试验一下:隐藏所有窗口,?#8220;今日”下锁屏,然后按一下绿色的电话键,然后解锁。你׃发觉屏幕昄的不?#8220;今日”Q而是拨号面板Q说明电话键q是起作用了Q但我尝试下来挂机键却没起作用?br>如果上面q些问题你都不认为是什么问题,那么处理来电消息的问题呢Q有没想q。默认情况下Q电话一来,pȝ会弹出消息框Q键盘自动解锁,但这很容易引赯操作Q所以我看见HTC的锁屏就很好地处理了q个问题Q它需要用户在屏幕上划一下,才解锁,虽然有的用户会嫌ȝQ但我想L误接听好吧?<br><br>现在你认识到了吧Q?#8220;?#8221;Q不是简单的锁而已?br><br>前面是不是说得有点多了,所以本文显得有些头重脚轻,因ؓ我目前实现的只有“初”Q所以内容还不是很多?br><br>首先是锁键盘Q锁屏时候屏蔽所有按键,q个可以用钩子,关于Windows Mobile上的钩子Q网上文章有不少Q但你看完后发觉都是抄来抄去的,烦都烦死Q原作我找了一下,很可能(不是100%Q是来自q里Q?a >http://www.codeproject.com/KB/windows/wincekbhook.aspx</a>Q而且Q目前只能设|WH_KEYBOARD_LLcd的钩子,WH_KEYBOARD_LL被define?0Q这个跟Windowspȝq不一P不过也不能怪MicrosoftQ因为hook在Windows Mobile中本来就是undefined的,不推荐用。而且我在使用钩子的过E中遇到了问题,是钩子Ҏ的手机Samsung i780完全无效Q(而模拟器q有另外两台多普辄机器是没问题的)当然了,安装钩子的时候我查看q返回|都是正常的,只是hook不到M键盘消息Q我的手Z出现了这U情况,q也意味着别的手机也可能出现?br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/lockscreen1_5.png" width=286 height=374><br>折腾了许久之后,Q我q尝试了另外好几U方法,但都不理惻I我终于找C解决ҎQ那是从GAPI中分d来的一个APIQAllKeysQ在本地的MSDN中是找不到这个函数的Q但通过在线的MSDN很快p扑ֈq个函数的说明,用v来十分十分简单,完全能达到我的功能要求,而且Ҏ的Samsung i780是有效的Q?br><br>键盘解决了,然后是来电处理,来电时候我目前的处理跟pȝ默认的一P一来电Q就立即自动解锁键盘Qƈ且显C电话拨号面板,电话l束后再自动锁上Q这样做虽然不是很好Q但臛_可以接受。那p处理来电和挂断消息了Q一开始打用TAPIQ网上很多h也都q么说的Q但TAPI非常复杂Q功能很强大Q而我需要的仅仅是得到通知q么一个功能,有点牛刀杀鸡的感觉Q而TAPIq有个问题,是貌似它具?#8220;独占?#8221;Q我的程序一旦占据了电话Q别的程序要用电话就可能有问题了Q这个我没深入研I?br><br>最后我采用的方法是注册pȝ通知消息QRegistryNotifyWindowQ现在把关键代码贴出来:<br> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> WM_USER_TELEPHONE_STATE  (WM_USER+1086)</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WM_CREATE<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Register the notification for monitoring the telephone state.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">RegistryNotifyWindow(SN_PHONEINCOMINGCALL_ROOT, </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">defined in snapi.h</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">    SN_PHONEINCOMINGCALL_PATH, SN_PHONEINCOMINGCALL_VALUE, hWnd,  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">handle to our window to receive msg</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">    WM_USER_TELEPHONE_STATE, </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">app defined message to send</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">    NULL, </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">app defined value</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">    NULL, </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">g_hregNotifyPhone);<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><img src="http://www.shnenglu.com/Images/dot.gif"><img src="http://www.shnenglu.com/Images/dot.gif"><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Phone state changed!</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> WM_USER_TELEPHONE_STATE:<br>    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> ((wParam</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">SN_PHONEINCOMINGCALL_BITMASK)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">SN_PHONEINCOMINGCALL_BITMASK<br>        </span><span style="COLOR: #000000">||</span><span style="COLOR: #000000"> (wParam</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">SN_PHONECALLTALKING_BITMASK)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">SN_PHONECALLTALKING_BITMASK)<br>    {<br>        AllKeys(FALSE);<br>        ShowWindow(hWnd, SW_HIDE);<br>    }<br>    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>    {</span><span style="COLOR: #000000"><br>        AllKeys(TRUE);<br>        ShowWindow(hWnd, SW_SHOW);<br>        SHFullScreen(hWnd, SHFS_HIDETASKBAR</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">SHFS_HIDESIPBUTTON);<br>        SetForegroundWindow(hWnd);<br>    }<br>    </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;</span></div> <br>代码看v来简单,我却研究了许?#8230;…q样实现的功能就是来甉|候锁屏窗口隐藏,解锁键盘Q让pȝ默认E序接管Q电话结束时候重新show出窗口,l箋锁屏。其余细节代码就不脓了,虽然l节q有很多Q但大致p些,要真正弄HTC那样的锁屏,q有很多要研I的。下ơ有Z我再写吧Q当然前提是我已l研I出来之后?br> <img src ="http://www.shnenglu.com/guogangj/aggbug/122733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guogangj/" target="_blank">Jiang Guogang</a> 2010-08-09 10:13 <a href="http://www.shnenglu.com/guogangj/archive/2010/08/09/122733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows MobileE序全屏与非全屏http://www.shnenglu.com/guogangj/archive/2010/08/03/122035.htmlJiang GuogangJiang GuogangTue, 03 Aug 2010 02:09:00 GMThttp://www.shnenglu.com/guogangj/archive/2010/08/03/122035.htmlhttp://www.shnenglu.com/guogangj/comments/122035.htmlhttp://www.shnenglu.com/guogangj/archive/2010/08/03/122035.html#Feedback1http://www.shnenglu.com/guogangj/comments/commentRss/122035.htmlhttp://www.shnenglu.com/guogangj/services/trackbacks/122035.html
所谓全屏,也就是让应用E序H口占满整个屏幕QQ务栏不显C,菜单栏不昄Q另外顺便在q里普及下知识,什么叫d栏(Task BarQ,什么叫菜单栏(Menu BarQ,什么是开始图标(Start IconQ,什么是软输入法按钮QSIP ButtonQ。直接看图:

通过上图Q我惛_家也都了解怎么回事了,真是长篇大论不如一张小图。Q务栏你可以理解ؓWindows Mobile的一部分Q跟Windows的Q务栏一P是一直存在的Q开始图标就处于d栏的左边Q跟Windows不一L是Windows Mobile的Q务栏一般处于屏q顶端;而菜单栏则跟Windows的菜单也有点像,它属于应用程序的一部分Q当应用E序不创建它的时候,它就是不存在的,当然了,它和Windows的菜单一Pq不包含在窗口客户区内?br>
知道q个之后Q那我们的工作就比较明确了:W一Q不要创单栏Q第二:隐藏掉Q务栏或者把d栏放在我们的H口的下面。当然了Q还要把H口调整为屏q大。就q么多了。相应的API为SHFullScreenQ看一下MSDNQ貌似很单,OKQ直接在WM_CREATE中加入SHFullScreen(SHFS_HIDETASKBAR)如何Q?br>
l果没有反应Q再仔细看看MSDN的说明,对于SHFS_HIDETASKBAR参数有以下描qͼIt is the responsibility of the application to make sure it is sized FULL SCREEN before using this flag. Otherwise, it will appear as though the function did nothing。注?#8220;before”q个词,看来我们要在掉SHFullScreen之前窗口位|及大小调整为全屏。代码:
RECT rectFullScreen; 
SetRect(
&rectFullScreen, 00, GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
SetWindowPos(hWnd, 
0, rectFullScreen.left, rectFullScreen.top, rectFullScreen.right-rectFullScreen.left, rectFullScreen.bottom-rectFullScreen.top,SWP_NOZORDER);
SHFullScreen(hWnd, SHFS_HIDETASKBAR);
q样p够全屏了Q但q不够,Z么?也许你注意到软输入法按钮q没有被隐藏掉,你再试试看再打开一个程序,然后回到你的全屏E序去,q时候你发觉全屏变成了非全屏了,如图Q?br>
所以我们还得做些事情,我直接给Z码:
case WM_ACTIVATE:
    
//Try to hide the boring SIP button.
    {
        DWORD dwHideOption 
= SHFS_HIDESIPBUTTON;
        
if(g_bFullScreenState)
            dwHideOption 
|= (SHFS_HIDETASKBAR);
        
if(wParam==WA_ACTIVE || wParam==WA_CLICKACTIVE)
            SHFullScreen(hWnd, dwHideOption);
    }
    
// Notify shell of our activate message
    SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE);
    
break;
其中?#8220;g_bFullScreenState”是程序记录是否全屏状态的一个布型变量Q然后你再试试,我不切在你机器上是否OKQ但在我q里试?.0?.5的机器,都是没问题的Q你把程序切来切去都是可以保证看到它全屏的,而且全屏与非全屏间还可以自由切换。这是我写的demo的截图:


Jiang Guogang 2010-08-03 10:09 发表评论
]]>
C下,老是忘:如何生成map文ghttp://www.shnenglu.com/guogangj/archive/2010/07/27/121390.htmlJiang GuogangJiang GuogangTue, 27 Jul 2010 04:48:00 GMThttp://www.shnenglu.com/guogangj/archive/2010/07/27/121390.htmlhttp://www.shnenglu.com/guogangj/comments/121390.htmlhttp://www.shnenglu.com/guogangj/archive/2010/07/27/121390.html#Feedback0http://www.shnenglu.com/guogangj/comments/commentRss/121390.htmlhttp://www.shnenglu.com/guogangj/services/trackbacks/121390.html

Jiang Guogang 2010-07-27 12:48 发表评论
]]>
按挂机键Q程序窗口不隐藏http://www.shnenglu.com/guogangj/archive/2010/07/14/120332.htmlJiang GuogangJiang GuogangWed, 14 Jul 2010 07:09:00 GMThttp://www.shnenglu.com/guogangj/archive/2010/07/14/120332.htmlhttp://www.shnenglu.com/guogangj/comments/120332.htmlhttp://www.shnenglu.com/guogangj/archive/2010/07/14/120332.html#Feedback0http://www.shnenglu.com/guogangj/comments/commentRss/120332.htmlhttp://www.shnenglu.com/guogangj/services/trackbacks/120332.html用过Windows Mobile的h都知道,一般情况下Q按下挂机键Q就是挂电话那个按键Q通常是红色的Q,q当于Windows XP中点了那?#8220;昄桌面”的图标,所有窗口都最化Q桌面显C出来了QWindows Mobile中的“今日”QTodayQ就相当于Windows的桌面,按挂机键Q?#8220;今日”显C出来了Q别的窗口都隐藏Q最化Q?br>
q个效果我是x仿一个叫Spb Home的桌面美化程序,用过Spb Home的都很清楚这是怎样一个效果?br>
那我现在有这么个需求,我希望我的程序不被挂机键隐藏Q也是说希望我的程序取?#8220;今日”Q在别的H口都被隐藏或关闭的时候,我的E序H口依旧昄。下面是我的思\轨迹Q?br>
做Windows~程n的我首先惛_WM_SHOWWINDOW消息Q我E序的主H口被最化的时候应该能够收到这个消息,我只要对q个消息q行相关处理卛_Q但令我感到意外的是Windows Mobileg没有q个消息Q到|上searchQ没有答案,U闷……

没有WM_SHOWWINDOWQ终归有别的吧?于是我用Windows CE Remote Spy观察一个窗口在按下挂机键时候接收到的消息,分析了多U情况后Q我发现有一个消息确实是按下挂机键时候能接收到的Q但q个消息没有在MSDN中被提及Q我只知道它的gؓ0xC005?br>


响应q个消息Q每ơ收到的时候调用一下SetForegroundWindow()Q这么一来,果然奏效了!但问题来了,每次按挂机键的时候,屏幕总要闪一下,Z么?原因是我的H口收到0xC005消息的时候,它已l被隐藏了,我重新把它show出来当然要闪一下,q个效果q不理想?br>
l箋惛_法,那能不能通过钩子来重定义挂机键的动作呢?后来x不妥Q因为我q不是要屏蔽或者修Ҏ机键的功能,我只是不惌我的H口被它隐藏而已Q况且钩子是undocumented的东西,恐怕不太好?br>
再思考,如果挂机键的功能是被默认地定义为隐藏所有窗口,那我如何L它呢Q这是不太可能的吧?所以我x惛_q是惛_Spb Home了,看看Spb Home的窗口究竟有什么不同,l果q真的有了新发现Q问题也因此得解。大家看Q?br>
看窗口风D个|0x90010000Q跟我的E序最大的不同是:首bit?Q第一个bit是什么意思呢Q是WS_POPUPQ于是我有样学样Q在我的H口上加上WS_POPUP属性,OK了!WS_POPUPH口不会自动最大化昄Q我们要指定它的昄位置和大,q是跟overlapped window的不同,关于popupQoverlappedq些东西Q我有另一比较完整的文章来阐q的Q地址是:http://blog.csdn.net/guogangj/archive/2008/12/06/3460267.aspx

问题l于解决了,没想到处理v来这么简单,但知道这么弄Q却让我研究了好久?br>

Jiang Guogang 2010-07-14 15:09 发表评论
]]>
core error unable to track?http://www.shnenglu.com/guogangj/archive/2010/07/14/120322.htmlJiang GuogangJiang GuogangWed, 14 Jul 2010 05:51:00 GMThttp://www.shnenglu.com/guogangj/archive/2010/07/14/120322.htmlhttp://www.shnenglu.com/guogangj/comments/120322.htmlhttp://www.shnenglu.com/guogangj/archive/2010/07/14/120322.html#Feedback1http://www.shnenglu.com/guogangj/comments/commentRss/120322.htmlhttp://www.shnenglu.com/guogangj/services/trackbacks/120322.html一Q能够定位出错的大概位置?br>二,错误能够被重现?br>但,如果出错几率极低Q不知道怎么重现Q那我就没辙了。前D|间我的程序就遇到q么个问题:

RaiseException: Thread=85e6b8fc Proc=803dbc00 'SetupDemo.exe'
AKY=00000401 PC=03fad178(coredll.dll+0x00063178) RA=80009e54(NK.EXE+0x00008e54) BVA=00000000 FSR=00000000

从出错提CZ看,?coredll.dll+0x00063178)q个位置的问题,但coredll.dllҎ没有代码Q也不知道我的程序是从什么地方进入到q个出错的地方的Q更p糕的是——我没法重现q个错误Q它出现概率很低Q我完全不知道什么时候它会蹦出来?br>
今天q气比较好,我居然找到出错地方了Q根本不是什么coredll.dll的代码有问题Q说了你都觉得好W,q是一个典型的除零错误Q只不过出现概率很低。后来我另写了一个程序,故意执行了一个除雉误,l果也是出现cM的错误提C:

RaiseException: Thread=96d18a40 Proc=80096b80 'ZeroDivisor.exe'
AKY=00000401 PC=03fb09f8(coredll.dll+0x000629f8) RA=88037538(NK.EXE+0x00007538) BVA=00000000 FSR=00000000

我就U闷着Z么调试器不会停在出错的地方,以便我发现这个错误呢Q?br>
l验l验Q有时候我觉得我们开发者像艺术Ӟ有时候我却觉得像侦探……

Jiang Guogang 2010-07-14 13:51 发表评论
]]>
Windows Mobile模拟器上|设|?/title><link>http://www.shnenglu.com/guogangj/archive/2010/07/12/120127.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Mon, 12 Jul 2010 08:33:00 GMT</pubDate><guid>http://www.shnenglu.com/guogangj/archive/2010/07/12/120127.html</guid><wfw:comment>http://www.shnenglu.com/guogangj/comments/120127.html</wfw:comment><comments>http://www.shnenglu.com/guogangj/archive/2010/07/12/120127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/guogangj/comments/commentRss/120127.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guogangj/services/trackbacks/120127.html</trackback:ping><description><![CDATA[<p style="FONT-FAMILY: 宋体">有时候我们需要用Windows Mobile模拟器测试一些网l应用,需要用模拟器上|。一开始我是准备在模拟器的configuration中设|的Q如图:<br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/wm_simulator_online_5.png" width=528 height=407><br>但后来发觉比较复杂,又遇C别的问题Q一直没搞好Q很是郁P我想用VMWare架设的虚拟机都能直接桥接C机,那Windows Mobile模拟器应该也有这个功能吧Q经q一番折腾,l于搞定了,Ҏ如下Q?br><br>启动“Windows Mobile 讑֤中心”QWindows Mobile Device CenterQ,以前都叫ActiveSync的,后来CWindows Vista把名称换成q个了(q个我不是很定Q,所以现在我们新的系l,Windows Vista和Windows 7装的是q个玩意儿了。如果你的机器上没有的话到Microsoft的网站下一个,搜烦一下很快能扑ֈ的,但我不太怿你的机器上没装,因ؓVisual Studio 2008调试Windows Mobile的时候需要这个玩意儿。启动之Q?br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/wm_simulator_online_2.png" width=404 height=496><br>讑֤中心启动后如下图那样讄Q特别注意一下,允许q接C下Q一端口选择“DMA”Q否则下面可能行不通:<br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/wm_simulator_online_3.png" width=834 height=602><br>然后启动Device Emulator Manager。(q里讲点题外话,Emulator是仿真器的意思,而我们常说的模拟器对应的英文单词是SimulatorQ两者其实是有点差别的,感兴的话去搜烦引擎查查Q?br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/wm_simulator_online_4.png" width=406 height=496><br>选择你要使用的模拟器QConnect。我q里选择的是WM6 Pro VGA?br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/wm_simulator_online_6.png" width=503 height=442><br>q接好之后,在同L地方选择CradleQ意思是把它安装到底座?br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/wm_simulator_online_7.png" width=503 height=442><br>q时候Windows Mobile讑֤中心的主界面出现Q选择“不设|设备就q行q接”?br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/wm_simulator_online_9.png" width=718 height=483><br>q个时候回头看模拟器,其界面下方出C个小图标Q表C和电脑q接h了?br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/wm_simulator_online_10.png" width=480 height=640><br>q个时候就可以上网了?/p> <img src ="http://www.shnenglu.com/guogangj/aggbug/120127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guogangj/" target="_blank">Jiang Guogang</a> 2010-07-12 16:33 <a href="http://www.shnenglu.com/guogangj/archive/2010/07/12/120127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows Mobile的高效脓?/title><link>http://www.shnenglu.com/guogangj/archive/2010/06/20/118316.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Sun, 20 Jun 2010 12:04:00 GMT</pubDate><guid>http://www.shnenglu.com/guogangj/archive/2010/06/20/118316.html</guid><wfw:comment>http://www.shnenglu.com/guogangj/comments/118316.html</wfw:comment><comments>http://www.shnenglu.com/guogangj/archive/2010/06/20/118316.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.shnenglu.com/guogangj/comments/commentRss/118316.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guogangj/services/trackbacks/118316.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">位图q个概念对于计算机图形学来说是个臛_重要的概念,我们在屏q上看到的Q何东西,对计机来说Q其实都是位图,单地_无论你是xC文字,q是U条Q抑或bmpQpngQjpg和gif{图像文Ӟ最l都是要直接或间接{变ؓ计算机显C备所认识的位图,才能昄在屏q上?br><br>我最q接手了一个项目,是Windows Mobileq_的,主要做UI化Q脓图是其中的一大块Q我遇到的最大的问题是贴图的效率问题,如何一张内存里的图片高效绘制出来,实现qx畅的UI动画效果。我试了许多办法,甚至DirectDrawQ但我发觉在g不支持的情况下,DirectDraw除了让代码变得更复杂之外Q没有Q何优炏V好Q接下去我们来分析一下如何尽量发挥GDI的威力?br><br>跟脓囄关的函数有几个:<br><strong style="COLOR: #0000ff">BitBlt</strong>Q最基本的块传输函数?br><strong style="COLOR: #0000ff">StretchBlt</strong>Q比同BitBltQ它支持囑փ的拉伸和压羃Q当不需要拉伸和压羃时候,它的效果和BitBltq无二致?br><strong style="COLOR: #0000ff">TransparentBlt</strong>Q比同StretchBltQ它多了?#8220;抠色”QColor KeyingQ功能,能把某种颜色或者某个范围的颜色抠去而不作块传输处理Q以此来l制不规则图像?br><strong style="COLOR: #0000ff">AlphaBlend</strong>Q比同StretchBltQ它支持Alpha混合Q即“半透明”效果Q效果比单的“抠色”更好?br><br>q几个函数是一个比一个强Q但也意味着效率一个比一个低QM上看差不多是q样的,q算量越大,当然p慢,但测试下来发觉这其实q不l对Q后面会提到?br><br>了解了这几个函数之后Q我们开始加载一张图片来观察效果Q我准备的是一?20*320的png囄Q利用Windows Mobile 6.0提供的IImage接口来加载它Qƈ把它转变Z图,获得HBITMAP。加载png的代码可以通过搜烦引擎搜烦“IImage用法”{关键词来获取,此处略过?br><br>加蝲好图片后Q创Z个和讑֤昄讑֤兼容的DCQDevice ContextQ,选入上面加蝲的位图,用BitBltl制Q代码如下(为简zv见,只脓出关键代码,q且不考虑资源释放Q:<br> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">HDC hWndDC </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetDC(hWnd);<br>HDC hMemDC </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CreateCompatibleDC(hWndDC);<br>SelectObject(hMemDC, hBitmap); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">hBitmap是前面加载的囄</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">BitBlt(hWndDC, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, iWidth, iHeight, hMemDC, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, SRCCOPY);</span></div> <br>我们通过d一些debug代码来观察BitBlt的执行时_在我的模拟器上大U是50 - 60msQ我发觉q个速度q不快,按道理说QBitBlt应该可以在极短的旉之内完成的(1 - 2msQ,也只有这h能实?#8220;畅”的UI动画效果Q否则图一旦多hQ岂不是更慢?br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/wm_paint_paint_time.PNG" width=623 height=629><br><br>我尝试修改BitBlt的最后一个参敎ͼ我发觉换成NOTSRCCOPYQ速度更慢Q变成了70多msQ说明运量更大了,q不是简单的内存拯Q而当我把最后一个参数换成BLACKNESS或者WHITENESS的时候,速度则很快,1ms-2ms卛_完成Q很昄Q对BitBlt来说Q把目标全部|ؓ黑色或者白Ԍq算量远于像素传送。在实验的时候把BitBlt替换为另外的几个函数Q效果和预期的相差不大,如果囑փ需要拉伸,则执行得更慢一些,但如果图像不是拉伸,而是压羃Q即~小昄Q执行速度居然比较快,有些意外Q这是因为压~后囑փ变小Q需要传输的像素变少的缘故?br><br>我考虑如何提高l图效率Q经q很多次试Q终于有所H破Q我最后发玎ͼ如果先把位图存放在一个和DC兼容的位图中Q再用这个位囑֯目标讑֤q行像素传输Q速度十分理想。代码:<br> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">HDC hWndDC </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetDC(hWnd);<br>HDC hMemDC </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CreateCompatibleDC(hWndDC);<br>HDC hMemDCToLoad </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CreateCompatibleDC(hWndDC);<br>HBITMAP hMemBmp </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CreateCompatibleBitmap(hWndDC, iWidth, iHeight); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> The compatible bitmap</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">HGDIOBJ hOldBmp </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> SelectObject(hMemDC, hMemBmp);<br>SelectObject(hMemDCToLoad, hBitmap);<br>BitBlt(hMemDC, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, iWidth, iHeight, hMemDCToLoad, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, SRCCOPY); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Do this in initialization</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">BitBlt(hWndDC, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, iWidth, iHeight, hMemDC, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, SRCCOPY); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">This BitBlt's speed is very fast</span></div> <br>W一ơ调用BitBltQ可以看作是初始化,我们计算W二个BitBlt的耗时Q只? - 2msQ非怸错,l过分析Q我认ؓ原因应该是这P不一定全对,如有不妥误者指出)Q?br><br>只有在位图格式完全一致的情况下,BitBlt才能执行真正的内存拷贝,否则是要l过转换的,转换是需要消耗CPU旉的,所以慢?br><br>那如何知道位囄格式呢?用GetObject可以看出来:<br><img border=0 alt="" src="http://www.shnenglu.com/images/cppblog_com/guogangj/wm_paint_bmp_format.PNG" width=551 height=302><br>如上图所C,bmp是从png文g加蝲q来的位囄信息Q而bmp2是用CreateCompatibleBitmap创徏的位囄信息Q从q我们能看到Q前者是24bit位图Q即一个像素用3个字节表C,而后者是16bit位图Q一个像素用两个字节来表C,q个BitBlt执行q程中,需要{换了Q因此耗时。而实际上位图的差别可能比q个q要复杂些,如果再讨备无关位图,那就说不完了……<br><br>总而言之,Z提高效率Q我们要x设法把加载进来的位图转变备兼容位图,l制的时候直接BitBltq些讑֤兼容位图Q来实现位图的高效绘制?br><br>前面讨论的主要是BitBltQ那对于别的几个Blt函数呢?我都试q了Q除了AlphaBlend之外Q兼容位囑ֈ讑֤的Blt速度上都有显著的提高Q而AlphaBlend则无法正常工作,因ؓ兼容位图不带Alpha通道Q而AlphaBlend貌似需?2bit的ARGB格式的位图方可正常工作,q个问题我思考了好久都无解,如果哪位读者对提高AlphaBlend的工作效率有心得Q不妨跟我联pMQ我正急需q方面的技术资料?br><br>因此Q我l出q样的结论,阶段性结论:从文Ӟ或资源)加蝲位图后,把位图{备兼容位图,q样使得BitBlt在执行SRCCOPY的时候直接用内存拷贝,速度很快Q即侉K要拉伸压~或者抠色等q算Q用兼容位囄速度也是相当不错的,而用AlphaBlend的时候,如果需要较高的效率Q就应从设计上避免绘制大q位图,改用幅位图Q在不必要对每一帧都执行Alpha混合的时候,避免执行,以免影响画面的流畅性?br></span> <img src ="http://www.shnenglu.com/guogangj/aggbug/118316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guogangj/" target="_blank">Jiang Guogang</a> 2010-06-20 20:04 <a href="http://www.shnenglu.com/guogangj/archive/2010/06/20/118316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>屏幕分L?/title><link>http://www.shnenglu.com/guogangj/archive/2010/06/03/117096.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Thu, 03 Jun 2010 05:16:00 GMT</pubDate><guid>http://www.shnenglu.com/guogangj/archive/2010/06/03/117096.html</guid><wfw:comment>http://www.shnenglu.com/guogangj/comments/117096.html</wfw:comment><comments>http://www.shnenglu.com/guogangj/archive/2010/06/03/117096.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/guogangj/comments/commentRss/117096.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guogangj/services/trackbacks/117096.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: 宋体">q日ȝ典著《WindowsE序设计》,作者提起到“分L?#8221;QResolutionQ一词时候,指出q个词其实是有两U含义的Q一U就是我们广为熟悉的U|像素数目表示法,另一U就是DPIQDPI在打印机和扫描A领域更常用?br><br>先说U|像素数目表示法,我想我们都不会陌生,640*480Q这是VGA的分辨率Q?00*600Q这?5寸CRT常用分L率,1024*768Q这?7寸CRT常用分L率,1280*1024Q这?7寸和19寸LCD额定分L率,而目前主的24?6:10的LCD的额定分辨率则是1920*1200?br><br>对于DPIQ我们可能相寚w生一点,其实DPI是像素每英寸,Z么是英寸而不是厘cIq是因ؓ发明计算机的老美使用的长度计量单位是英制的,据我所知好像就c_和英国l用英制了吧Q别的都换成公制了,其实也不难换Q?英寸{于2.54厘米。横向分辨率?6DPI的显C器Q在横向?.54厘米里,有96个像素,可以q么_假如你有一?00*100像素的小囄Q在96DPI的显C器上(Z方便赯Q假讄横DPI都一P应该昄?.65*2.65厘米Q在128DPI的显C器上,应该昄?.98*1.98厘米Q图片看h在高DPI昄器上昄得更了。那?7寸和19寸的LCD昄器都?280*1024的,17寸LCD的DPI是否高于19寸LCD的呢Q理Z应该说是的,但我们的操作pȝ往往不管q些Q都默认?6DPIQ因为就DPI有差距,通常也差别不大,q差别大,用户难接受,q可以改变系l的昄分L率来辑ֈ较好的显C效果呢Q而除此之外,Windowsq提供了调整字体DPI的选项来让字体昄大小适应用户习惯?br><br>情况C便携讑֤上就发生了些变化Q因Z备的U|像素数目分L率不能调_而且DPI可能差距很大。我的手机是Samsung SGH-i780的,方屏Q分辨率?20*320Q有ơ同事看了我的手机,_“字怎么q么的Q?#8221;Q他用的?40*320的,我就Ҏ了一下我们的手机Q屏q宽度基本一_高度我的比他的短了一截,你想啊,垂直像素L大家都是320点,而我的短了一截,所以看h昄的文字就比较了。还有更夸张一些的Q现在新出的手机?80*800分L率的Q称作WVGAQ横?80点,但实际物理尺寸跟我的320点的屏幕差不多,那上门的字恐怕就更小了,可能到看不清了。而事实上呢?<br><br>事实上ƈ没有q样Q因为手Y件的作者已l考虑到这U事情了Q所以在l制文字的时候,会把文字弄大一点,q样文字的物理尺寸还是差不多的,而看h却更?#8220;l腻”?br><br>横向DPI和纵向DPI可以q样获取Q?br><br>GetDeviceCaps(hdc, LOGPIXELSX);<br>GetDeviceCaps(hdc, LOGPIXELSY);<br><br>对Windows Mobile来说Q应该是q样的:<br> <table style="WIDTH: 221px; BORDER-COLLAPSE: collapse; HEIGHT: 162px" border=1 cellSpacing=0 cellPadding=3> <tbody> <tr> <td>屏幕分L?/td> <td>DPI</td> </tr> <tr> <td>240x320</td> <td>96</td> </tr> <tr> <td>480x640</td> <td>192</td> </tr> <tr> <td>240x240</td> <td>96</td> </tr> <tr> <td>480x480</td> <td>192</td> </tr> <tr> <td>480x800</td> <td>192</td> </tr> <tr> <td>320x320</td> <td>128</td> </tr> </tbody> </table> <br>你也许要问,Z么能够保证是q样Q厂家能不能偷偷把屏q做大一些,或者小一些?我想大概q是一U规范吧。生产Windows Mobileg的厂商也那么几个,应该蛮好保证的?br><br>那从我们开发者的角度来说Q如何开发适用于各UDPI的程序呢Q按照Microsoft的说法,可以q样Q?br>You can continue to work in pixels but remove assumptions about the DPI by: <br>•Using the SCALEX and SCALEY macros to scale 96-DPI pixel coordinates, or using the metrics returned by GetSystemMetrics.<br>•Expressing sizes or positions relative to other controls.<br>•Expressing sizes or positions relative to a font.<br><br>更具体内容参考:<br></span><a ><span style="FONT-FAMILY: 宋体">http://msdn.microsoft.com/en-us/library/bb416656.aspx</span></a><br> <img src ="http://www.shnenglu.com/guogangj/aggbug/117096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guogangj/" target="_blank">Jiang Guogang</a> 2010-06-03 13:16 <a href="http://www.shnenglu.com/guogangj/archive/2010/06/03/117096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows CE, Pocket PC, Smart Phone, Windows Mobile和Windows Phone到底有何分别Q?/title><link>http://www.shnenglu.com/guogangj/archive/2010/05/06/114558.html</link><dc:creator>Jiang Guogang</dc:creator><author>Jiang Guogang</author><pubDate>Thu, 06 May 2010 01:21:00 GMT</pubDate><guid>http://www.shnenglu.com/guogangj/archive/2010/05/06/114558.html</guid><wfw:comment>http://www.shnenglu.com/guogangj/comments/114558.html</wfw:comment><comments>http://www.shnenglu.com/guogangj/archive/2010/05/06/114558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/guogangj/comments/commentRss/114558.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guogangj/services/trackbacks/114558.html</trackback:ping><description><![CDATA[管微Y在桌面操作系l领域呼风唤雨,但在嵌入式领域却q连受挫Q因为它得面对许多强大的竞争ҎQSymbianQLinuxQiPhoneQ还有迅猛崛LAndroidQ一个个都很强大。而微软本w的产品U则昑־有些混ؕQ我以前常常被一些名词搞得很p涂Q即便现在,我想q是有很多h搞不懂本文标题这些名词的区别?br><br>那如何简单地来说一下呢Q?br><br>Let's make is simpleQ微软的嵌入式OS都是ZWindows CE的?br><br>?#8220;Z”q个词比较准,可以q么_Windows CE是微软的操作pȝQ而其它那些名词则是不同时候的不同产品U,现在L产品是Windows MobileQPocket PC和Smart Phone是过LQ而Windows PhoneQ准说是Windows Phone 7Q则是将来时?br><br>不同的品线意味着不同的删减和增加Q界面可能差别很大,API甚至有不同,所以彼此间也不兼宏V?br> <img src ="http://www.shnenglu.com/guogangj/aggbug/114558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guogangj/" target="_blank">Jiang Guogang</a> 2010-05-06 09:21 <a href="http://www.shnenglu.com/guogangj/archive/2010/05/06/114558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.iido.org.cn" target="_blank">þþþƷһ</a>| <a href="http://www.greendaily.cn" target="_blank">ƷһþþƷ</a>| <a href="http://www.jijijian.cn" target="_blank">ѾƷպȾþ</a>| <a href="http://www.lcvy.cn" target="_blank">Ʒþþþ</a>| <a href="http://www.zxk2008bj.cn" target="_blank">˾þô߽AV</a>| <a href="http://www.xiaodaoyl.cn" target="_blank">þþƷƷ</a>| <a href="http://www.unicity642.com.cn" target="_blank">þٸ۲AV</a>| <a href="http://www.bestlevering.cn" target="_blank">ۺ˾þôý</a>| <a href="http://www.km10000.net.cn" target="_blank">þ99Ʒ99þ</a>| <a href="http://www.52zx45.cn" target="_blank">þþþƷ</a>| <a href="http://www.ydxxfw.cn" target="_blank">þ޹vwww</a>| <a href="http://www.shipin168.cn" target="_blank">þþþþþۺϺݺۺ</a>| <a href="http://www.shaikr.cn" target="_blank">þ99Ƶ</a>| <a href="http://www.abcvi.cn" target="_blank">7777þþùƷ</a>| <a href="http://www.qancen.cn" target="_blank">պƷþþþþ</a>| <a href="http://www.hlccbxw.cn" target="_blank">þþƷ2020</a>| <a href="http://www.rootwiremesh.cn" target="_blank">ƷѾþþþþþþ</a>| <a href="http://www.ewoman.com.cn" target="_blank">99þҹɫƷվ</a>| <a href="http://www.ahzyjlr.cn" target="_blank">þþƷһӰ</a>| <a href="http://www.ttkanshu.cn" target="_blank">þٸ۲AVר</a>| <a href="http://www.jupucha.com.cn" target="_blank">þ̳</a>| <a href="http://www.nanwx.cn" target="_blank">Ʒþþþ9999</a>| <a href="http://www.jwpicture.cn" target="_blank">vavavaþ</a>| <a href="http://www.jianhua365.cn" target="_blank">þþ޾Ʒһ</a>| <a href="http://www.corporateavenue.cn" target="_blank">þþþžоƷ</a>| <a href="http://www.mynyf8.cn" target="_blank">ۺϾƷ㽶þ</a>| <a href="http://www.taphha.cn" target="_blank">ŷ龫Ʒþþþþ</a>| <a href="http://www.buksk.cn" target="_blank">˾þ777777</a>| <a href="http://www.macsales.cn" target="_blank">þþþžоƷ</a>| <a href="http://www.hrwp.net.cn" target="_blank">99þþþƷѹۿ</a>| <a href="http://www.yichengsh.com.cn" target="_blank">þþþseɫ͵͵޾Ʒav</a>| <a href="http://www.6105555.cn" target="_blank">þþþþùƷŮ</a>| <a href="http://www.zgyjys.cn" target="_blank">ŮƷþþ</a>| <a href="http://www.qequ.cn" target="_blank">99þþƷѿ</a>| <a href="http://www.denstone.cn" target="_blank">ձþþþþĻ</a>| <a href="http://www.meelin.cn" target="_blank">þŮˬŮˬ</a>| <a href="http://www.zgyuantong.com.cn" target="_blank">þҹɫƷ</a>| <a href="http://www.yingyu3g.cn" target="_blank">ݺɫۺϾþ</a>| <a href="http://www.rigemei.cn" target="_blank">þСƵ</a>| <a href="http://www.inqh.cn" target="_blank">žžþþƷר</a>| <a href="http://www.leiyaojidian.cn" target="_blank">þ޹Ʒ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>