林李之战

古有瑜亮,今有林李。
又一个奥运,又一对宿敌。真过瘾,两个人撑起男子羽毛球的春秋,曾记得还有位狂人陶菲克,无耐掉队。今天,结果变成最不重要的结果,人们只是欣赏。他们告别生涯,我们告别青春。人生啊,有几次林李大战?事实上,我也没看几次,但江湖上有他们的传说,我有本林丹的自传而己。另一半区新秀双龙战。那个丹麦小伙,竟一口流利的中文,有点像湛龙的李宗伟。但成色略逊,难称德比 。湛龙孤独着是新时代篇章的前言。

为林李高兴,为知己喝彩。
今天的关键词是什么,坚持。为老将们笑着离开吧,且让他们释然吧!放下,享受~~,只为那更长的路。

自动关闭程序屏蔽windows对话框

windows server 2012关闭无响应程序对话框?
windows server 2012不提示是否要联机查找解决方案对话框?
只要干脆利落的自动关闭程序。那么follow me.有几点可以试试。
  • 关闭无响应程序
在Vista和Windows 7及以上的OS上,参照以下方法:
■在开始运行中输入regedit并回车
■定位到HKEY_CURRENT_USER\Control Panel\Desktop
■设置AutoEndTasks键值为1,如果没有可以手动创建一个名为 AutoEndTasks 类型为REG_SZ值为1的表项。
■WaitToKillAppTimeout是超时等待时间,默认值12000,这个值在很多网站上建议修改短一点,这里不推荐,最好不要改。因为程序的运行是综合的,影响超时的时间会很多,太短的超时时间可能会带来一些“莫名其妙”的问题。
如确认修改WaitToKillAppTimeout,请统一修改:
HKEY_CURRENT_USER\Control Panel\Desktop
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
下的WaitToKillAppTimeout,比如1000,2000均可以。
  • 关闭问题报告:
控制面板–系统和安全—操作中心—问题报告设置
点选“从不检查解决方案(不推荐)”
UAC设置方法/步骤:
你可以完全关闭UAC,在控制面板–系统和安全—操作中心中。也可以通过下面的步骤来设置它。(但要想干脆利落,你知道咋办)
1,点击控制面板,选择所有控制面板项,点击用户帐户
2,点击“更改用户账户控制设置”弹出计算机用户安全通知设置,始终通知(高):这是最安全的设置,收到通知后,你应该先仔细阅读每个对话框中的内容,然后才允许对电脑进行更改。
3,始终通知(中):如果系统允许对 Windows 设置进行更改而不通知你,则表明这种更改是安全的。但是,Windows附带的某些应用可以将命令或数据传递给它们,恶意软件可能会利用这一点,使用这些应用在电脑上安装文件或更改设置。应该始终小心允许在电脑上运行的应用。
4,始终通知(中低):与“仅当应用尝试更改计算机时通知我”相同,但是不会降低桌面亮度。如果选择此选项,则其他应用可能会影响用户帐户控制对话框的可视外观。这是一个安全风险,尤其是你的电脑上存在恶意软件时。
5,从不通知:这是最不安全的设置。将用户帐户控制设置为从不通知时,你便有效地关闭了用户帐户控制。这会使得你的电脑面临潜在的安全风险,这个设置一般在虚拟机练习时候设置
  • 关闭“已停止工作”对话框
 最近发现一个很早以前的程序出现了兼容性问题。程序有检测机制,发现异常退出可以自动重启。但是这次没有重启成功。操作系统是Windows 2008,以前用的操作系统是Windows 2003,在2003上就没有该问题。
后来发现2008和2003的错误报告机制不同。2008下,遇到程序崩溃会弹出一个错误提示对话框,需要手工关闭,程序才能退出。

临时解决问题的方法就是想办法关闭这个对话框。Windows有很多错误提示框,关了一个还会出现另外一个。
下面的方法可以关闭以下的几个对话框不再出现:
xxx已停止工作
xxx-应用程序错误
xxx-未找到调试器

需要修改三个地方:
1.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
在.NETFramework上点击右键-》新建-》DWORD(32-位)值-》
名称:DbgJITDebugLaunchSetting
数据:1
2.HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting 修改两个值(修改第一个值也可退出,但是退出时间较长,测试环境需要1分钟左右,应该是在收集错误信息)
名称:DontShowUI    数据:1

名称:Disabled      数据:1
  • 关闭错误报告
下面这句在开始—-运行中键入,效果是关闭server的错误报告,适用于2008 server。可以用/query,/详细,/摘要,/summary来替换如下的禁用。
serverWerOptin /禁用
我发现了另外引导的 MSDN如何从用户可以抑制嵌入式系统上发生的系统和应用程序的错误信息。注册表中的位置是在以下默认情况下,该数值数据为0,我们应该将其更改为2设置为不可见的所有邮件。
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Windows\ErrorMode.
  • XP关闭无响应方案:
首先打开注册表:在[开始]–>[运行]–>键入[Regedit];  然后找到相关项目按照以下步骤进行设置:  左侧列表中依次展开,找到[HKEY_CURRENT_USER\ControlPanel\Desktop],这个就是设置软件无响应时的选项。将里面AutoEndTasks的数值从0修改为1就是让系统自动关闭无响应的软件。

文艺程序员的拙作

旧诗新用赋予深圳
远看山有色,近听水有声。
春去花还在,人来鸟不惊。
一去二三园,露营四五家,豪厕六七座,八九十枝花
风声
深圳无风起大潮
无声听雷领风骚
迷途小蜜蜂,菜花中深耕。
不知进超市,快乐嗡嗡嗡。
不惑之年,码仔之末。
以考代评,学渣宿命。
敲码半生,犹未之学。
奉旨架构,犹未所归。
一纸虚名,轻装再战。
知行合一,君子不器。
修炼品味,新辟战场。
期待志同,交流合作。
大南山登协活动
南山南四季如春,北乡碑思雨纷纷。
十峰有一君莫笑,待破楼兰金甲还。
春运归前心似箭,层层鲁缟拦路虎。
不知何时新冠止,退票游子尽望乡
红旗飘飘江河如画,家国同庆整装待发。
雷神舞锤怒海潜沙,儿女同心爱我中华。
英雄祭英雄,英雄继英雄,英雄记英雄,英雄跻英雄
中国国籍升值抢,羊肥蓠弱狼便想。
历史重演非吾辈。鬼子再来好猎枪。
解放南定澎湖日,家耻无忘告四方。
一言蔽之惧列强,全面支持军费涨。
川普为选转视线,印度鸡毛当令箭。
美国新冠六百万,中国疫情事过迁。
港独势力限港圈,反歧游行白宫占。
如今又来搞台海,多行不义必自害。
反社反人类已露,何必再造一纳粹。
你品你品得细品,请终结他的表演。
沁园春 庆贺铁科院建院70年
新年伊始,百业勤国,铁科先行。
看全国铁道,支援疫区;减免退改,保障交通。
70年如一,赤子之心,华夏龙脉再升腾。
鹏程举,基业强国富,举世无双。
贺祝昂扬创新70年,筑就综合性研院。
蒸汽变高铁,特区设院;员工同德,青春无悔。
和谐巍巍,复兴滚滚,青藏铁路立前沿。
铁科梦,聚千秋气运,盛世护航。
凌晨四点洛杉矶,骚扰乔丹短消息。
一代天骄两传奇,愿携爱女沐安息。
月枕烟花梢,小女吃蛋糕。
今朝亦有酒,胜却明日愁。
大沙河边走
大家河边走
大家大沙河边走
大家走的快,
全凭车头拉。
小强
–待补充
招安
不经长城,非好汉矣,
已至鹏程,方始万里。
打油诗
全家动员收晒被,大雨将至云压城。
小儿惊叹好风景,楼顶上诗纳风凉。
逼梁山,盼招安。雪中炭,倍知暖。来投诚,必献图。共谋业,宏图展。
阳台绿植合影平安大厦
小秧才摇细枝角,欲与塔尖试比高。
铅笔虽高稳若磐,怎耐灵生日寸长。
读诗经
锦时不诗经,恨己晚识情
不惑之年得,亦复更恋卿
唐宋大家八占三,进士兄弟皆学霸。
少年壮志妈姓程,大器晚成学渣爸。
深圳会展中心
潮流引领何时休,吸眼球会展周周。
手机爆容流量丢,腿抽差厅没转悠。
小钱此地不宜留,该出手时便出手。
日观古今中外秀,不辞城在岭南投。
户口之殇
车子诚可贵,房子价更高。
若为户口顾,一切皆可抛。
下缓兵之计,上修养生息
下兔死狗烹,上借尸还魂
两页三年得,一翻泪双流。
乾乾不戚戚,此外已无山。
楼高满地悠南山,
东坡荔枝引垂涎。
一户二年三行泪,
相与天伦东篱边。
程序员与李商隐
锦瑟无端五十弦,一弦一柱思华年。
–1K=1024b,1b=8bit。8421春夏秋冬。
庄生晓梦迷蝴蝶,望帝春心托杜鹃。
–举头望书山绝路,哄娃屏前叹华年。
沧海月明珠有泪,蓝田日暖玉生烟。
–华发早生有泪,黑发被剿长脸。
此情可待成追忆?只是当时已惘然。
–此生编码成奴畜,只怪毕业码易现。
大湾区
同室操戈,相煎何急。
同为大湾,人民之福。
得道如登,轻舟瞬过万重山。
失道固步,自封有如逆风行
深圳2019年中超开幕式
深城欲中超亮剑,老少酱油皆期盼。
草根起步得证见,实质名归城一线。
2019开工
越南越雪飞,彻底黑白灰
岭南春正好,问君何时归
教授二十载,无数影徘徊
今起相望去,枪手江湖迈
挑灯夜读太爷书墨
憾未福见太爷,偶幸得其手墨。
叹服先人用功,孙拜您含笑知。
买车篇
春风得意王朝宋,一劳永逸无限行。
一块玄铁千百度,得来实在费功夫。
实质名归自家姓,试水电动争先锋。
好事多磨终如愿,净化空气做贡献。
再别帝都
轻轻的我闪了,
正如2017你轻轻的来,
我轻轻的招手,
作别正奔忙赶来的霾。
挥一挥衣袖
不拿走一个口罩
—–即将二娃爹有感
举头望书山,哄娃叹华年。
屏幕代码间,顽bug躲冬寒。
升级版本:
举头望书山,哄娃叹华年。
屏幕代码间,顽bug躲冬寒。
一把辛酸泪,满屏珠玑难。
都云码农痴,谁解其中味。
再改:
举头望书山,哄娃叹华年。
满屏珠玑难,顽bug躲冬寒。
一把辛酸泪,屏幕代码间。
都云码农痴,谁解危机烦。或“所以然”
登塘朗山,梅林山
—-访深圳城中山
不爽墉朗眼前晃,撞日装强奔山上。
骑山迷路几累吐,相山不厌把持住。
东部华侨城游有感一
首批5A名传外,茶溪大侠镇王牌。
手机爆容手抽筋,终老择城机缘待。
东部华侨城游有感二
用心之深城称冠,赢在不比美景观。
岭南人杰办实事,朝气潮气中华愿。
妮妲
—–等台风
妮妲上门,搬好板凳。
泡壶普洱,直播台风。
—–遇台风
千呼万唤风满城,靠窗泡茶搬板凳。
深夜扫荡树根起,万物生后露笑容。
欠深圳的诗
——-出差中午出门吃饭
睛天烟雨蒙蒙中,唤醒吟诗神经虫。
闲云闪躲过不及,走出冰箱又湿蒸。
喷曼市德比北京比赛取消
——-一场热身在泥地里踢又如何呢?
狂人太狂,草皮太黄。
苦了粉丝,要骂他娘。
北京大雨
——黄色预警上班特8公交
各环泳道开,健车蝶泳来
会当特8顶,一览众比赛。
下班
——雨后元大都公园有感
烟雨大都缓颠簸,一天疲劳俱交割。
晴天骑行雨公交,路上小面再回窝。
饯行
—–回京前高中同学聚会
三班同学十年逢,深城厚意饯我行。
酒后雨过颜皆红,往事如烟暖心中。
出差7月下火
——于深圳红树林滨海大道
烈日囚吾下树荫,唯风蝉鸣探灼身。
此监无栏更锁人,去留不解美景真。
莲花山
—山顶遇雨
欲去雨留人,伟人脚下歇。
微润添凉爽,云丽深城春。
改诗
—-于北京郊区
松下睡亮子,妻儿寻趣去。
只在溪水边,人多不知处。
足球
—铁科杯赛第一场后
后卫酷一点,打平拿一分。
家人助一臂,队友齐一心。
—铁科杯赛第三场后
加班错过比赛,惭愧面对惜败。
来日方长磨砺,扬威通号亮剑。
训练
—赞队友
燕龙烧脑欲填诗,剩斗士们勇练习。
南国雨中念球队,愿拿东郊来祭旗。
泰国
—出发
天边鱼肚白,泰国又马来。
穿越两季节,小海岛晒晒。
车中语
—地铁上
中天雪枝低,移族触屏急。
越古北国景,嗟夫无往昔。
回家
—35岁生日下班路
抬头见月明,心已溢满情。
而立有五日,亮德佳川英。
—十一假期后旅游
人潮退,出游始。
春二首
—北京春天里
鸟鸣催床起,地铁踏歌挤。
无极分辨率,徒劳苹果七。
三月五彩帝都天,
柳满绿来花满山。
枫树无语暗思量,
我花发时柳无颜。
升级windows
—安装系统
重启复重启,win10又win7。
系统折腾夜,不成不甘心。
挤回龙观地铁
—北京生活
前不见站台,后不见队尾。
念寒风之悠悠,吾怆然而鼻涕下。
象棋
—闯关自赏
挑灯亮剑,连破残营。聊发少狂,谁与争锋。
少年
—校园生活
十月吾至爱,
真心今犹在。
寒风啸夜深,
谁暖此凉秋。

VC6工程项目改名

首先,网上找了个工具改名的,VCRename用了一下成功,注意新生成的目录中,dsw和dsp文件一定要改过来了。
然后,用新的改名后的工程编译出新程序。
但是,如果你的旧程序是个互斥的机制,即只能启动一个实例的情况。
那么,你会发现,虽然,你用改名工具把文件和工程都改了,但是新程序和改名前的程序不能同时启动。
差在哪里呢。
就是app_title.往细了说是,底层的m_pszAppname还在共同一个,并没有变化成功,所以把这个变量改名了,程序才不会被互斥的。那么什么会关联这个变量呢。就是资源文件。但有人说改名工具已经把资源文件的名字改了。可是其中的内容并没有变,这是原理了。
所以,打开资源文件的页签,找”String Table”.
在表格中找到,afx_ids_app_title 把它的值改名同于你的新名字,然后再编译后,新旧两程序同时可启动并不互斥了。

window开发之项目宏定义

转来一个文章,对VC6下项目建立和解决编译问题时,很有帮助。
常见的编译参数VC建立项目时总会定义”Win32″。控制台程序会定义”_CONSOLE”,否则会定义”_WINDOWS”。Debug版定义”_DEBUG”,Release版定义”NDEBUG”
  与MFC DLL有关的编译常数包括:
  _WINDLL 表示要做一个用到MFC的DLL
  _USRDLL 表示做一个用户DLL(相对MFC扩展DLL而言)
  _AFXDLL 表示使用MFC动态链接库的 regular DLL
  _AFXEXT 表示要做一个MFC扩展DLL
  所以:
  Regular, statically linked to MFC _WINDLL,_USRDLL
  Regular, using the shared MFC DLL _WINDLL,_USRDLL,_AFXDLL
  Extension DLL _WINDLL,_AFXDLL,_AFXEXT
Building Your DLL
When compiling regular DLLs that statically link to MFC, the symbols “_USRDLL” and “_WINDLL” must be defined. Your DLL code must also be compiled with the following compiler switches:
•/D_WINDLL      signifies the compilation is for a DLL
•/D_USRDLL      specifies you are building a regular DLL
When compiling regularDLLs that statically link to MFC, the symbols “_USR DLL” and”_WINDLL” must be defined. Your DLL code must also be compile dwith the following compiler switches:
When compiling regular DLLs that dynamicallylink to MFC, you must define t he above symbols and use the above compilerswitches. Additionally, the sy mbol “_AFXDLL” must be definedand your DLL code must be compiled with:
•/D_AFXDLL     specifies that you are building a regular DLL that dynamicall y links to MFC
The interfaces (APIs) between the application and the DLL must beexplicitlyexported. It is recommended that you define your interfaces to be lowbandw idth, sticking to C interfaces where possible. More direct C interfaces areeasi er to maintain than more complex C++ classes.
Place your APIs in aseparate header that can be included by both C and C++files (that way you won’tlimit your DLL customers to C++ programmers). Se e the header ScreenCap.h in theMFC Advanced Concepts sample DLLScreen Cap for an example. To export yourfunctions, enter them in theEXPORTSs ection of your moduledefinition file (.DEF) or include__declspec(dllexpor t)on yourfunction definitions. Use__declspec(dllimport)to import thesefunctions into the client executable.
You must add theAFX_MANAGE_STATEmacro at the beginning of all the e xportedfunctions in regular DLLs that dynamically link to MFC to set the curr ent modulestate to the one for the DLL. This is done by adding the followingline of codeto the beginning of functions exported from the DLL:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
WinMain->DllMain
The MFC library defines the standard Win32DllMain entry point that initializ es yourCWinAppderived object as in a normal MFC application. Placeall DLL-specific initialization in theInitInstancememberfunction as in a normal MFC application.

最近碰到问题是,一个静态库,没有编译成多线程选项,致使在console中使用正常,新建一个mfc app中使用就不成了。
提示了一堆和CTYPE.h中定义的pctype,timezone,mb_*类的错误。
后来,把静态库,用多线程重编译,并且,用“不定义所有宏”选项,置了一下,然后,静态库就可以被mfc exe来使用了,虽然库并不依赖MFC。当然,此前有winsock的重定义的问题。后来在stdafx.h中加了winsock2.h的引用后,就解决了。

VC6的环境小结

安装:
现在主要有win7,win10,但后者还没听说可以装成功。不过好在有虚机嘛。所以,只聊下win7的VC6安装。
VC6的安装源你总应该拿到,最好是SP6的。
如果是英文版本,安装会少些步骤,有一个是overwrite JIT setting的对话框,网查后我选择了否。
如果是中文版本,请寻找帖子,名为:彻底解决兼容问题:Windows 7下载安装 Visual C++ 6_0(VC6) 全程图解
一步步安装即可,VSS和MSDN都可跳过不安装。
最重要的就是插件了,这个才是彰显尊贵的手段。
filetool,wndtab,VA,VC6lineNumber
一个都不能少,全破解版(自己搜吧)。
配置:
1,用标准库,要注意<>的内容两边加空格 ,并且#pragma   warning(disable:4786)来屏闭VC6中的使用标准库的警告。
2,用C++运行程序时总是出现这个错误BSCMAKE: error BK1510 : corrupt .SBR file ‘.\Debug\StdAfx.sbr’,在C/C++—>gernal中取消生成浏览信息的选项。
3,PROJECT->SETING->C/C++->PREPROCESSOR->定义 _AFXDLL,也就是C/C++选项中定义了宏  用_AFCDLL 取代 USERDLL 能解决很多nafxcwn.lib开头的链接错误。
4,Link选项中ignore default lib,根据方式设定,手工加/NODEFAULTLIB:或者填库名。
5,VC6下导出类中的静态成员需要“壳子”才可以调用,而在VS2012中,却直接可用。当不同的环境生成的dll或客户端相互调用时,要注意字符集问题,VC6并不是unicode的。
6,要声明通用函数时,可以不加;在{}后面,但应该声明为static,这样可以避免重复定义的报错。
7,string 的split算法,replace,trim需要自己写算法,最后找到使用模板的。
8,在有unicode的项目中,在循环中使用W2A()可能会有报错,或者提示为,run-time check fail #2 stack …,内存操作越界之类,在VS2012中项目–C\C++设置中,改掉一个设置,“基本运行时检查”从“两者(/RTC1,等同于 /RTCsu) (/RTC1)”换成默认值。其实出现它的问题,还是在于使用scanf时,“%02x”的操作数组应该至少是3,要包含个’\0’的。
9,项目是要供别人调用的dll,要在配置中使用/MD.
10,要通过exe来调度dll时,要配置debug session和work directory
11,当出现外部链接错误时,要先检查link中的lib文件,是否存在于项目目录中。并不需要dll,因为只是链接步骤。
12,字符集问题,VC6是基于MBCS的(有宏定义,当然可以强制成unicode),对于中文用两字节,而字母和数字用一个字节。而VS201X,都是用unicode默认的,所以也就存在于宽字符的结构了,和一系列转来转来的操作。

tinyxml使用技巧

实在是好用呀,优点比如:
1,一次装载到内存,其它地方全用引用即可,一个小指针可以是一个元素,也可是一个节(内部很多子元素)。
2,不用管理元素的内存回收,我是没看源码,号称管理的很好。一个父元素删除,它包含的所有子都释放了。
3,api较少并且,一目了然。
遍历时基本就用三个算法:
1)同级的循环(没用遍历以防会误解包括子节点处理)
//pParent当然是父了
for (TiXmlNode *pSTATE = pParent->FirstChild( “STATE” ); pSTATE; pSTATE = pSTATE->NextSibling(“STATE” ))
{}
注意:要用TiXmlNode *结构,不要用TiXmlElement*
2)当同级的到了最后一个,NextSibling()会返回个空。这时你可以用跳了。
pParent->IterateChildren( pSTATE )
3)以上两个掌握了,就可以玩遍历了。不过,要注意,走到叶子节点时,要跳级。但如果你手工跳了,可能遍历会有重复情况。这时可以使用函数的静态变量喽。可以用静态变量记住父结点。可以用静态list来存放处理过的节点,跳过重复情况。示例代码如下:
void handleExportMap(TiXmlNode * pSrc)
{
if (!pSrc ) return;

static TiXmlNode *bodyItem;

if (“FRAME_BODY” == pSrc->ValueTStr())
{
bodyItem = pSrc ;
}
static TiXmlNode *curpItem;
int t = pSrc ->Type();
printf( “type %d \n” , t);

switch (t)
{
case TiXmlNode :: TINYXML_DOCUMENT:
printf( “Document” );
break ;

case TiXmlNode :: TINYXML_ELEMENT:
printf( “Element [%s]” , pSrc ->Value());
//
if (“CONTENT” == pSrc->ValueTStr())
{
curpItem = pSrc ;
}
if (“MAP” == pSrc->ValueTStr())
{
//跳过MAP的处理
pSrc = curpItem->IterateChildren(pSrc ->Parent());

if (!pSrc )
return ;
else
printf( “Element [%s]” , pSrc ->Value());
}
if (“STATE” == pSrc->ValueTStr() && pSrc == pSrc ->Parent()->LastChild())
{
//跳过STATE的处理
//map中的state
pSrc = curpItem->IterateChildren(pSrc ->Parent()->Parent());

if (!pSrc )
return ;
else
printf( “Element [%s]” , pSrc ->Value());
}

if (“ITEM” == pSrc->ValueTStr())
{

printf( “Element [%s]” , pSrc ->Value());

if (!pSrc ->NoChildren())
{
if (!bMoveItems(pSrc ))
return ;
}

} //end if (!pSrc->NoChildren())
if (“MESSAGE” == pSrc->ValueTStr())
{
curpItem = pSrc ;
if (!bMoveItems(pSrc ))
return ;
}
break ;

case TiXmlNode :: TINYXML_COMMENT:
printf( “Comment: [%s]” , pSrc ->Value());
break ;

case TiXmlNode :: TINYXML_UNKNOWN:
printf( “Unknown” );
break ;

case TiXmlNode :: TINYXML_TEXT:
printf( “Text: [%s]\n” , pSrc ->ToText()->Value());
break ;

case TiXmlNode :: TINYXML_DECLARATION:
printf( “Declaration” );
break ;
default :
break ;
}

if (pSrc ->NoChildren())
{
pSrc = pSrc ->NextSibling();

handleExportMap( pSrc );
}
else
{
//过滤,直到合法
while (pSrc = pSrc->FirstChild())
{
handleExportMap( pSrc );

}

}
}
在这个遍历的框架基础上,可以变化和设计出你的需求了,注意,要分化任务,只做遍历,和只做节点的处理,不要混在一起,不然,一个bug两三天呀。上面的bMoveItems就是当定位到了ITEM节点时,我调用其它的业务处理。因为,人只关注ITEM节点,所以它有一些子节点MAP或子子节点STATE,都在上面一一跳过了。

最后,附上“米”,好“下锅”,注意层次。
<?xml version=”1.0″ encoding=”UTF-8″ ?>
<!– edited with XMLSpy v2013 (http://www.altova.com) by () –>
<LINE ID=”11″ VERSION=”1″>
<FRAME_HEADER>
<ITEM ID=”system_id” LENGTH=”1″ CURPOS=”0″ />
<ITEM ID=”total_length” LENGTH=”2″ CURPOS=”1″ MAX_VALUE=”1025″ />
<ITEM ID=”multi_flag” LENGTH=”1″ CURPOS=”3″ DEFAULT=”0″ />
</FRAME_HEADER>
<FRAME_BODY>
<MESSAGE ID=”NETWORK_ALIVE_STATUS” TYPE=”1″ TRANS=”O2N”>
<ITEM ID=”message_length” LENGTH=”2″ CURPOS=”4″ DESC=”消息长度” MIN_VALUE=”13″ interal_index=”1″ />
<ITEM ID=”time” LENGTH=”4″ CURPOS=”6″ DESC=”时间” FORMAT=”HHMMSS” interal_index=”2″>
<MAP NID=”time” MODE=”1″ SAME=”Y” NINDEX=”2″ KEY=”time|6|4″ DESC=”时间” EX_CODE_KEY=”” />
</ITEM>
<ITEM ID=”version” LENGTH=”2″ CURPOS=”10″ DESC=”版本” DEFAULT=”01H” interal_index=”3″ />
<ITEM ID=”msg_id” LENGTH=”2″ CURPOS=”12″ DESC=”报文ID” interal_index=”4″ />
<CONTENT ID=”data0″ DEFAULT_LEN=”3″>
<ITEM ID=”line_id” LENGTH=”2″ CURPOS=”14″ DESC=”线路号” interal_index=”5″>
<MAP NID=”line_id” MODE=”1″ SAME=”Y” NINDEX=”5″ KEY=”line_id|14|2″ EX_CODE_KEY=”” />
</ITEM>
<ITEM ID=”status” LENGTH=”1″ CURPOS=”16″ DESC=”状态字节:1:代表与当前线路号的信息源(server)连接正常;0:代表断开。” interal_index=”6″>
<MAP NID=”xt_pkg” MODE=”1″ SAME=”N” NINDEX=”6″ KEY=”xt_pkg|16|1″ EX_CODE_KEY=””>
<STATE ID=”11_STATUS_CODE_1″ RAWVALUE=”0x00″ HINT=”通信中断” SAME=”Y”>0x80</STATE>
<STATE ID=”11_STATUS_CODE_2″ RAWVALUE=”0x01″ HINT=”通信正常” SAME=”Y”>0x02</STATE>
</MAP>
</ITEM>
</CONTENT>
</MESSAGE>
<MESSAGE ID=”LOAD_DEVICE_STATUS” TYPE=”1″ TRANS=”N2O”>
<ITEM ID=”message_length” LENGTH=”2″ CURPOS=”4″ DESC=”消息长度” MIN_VALUE=”12″ interal_index=”1″ />
<ITEM ID=”time” LENGTH=”4″ CURPOS=”6″ DESC=”时间” FORMAT=”HHMMSS” interal_index=”2″ />
<ITEM ID=”version” LENGTH=”2″ CURPOS=”10″ DESC=”版本” DEFAULT=”01H” interal_index=”3″ />
<ITEM ID=”msg_id” LENGTH=”2″ CURPOS=”12″ DESC=”报文ID” interal_index=”4″ />
<CONTENT ID=”data0″ DEFAULT_LEN=”2″>
<ITEM ID=”line_id” LENGTH=”2″ CURPOS=”14″ DESC=”线路号” interal_index=”5″ />
</CONTENT>
</MESSAGE>
</MESSAGE>
</FRAME_BODY>
</LINE>

保存和另存,一个TiXmlDocument的SaveFile()函数就搞定了。
生成新的XML时,会用一个api就成了。parent->LinkEndChild(TiXmlNode *);根据不用我解释了吧。加同级,用parent()找父指针嘛。

北京工作居住证攻略

朝阳区人才的位置:三元桥,凤凰城附近
海淀区人才的位置:北京市海淀区西四环北路73号中关村人才发展中心
办理:
首先,你要把自己的证件都复印好,不用等待网络上的信息注册后再准备,但完税证明不要提前,因为有效期只有一个月。
但办这事的入口,还是你公司为你注册了帐号,然后,你就可以登陆并看到办理居住证的链接了。
然后,就是材料最后的准备阶段了,去开完税证明和公司行政打交道完成各种手续。
最后,在提交时,想要办小孩上学要注意随迁问题。住址和居住证跨区的小孩上学问题,需要向学校搞清楚。

年检:
这其实是公司人力的动作,每年四月,他们应该用他们的企业帐号登陆系统,做操作。

续证:
工作居住证到期的前后一个月,要在网上先申请,然后,要去所在区人才,柜台办理。又要拿一大堆打印的申请。

变更:
分公司,住址,随迁等种类变更。但重要的是公司变更吧。
本人下家也具有工作居住证的资质,所以,变更准备材料如下:
(只针对海淀人才)
1)居住证原件(这不用说吧)
2)关于为XXX同志办理《北京市工作居住证》聘用单位变更的申请———-网找模板,加盖公司章
3)聘用单位变更申请———–网找模板,是个人申请,所以不用公章
4)营业执照复印副本
5)离职证明原件+复印件———-注意复印件也要盖章,经办人签字(附句话:经本人同意与原件内容一致)
6)新公司的劳动合同原件+复印件———-注意复印件也要盖章,经办人签字 (附句话: 经本人同意与原件内容一致)
不用每页都有章,最好公司有复印件专用的方章,可以在首页和签字页盖章即可。

说什么诚信声明和进入系统打印申请表,这两项并不需要。
当你的申请被受理后,海淀人才就告诉我,两个月左右,登录看一下系统中办理的状态,如果是完成,那么,你有两个方式来取回自己的居住证。一,让公司人事去办事时顺便取到,二,自己打印一个介绍信,模板不好找,但当时,我把柜台的模板照了下来。这样,可以自己起草一个,找公司盖章,注意只好盖章后,拿这个介绍信才能自己取到。
注销:
也是公司人力的动作,当你想在新公司变更或重新办新的,或其它业务时,前公司应该给你注销先。
注销后,两个月内个人如果没有延期注销的动作,那么你的居住证生命线就over了

延期注销:
当你换的新公司试用期较长,或者暂时没公司,或者工作忙时,可以在注销的两个月最后几天,申请延期注销。
那么你就有了6个月的机动时间。当然,你要登陆系统,自己填写申请并提交。如果你的新公司比较确定,要在备注的内容里体现。据说这样
会不仅有6个月,即使长一些,也能救起证的生命线。提交成功就行,不用去柜台了。

以Qtreeview为例介绍Qt的model/view/item框架

因为,Qtreeview是层次容器,所以会复杂。尤其是加子行的时候。
首先,要找到是哪里加子行。有两个思路:位置索引还是item
1)用model的位置索引方式,定位到要加子行的QModelIndex.
2)用item方式,即后台以批量的list加树时,找到item的位置。
3)用model,如果后台的批量item加完就释放,若无从找到,有一个神器就是Model->itemFromIndex(myparent);这是索引和后台item的桥。
后两种方式归纳来看,也算是从item入手了,而且推荐都使用Item方式加子行,不然,可能会陷入到后台model和view中的QModelIndex的不同步,那个问题会让你乱套的。
然后,找到了加子行的点,就是要找方法了。
1)item->appendRow(传入item的list);
2)Model->insertRows(0, 1, myparent); // 添加一行,注意参数是QModelIndex,要理解树模型中子节点的索引机制
虽然,model有自己的appendRow函数,但是,加一行是没问题,分层次加子行时还是不行的。
而且,在分别使用item对象和QModelIndex对象的Data()和setData()时要注意,默认的role参数,一个是0,一个是257.这是绝对的坑儿。
不然,你设置了,总感觉设置的数据为空,不显示。role是一个新维度的概念,使用很方便,只要传入和调出控制好了,是一大神器。
resizecolumncontent也是个不错的技巧,可以在你设置了model后重新调用,根据内容适应宽度。
代码有点乱:但可以上两棵树,并且都有子行。

  //测试绑定线路报文内容到树控件
  QList <QStandardItem *> items;
  QList <QStandardItem *> childItems;
  for (int i = 0; i < 4; ++i)
  {
  QStandardItem *item = new QStandardItem( QString (“item L%0” ).arg(i));
  if (0 == i)
  item->setCheckable( true );
  items.push_back(item);
  }
  lineModel->appendRow(items);
  for (int i = 0; i < 4; ++i)
  {
  for (int i = 0; i < 4; ++i)
  {
  QStandardItem *item = new QStandardItem( QString (“L%0” ).arg(i));
  if (0 == i)
  item->setCheckable( true );
  childItems.push_back(item);
  }
  items.at(i)->appendRow(childItems);
  //lineModel->setItem(i, 0, childItems.at(i));
  }
  items.clear();
  childItems.clear();
  int iRow = -1;
  for (int i = 0; i < 4; ++i)
  {
  for (int i = 0; i < 3; ++i)
  {
  QStandardItem *item = new QStandardItem( QString (“item R%0” ).arg(i));
  if (0 == i)
  item->setCheckable( true );
  items.push_back(item);
  }
  //items.at(i)->appendRow(items);
  //normalModel->setItem(i, items.at(0));
  normalModel->appendRow(items);
  items.clear();
  iRow++;
  }
  //方式一,以setdata方式加子行
  //QModelIndex myparent = normalModel->index(iRow,0);
  // //myparent = normalModel->index(0, 0, myparent);
  // normalModel->insertRows(0, 1, myparent); // 添加一行
  // normalModel->insertColumns(0, 3, myparent); // 添加三列
  // ui.treeView_normal->reset();
  // ui.treeView_normal->setModel(normalModel);
  // ui.treeView_normal->update();
  // emit ui.treeView_normal->dataChanged(normalModel->index(0, 0), normalModel->index(0, 3, myparent));
  ////for (int i = 0; i<3; i++)
  ////{
  // QModelIndex index = normalModel->index(0, 0, myparent);
  // normalModel->setData(index, “kk”);
  // ui.treeView_normal->reset();
  // ui.treeView_normal->setModel(normalModel);
  // ui.treeView_normal->update();
  // emit ui.treeView_normal->dataChanged(normalModel->index(0, 0), index);
  // normalModel->insertColumns(0, 1, myparent); // 添加一列
  // index = normalModel->index(0, 1, myparent);
  // normalModel->setData(index, “ll”);
  // emit ui.treeView_normal->dataChanged(normalModel->index(0, 0), index);
  // ui.treeView_normal->update();
  // ui.treeView_normal->setModel(normalModel);
  // normalModel->insertColumns(0, 1, myparent); // 添加一列
  // index = normalModel->index(0, 2, myparent);
  // normalModel->setData(index, “mm”);
  // ui.treeView_normal->setModel(normalModel);
  // ui.treeView_normal->update();
  // //ui.treeView_normal->paintEvent()
  // emit ui.treeView_normal->dataChanged(normalModel->index(0, 0), index);
  // ui.treeView_normal->reset();
  ////}
  //myparent = lineModel->index(0,0);
  //QModelIndex tmp = lineModel->index(0, 0,myparent);
  // ui.treeView_line->setCurrentIndex(tmp);
  //方式二,以model的setitem方式加行
  QModelIndex myparent = normalModel->index(iRow, 0);
  for (int i = 0; i < 3; ++i)
  {
  QStandardItem *item = new QStandardItem( QString (“R%0” ).arg(i));
  if (0 == i)
  item->setCheckable( true );
  childItems.push_back(item);
  }
  //items.at(i)->appendRow(childItems);
  QStandardItem * tmp = normalModel->itemFromIndex(myparent);
  tmp->appendRow(childItems);
  childItems.clear();
  //normalModel->setItem(iRow, 0, childItems.at(0));
  QStandardItem *item = new QStandardItem( QString (“RE%0” ).arg(0));
  childItems.push_back(item);
  item = new QStandardItem ( QString( “RE%0” ).arg(1));
  childItems.push_back(item);
  item = new QStandardItem ( QString( “RE%0” ).arg(2));
  childItems.push_back(item);
  normalModel->appendRow(childItems);

自由行泰国

自由行者干货吐血奉献:
感觉用倒叙的时间串起来可读性高。

行程章节:
健议,6-10天,选2-3地,6天以内,可以专注1城。很多老外一处一呆就是一个月。租车租房租泰妹已成文化,一盘水果一帮朋友喝到深夜。直到出行前,多看穷游攻略,锦囊啥的。没确定机票前,并不需要订太多景点的票和接机出租啥的,前者用app提前一天解决,点对点的接驳在当地解决吧,可以议价嘛。

首先,倒数半年吧,拿护照买亚航票赶打折是必须的,购时要额外去除保险的点选,因为那是默认选中的坑,不要在意big sort的积分,它是事后才积上去的。对于行李和机上餐可按需选择。注意因为是低价机票,所以不包含这些的。
确定了行程,可以细化你每一天的安排了。是一个城市,还是要飞来飞去?由于本人家人5人10天。所以,舍弃了久仰的清迈。因为,考虑到小孩和老人,不能以旅行团一样的安排,所以,曼谷+芭提雅+泰南的苏梅+涛岛,事实证明大家很满意。

曼谷是购物之都,大皇宫父母只呆了不到半小时,就吵着要逛街。所以,在最后两天在曼谷购物,不然,提着大小包去玩可是很辛苦。
芭提雅离曼谷近,大巴2小时,方便随时,并且沿海热闹。并不细说,我老婆最钟爱此地。但并不上岛,因为后面有好戏。
苏梅+岛,四天的深度感受,才能让大家忘记北方的寒冷和帝都的#¥¥%#。

飞前倒数一个半月,去搞定签证,在网上找可信的旅行社带办,一人花费2百多吧。

倒数一周时,换外币,因为换币要提前预约的,不然,很可能白跑一趟,我是在中国银行柜台办理的,据说汇率低。
不用换太多美金,真用不上。甚至不用换。我在华夏卡里存了6K(号称每天第一次取钱免手续费,但好像至少会有50铢会被当地ATM扣)
具体的安排:
华夏存入6K
换美金1K(本人中间有马来西亚的transit,出关玩了半天,所以,其实应该直接换马币)
换泰铢4K
当然,要带信用卡喽

倒数第四天时,下淘宝单,买电话卡,happy-7day卡。虽然,电话功能只用了不超过五次,但随时上网帮了很多的忙。因为,要收发订单邮件的和各种app的使用。7天过期后本人找到服务点,加了两天的上网约110铢

倒数第三天,网上值机,打印登机牌,打印各种订单确认(住宿酒店确认,地址信息等)和地图资源(一般酒店大堂都提供)。把手机的旅行app整理到一个文件夹,下载最新版本,先登陆上所有出游app帐号,以防到时找不到帐号,影响大事。
本人的app介绍如下:(重要程度,由上至下)
google maps
booking.com
面包自由行
穷游
私人邮箱设置
亚航

途牛
携程
蚂蜂窝自由行

前四位很强大,他们会互相配合,这里要赞一下面包。我在面包上订了一个安通海洋公园和一个人妖秀,都是质量很高,前一天下单,第二天享受,当然,要拿确认邮件去享受了。当然有条件的话,可以打印出来。泰国的IT水平不高,找到愿意让你使用的打印机很难的。酒店的服务人员不会同意,因为上网有风险,并且电脑都为公用。而没有像中国一样的打印复印店的。所以,你只能找office了,幸好有好心的人帮助。我转发邮件给他,他打印出来。面包上的景点也都可以关联google导航定位。这样,离的近或打车前去,大可尽在掌握。
再有就是booking.com了,的确专业,对订单反应速度巨快,可以结合苹果的passbook。

文化章节:
喝白酒的人注意,泰国找不到白酒,并且,早餐很难找,因为,上午开店的很少。在寺庙不要吵,也不用交门票。

详细行程一览表:

地点/时间/逗留 源–目标机场 景点 事后总结(有血的教训)
北京/马来西亚 PEK—KUL 马来西亚–双子塔–central park–机场商圈 事实上到了central market玩了半天,吃了个饭。有一个30分钟的快轨klia2直达central.
马来西亚/曼谷 KUL–DMK 体验美食,然后休息 到达天黑了,入住,准备第二天一早出发芭提雅
曼谷/芭提雅 坐BTS至下面站之一:1)victoryment station|胜利纪念碑(阿怒烧瓦里拆)2)E7|曼谷市东站|Ekkamai|Eastern Bus Terminal,2号口出就是东站。注:租用面包车.汽车北站(Mo chit) 四方水上市场另一个响亮名字是杜拉拉水上市场(最好提前网购票)可以坐香蕉船,照相,购物,看表演。中午后人开始多,我们去早了。 事实上,酒店前台安排了前往芭提雅的家庭型车,5人一共2000铢
巴堤雅 原路返曼谷 东芭乐园,室内民俗表演,大象表演,骑大象,旅游车参观等。到当地后订房两晚,200人民币一晚,有游泳池,比较舒适。 在著名的红灯区街walking street的西北部找了个性价比很高的酒店,记往在海滩的外圈找,那里会便宜。吃海鲜,游泳,逛街(晚上去,你懂的)
芭提雅/曼谷 当地订房一晚,19,200人民币一晚 大巴车,坐到离廊曼机场近的站,在那里现找酒店,因为要赶飞机去苏梅,到曼后晚间逛了跳蚤市场,咋都咋(东西很多,但必须狠讲价,比MBK的价水份还大)
苏梅岛/20-22 DMK–NST车船联:大巴–>–
Donsak码头->—
Lipa Noi Pier(苏梅亚航集合地)–>-面包车->-酒店
查汶海滩(Chaweng Beach)、波普海滩(Borphut Beach)、拉迈海滩(Lamai Beach)和湄南海滩(Maenam Beach)。 海岛的房间紧张,所以用booking.com早下手了。海难上很热闹,水果很便宜。用面包app订了安通海洋公园,做快艇,浮潜,皮划艇,自助,实在是印象深刻,非常推荐。
龟岛(TAO)/23-24 nakhon si thammarat(NST) –bangkok-Don mueang(DMK)车船联:
酒店–>–Seatran pier->–Donsak pier–>–大巴->-机场-16:10->-FD3187–>-17:30-
潜水,南苑岛,mahead bea(海滩),购物街很多 岛上出租车很贵,要由酒店前台来叫。并且,按地图规划好下车地和游览路线。由于有孩子,不能去南苑岛和潜水。有几个购物区路线。逛的同时,看到了离岛的码头Seatran pier 那里有亚航的接待点,车船联票的入口。
龟岛/曼谷/24-26 DMK–KUL 大船–7座小巴–飞机 一天用来赶路,做大船不用很颠婆。有钱的可以从苏梅飞。
曼谷/北京 KUL–PEK 唐人街,泰拳,nana街 找到大皇宫附近的宾馆住下,第二天路线是,大皇宫,考山路,王权免税店,MBK,克里索普人妖秀。注意,去王权要拿两样东东,护照(本人全程随身)还有是打折地图(免费领于酒店前台,上面有打折卡的)。买的东东可以在机场退税。还有就是湄南河边的人妖秀了。风景和文化大餐。人妖秀很艺术,每个位子送一种自选饮品。第二天,飞京略

囧点:
1)买了个超标的箱子,只能托运,而又没买20kg的行李托运,在机场又要登机了,结果高价买了托运–600银子。
2)爸有个小军刀,老婆有些化妆品被安检拦了,幸好,有免费的寄存,等回来北京后,从机场拿走。
3)爸妈先抵泰国机场,对于入境卡拒填,他以为那个是落地签,语言又不通,真是难为他们了。 汇合后出了机场,打不到taxi,因为,机场很规范,有专门的打的通道,要排队,就一定有打表的taxi。
4)上了车,老爸习惯的往副驾驶一座,可是,司机就站在旁边,比划了半天,老爸往前一看,原来有方向盘。
5)注意,泰铢纸币的1K和100的特别相近,本人就大方的给了1K的小费。
6)由于经停马来西亚,本人换了马币,可返程时赶飞机,没有消费掉剩下的钱,结果,回国后发现中国银行不能换马币。结果,留做纪念了。还有若干泰铢硬币。