﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-我爱我的家园!-文章分类-C/C++</title><link>http://www.blogjava.net/Yipak/category/34371.html</link><description>成功在于你是否努力,希望在于你是否相信自己! </description><language>zh-cn</language><lastBuildDate>Tue, 16 Sep 2008 10:50:21 GMT</lastBuildDate><pubDate>Tue, 16 Sep 2008 10:50:21 GMT</pubDate><ttl>60</ttl><item><title>Ansi、Unicode、UTF8字符串之间的转换和写入文本文件</title><link>http://www.blogjava.net/Yipak/articles/229223.html</link><dc:creator>死神</dc:creator><author>死神</author><pubDate>Tue, 16 Sep 2008 09:59:00 GMT</pubDate><guid>http://www.blogjava.net/Yipak/articles/229223.html</guid><wfw:comment>http://www.blogjava.net/Yipak/comments/229223.html</wfw:comment><comments>http://www.blogjava.net/Yipak/articles/229223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yipak/comments/commentRss/229223.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yipak/services/trackbacks/229223.html</trackback:ping><description><![CDATA[
		<p>转载请注明出处<a href="http://www.cppblog.com/greatws/archive/2008/08/31/60546.html">http://www.cppblog.com/greatws/archive/2008/08/31/60546.html</a><br /><br />最近有人问我关于这个的问题，就此写一篇blog<br /><br />Ansi字符串我们最熟悉，英文占一个字节，汉字2个字节，以一个\0结尾，常用于txt文本文件<br />Unicode字符串，每个字符(汉字、英文字母)都占2个字节，以2个连续的\0结尾，NT操作系统内核用的是这种字符串，常被定义为typedef unsigned short wchar_t;所以我们有时常会见到什么char*无法转换为unsigned short*之类的错误，其实就是unicode<br />UTF8是Unicode一种压缩形式，英文A在unicode中表示为0x0041，老外觉得这种存储方式太浪费，因为浪费了50%的空间，于是就把英文压缩成1个字节，成了utf8编码，但是汉字在utf8中占3个字节，显然用做中文不如ansi合算，这就是中国的网页用作ansi编码而老外的网页常用utf8的原因。<br />UTF8在还游戏里运用的很广泛，比如WOW的lua脚本等<br /><br />下面来说一下转换，主要用代码来说明吧<br />写文件我用了CFile类，其实用FILE*之类的也是一样，写文件和字符串什么类别没有关系，硬件只关心数据和长度<br /><br />Ansi转Unicode<br />介绍2种方法<br /><br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> CConvertDlg::OnBnClickedButtonAnsiToUnicode()<br /><img id="Codehighlighter1_51_1122_Open_Image" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_51_1122_Closed_Image" style="DISPLAY: none" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_51_1122_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/Images/dot.gif" />
				</span>
				<span id="Codehighlighter1_51_1122_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> ansi to unicode</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> szAnsi </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">abcd1234你我他</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">预转换，得到所需空间的大小</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> wcsLen </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">分配空间要给'\0'留个空间，MultiByteToWideChar不会给'\0'空间</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    wchar_t</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> wszString </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> wchar_t[wcsLen </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">];<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">转换</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), wszString, wcsLen);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">最后加上'\0'</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    wszString[wcsLen] </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">'</span>
						<span style="COLOR: #000000">\0</span>
						<span style="COLOR: #000000">'</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">unicode版的MessageBox API</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    ::MessageBoxW(GetSafeHwnd(), wszString, wszString, MB_OK);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">接下来写入文本<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">写文本文件，头2个字节0xfeff，低位0xff写在前</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    CFile cFile;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    cFile.Open(_T(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">1.txt</span>
						<span style="COLOR: #000000">")</span>
						<span style="COLOR: #000000">, CFile::modeWrite </span>
						<span style="COLOR: #000000">|</span>
						<span style="COLOR: #000000"> CFile::modeCreate);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">文件开头</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    cFile.SeekToBegin();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    cFile.Write(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">\xff\xfe</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">, </span>
						<span style="COLOR: #000000">2</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">写入内容</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    cFile.Write(wszString, wcsLen </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">sizeof</span>
						<span style="COLOR: #000000">(wchar_t));<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    cFile.Flush();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    cFile.Close();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    delete[] wszString;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    wszString </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">NULL;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">方法2<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">设置当前地域信息，不设置的话，使用这种方法，中文不会正确显示<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">需要#include&lt;locale.h&gt;</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    setlocale(LC_CTYPE, </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">chs</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">); <br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    wchar_t wcsStr[</span>
						<span style="COLOR: #000000">100</span>
						<span style="COLOR: #000000">];<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">注意下面是大写S，在unicode中，代表后面是ansi字符串<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">swprintf是sprintf的unicode版本<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">格式的前面要加大写L，代表是unicode</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    swprintf(wcsStr, L</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">%S</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">, szAnsi);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    ::MessageBoxW(GetSafeHwnd(), wcsStr, wcsStr, MB_OK);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>
				<br />
				<br />Unicode转Ansi<br />也是2种方法<br /><br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> CConvertDlg::OnBnClickedButtonUnicodeToAnsi()<br /><img id="Codehighlighter1_51_1013_Open_Image" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_51_1013_Closed_Image" style="DISPLAY: none" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_51_1013_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/Images/dot.gif" />
				</span>
				<span id="Codehighlighter1_51_1013_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> unicode to ansi</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    wchar_t</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> wszString </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> L</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">abcd1234你我他</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">预转换，得到所需空间的大小，这次用的函数和上面名字相反</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> ansiLen </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">, NULL, NULL);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">同上，分配空间要给'\0'留个空间</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> szAnsi </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000">[ansiLen </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">];<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">转换<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">unicode版对应的strlen是wcslen</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">最后加上'\0'</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    szAnsi[ansiLen] </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">'</span>
						<span style="COLOR: #000000">\0</span>
						<span style="COLOR: #000000">'</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">Ansi版的MessageBox API</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    ::MessageBoxA(GetSafeHwnd(), szAnsi, szAnsi, MB_OK);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">接下来写入文本<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">写文本文件，ANSI文件没有BOM</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    CFile cFile;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    cFile.Open(_T(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">1.txt</span>
						<span style="COLOR: #000000">")</span>
						<span style="COLOR: #000000">, CFile::modeWrite </span>
						<span style="COLOR: #000000">|</span>
						<span style="COLOR: #000000"> CFile::modeCreate);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">文件开头</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    cFile.SeekToBegin();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">写入内容</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    cFile.Write(szAnsi, ansiLen </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">sizeof</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000">));<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    cFile.Flush();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    cFile.Close();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    delete[] szAnsi;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    szAnsi </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">NULL;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">方法2<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">和上面一样有另一种方法</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    setlocale(LC_CTYPE, </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">chs</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">); <br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000"> szStr[</span>
						<span style="COLOR: #000000">100</span>
						<span style="COLOR: #000000">];<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">注意下面是大写，在ansi中，代表后面是unicode字符串<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">sprintf</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    sprintf(szStr, </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">%S</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">, wszString);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    ::MessageBoxA(GetSafeHwnd(), szStr, szStr, MB_OK);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>
				<br />
				<br />Unicode转UTF8<br /><br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> CConvertDlg::OnBnClickedButtonUnicodeToU8()<br /><img id="Codehighlighter1_49_850_Open_Image" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_49_850_Closed_Image" style="DISPLAY: none" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_49_850_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/Images/dot.gif" />
				</span>
				<span id="Codehighlighter1_49_850_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> unicode to UTF8</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    wchar_t</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> wszString </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> L</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">abcd1234你我他</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">预转换，得到所需空间的大小，这次用的函数和上面名字相反</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> u8Len </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> ::WideCharToMultiByte(CP_UTF8, NULL, wszString, wcslen(wszString), NULL, </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">, NULL, NULL);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">同上，分配空间要给'\0'留个空间<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">UTF8虽然是Unicode的压缩形式，但也是多字节字符串，所以可以以char的形式保存</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> szU8 </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000">[u8Len </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">];<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">转换<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">unicode版对应的strlen是wcslen</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    ::WideCharToMultiByte(CP_UTF8, NULL, wszString, wcslen(wszString), szU8, u8Len, NULL, NULL);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">最后加上'\0'</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    szU8[u8Len] </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">'</span>
						<span style="COLOR: #000000">\0</span>
						<span style="COLOR: #000000">'</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">MessageBox不支持UTF8,所以只能写文件<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">接下来写入文本<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">写文本文件，UTF8的BOM是0xbfbbef</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    CFile cFile;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    cFile.Open(_T(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">1.txt</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">), CFile::modeWrite </span>
						<span style="COLOR: #000000">|</span>
						<span style="COLOR: #000000"> CFile::modeCreate);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">文件开头</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    cFile.SeekToBegin();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">写BOM，同样低位写在前</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    cFile.Write(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">\xef\xbb\xbf</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">, </span>
						<span style="COLOR: #000000">3</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">写入内容</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    cFile.Write(szU8, u8Len </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">sizeof</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000">));<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    cFile.Flush();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    cFile.Close();<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    delete[] szU8;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    szU8 </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">NULL;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>
				<br />UTF8转UNICODE<br /><br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> CConvertDlg::OnBnClickedButtonU8ToUnicode()<br /><img id="Codehighlighter1_49_613_Open_Image" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_49_613_Closed_Image" style="DISPLAY: none" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_49_613_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/Images/dot.gif" />
				</span>
				<span id="Codehighlighter1_49_613_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">UTF8 to Unicode<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">由于中文直接复制过来会成乱码，编译器有时会报错，故采用16进制形式</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> szU8 </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">abcd1234\xe4\xbd\xa0\xe6\x88\x91\xe4\xbb\x96\x00</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">预转换，得到所需空间的大小</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> wcsLen </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), NULL, </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">分配空间要给'\0'留个空间，MultiByteToWideChar不会给'\0'空间</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    wchar_t</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> wszString </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> wchar_t[wcsLen </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">];<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">转换</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszString, wcsLen);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">最后加上'\0'</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    wszString[wcsLen] </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">'</span>
						<span style="COLOR: #000000">\0</span>
						<span style="COLOR: #000000">'</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">unicode版的MessageBox API</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    ::MessageBoxW(GetSafeHwnd(), wszString, wszString, MB_OK);<br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">写文本同ansi to unicode</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />
						</span>
						<span style="COLOR: #000000">}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>
				<br />
				<br />Ansi转换utf8和utf8转换Ansi就是上面2个的结合，把unicode作为中间量，进行2次转换即可<br /><br />by greatws </p>
<img src ="http://www.blogjava.net/Yipak/aggbug/229223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yipak/" target="_blank">死神</a> 2008-09-16 17:59 <a href="http://www.blogjava.net/Yipak/articles/229223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在C语言中怎样获得汉字编码?</title><link>http://www.blogjava.net/Yipak/articles/229069.html</link><dc:creator>死神</dc:creator><author>死神</author><pubDate>Mon, 15 Sep 2008 17:11:00 GMT</pubDate><guid>http://www.blogjava.net/Yipak/articles/229069.html</guid><wfw:comment>http://www.blogjava.net/Yipak/comments/229069.html</wfw:comment><comments>http://www.blogjava.net/Yipak/articles/229069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yipak/comments/commentRss/229069.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yipak/services/trackbacks/229069.html</trackback:ping><description><![CDATA[C语言中，我们用整数输出字符得到的就是该字符的ASII码，如用整数输出a，得到97 <br /><br />但是，要是用字符数组存的汉字，怎样获得他的编码？汉字用的是两个字节存储，是不是这两个字节都有ASII码？那该怎么获得他们？然后把他们统一成一个编码？<br /><br /><br />汉字编码分好几种，不知道你想问的是哪种？ <br /><br />C/C++支持的是ASCII，不过汉字编码中，GB2312与ASCII是兼容的，所以可以在C中获得汉字的GB2312编码 <br /><br />GB2312是两个字节的，第一字节是高八位，第二字节是低八位，比如下面的程序： <br /><br />#include&lt;stdio.h&gt; <br />#include&lt;string.h&gt; <br />int main() <br />{ <br />char a[5]; <br />strcpy(a,"啊"); <br />printf("%XH %XH\n",(unsigned char)a[0],(unsigned char)a[1]); <br />return 0; <br />} <br /><br />a[0]是“啊”字的高八位，a[1]是低八位，程序运行结果是a[0]=B0 a[1]=A1，用16进制表示的，所以“啊”字的GB2312编码是B0A1了~ <br /><br />输出时要强制转换成unsigned char，不然就变成负数了，因为编码是以8位的无符号整数为单位的 <br /><br />当然也可以转成10进制啦，比如 <br /><br />int b; <br />b=(unsigned char)a[0]*256+(unsigned char)a[1]; <br /><br />b即为汉字的10进制GB2312编码了<br /><br /><img src ="http://www.blogjava.net/Yipak/aggbug/229069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yipak/" target="_blank">死神</a> 2008-09-16 01:11 <a href="http://www.blogjava.net/Yipak/articles/229069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++常量的表示</title><link>http://www.blogjava.net/Yipak/articles/227334.html</link><dc:creator>死神</dc:creator><author>死神</author><pubDate>Fri, 05 Sep 2008 14:24:00 GMT</pubDate><guid>http://www.blogjava.net/Yipak/articles/227334.html</guid><wfw:comment>http://www.blogjava.net/Yipak/comments/227334.html</wfw:comment><comments>http://www.blogjava.net/Yipak/articles/227334.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yipak/comments/commentRss/227334.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yipak/services/trackbacks/227334.html</trackback:ping><description><![CDATA[
		<font face="宋体" size="4"> C++常量的表示</font>
		<div>
				<br />
				<font face="宋体" size="4"> </font>
		</div>
		<div>
				<font face="宋体" size="4">    一、char型常量</font>
		</div>
		<div>
				<font face="宋体" size="4">
						<br />    (一)单个字符:用单引号定界，如'a'，C++转义字符如下：<br />        (01)\n        换行<br />        (02)\r        回车<br />        (03)\t        水平制表符<br />        (04)\v        垂直制表符<br />        (05)\b        退格<br />        (06)\a        振铃<br />        (07)\\        字符\<br />        (08)\'        字符'<br />        (09)\"        字符"<br />        (10)\...      1-3位八进制ASCII码代表的字符('\101')<br />        (11)\x.....   十六进制ASCII码代表的字符，位数约束不严格，在字符串表示某个字符时请慎</font>
				<font face="宋体" size="4">用之<br />        (12)\uxxxx    四位16进制数字<br />          或\Uxxxxxxxx八位16进制数字实现通用符号(Universal character name)<br />          注意，必须是四位或八位，位数少或多都会出错。</font>
		</div>
		<div>
				<font face="宋体" size="4">    </font>
		</div>
		<div>
				<font face="宋体" size="4">    (二)字符串，用双引号定界，如"Code::Blocks"，注意字符串的长度与占用内存的大小，因字符串结</font>
				<font face="宋体" size="4">束标志为'\0'，所以占用内存的大小比实际可用长度多1个字符。字符串结束标志不必特别指明，</font>
				<font face="宋体" size="4">"abcdeabcde\0",特别指明反而会再多占用一个字节的内存空间。<br />#include &lt;iostream&gt;<br />#include &lt;cstring&gt;<br />    <br />using namespace std;</font>
		</div>
		<div>
				<font face="宋体" size="4">
				</font> </div>
		<div>
				<font face="宋体" size="4">int main(int argc,char** argv) {<br />    char s[13]="abcdeabcde";</font>
		</div>
		<div>
				<font face="宋体" size="4">    char s1[]="abcdeabcde";</font>
		</div>
		<div>
				<font face="宋体" size="4">    char s2[]="abcdeabcde\0\0\0\0";<br />    cout&lt;&lt;sizeof(s)&lt;&lt;endl;<br />    cout&lt;&lt;strlen(s)&lt;&lt;endl;</font>
		</div>
		<div>
				<font face="宋体" size="4">    cout&lt;&lt;sizeof(s1)&lt;&lt;endl;<br />    cout&lt;&lt;strlen(s1)&lt;&lt;endl;</font>
		</div>
		<div>
				<font face="宋体" size="4">    cout&lt;&lt;sizeof(s2)&lt;&lt;endl;<br />    cout&lt;&lt;strlen(s2)&lt;&lt;endl;    <br />    return EXIT_SUCCESS;<br />}<br />//-----<br />结果为：<br />13<br />10</font>
		</div>
		<div>
				<font face="宋体" size="4">11</font>
		</div>
		<div>
				<font face="宋体" size="4">10</font>
		</div>
		<div>
				<font face="宋体" size="4">15</font>
		</div>
		<div>
				<font face="宋体" size="4">10<br />//-----</font>
		</div>
		<div>
				<font face="宋体" size="4">    </font>
		</div>
		<div>
				<font face="宋体" size="4">    (三)wchar_t型常量加前缀L，只能是大写L。如:<br />        wchar_t c=L'A';//这里的L可不加，看编译器是否认可<br />        wchar_t cc[]=L"mytest";//这里的L必须加</font>
		</div>
		<div>
				<font face="宋体" size="4">例:<br />#include &lt;iostream&gt;</font>
		</div>
		<div>
				<font face="宋体" size="4">using std::cout;<br />using std::endl;</font>
		</div>
		<div>
				<font face="宋体" size="4">int main(int argc,char** argv) {<br />    wchar_t c=L'A';<br />    char cc='A';<br />    wchar_t cp[]=L"mytest";<br />    char ccp[]="mytest1";<br />    cout&lt;&lt;c&lt;&lt;endl;<br />    cout&lt;&lt;(char)c&lt;&lt;endl;<br />    cout&lt;&lt;cc&lt;&lt;endl;<br />    cout&lt;&lt;cp&lt;&lt;endl;<br />    cout&lt;&lt;ccp&lt;&lt;endl;<br />    return EXIT_SUCCESS;<br />}<br />//-----<br />65<br />A<br />A<br />0x22ff60<br />mytest1<br />//-----</font>
		</div>
		<div>
				<font face="宋体" size="4">
				</font> </div>
		<div>
				<font face="宋体" size="4">    二、整型常量</font>
		</div>
		<div>
				<font face="宋体" size="4">
						<br /> </font>
		</div>
		<div>
				<font face="宋体" size="4">    (一)书写常量时，若不加任何修饰符，编译器通常会认为是int整型，但有时也会根据操作自动实现</font>
				<font face="宋体" size="4">合适的转换。<br />#include &lt;iostream&gt;<br />#include &lt;climits&gt;</font>
		</div>
		<div>
				<font face="宋体" size="4">using namespace std;</font>
		</div>
		<div>
				<font face="宋体" size="4">int main(int argc,char** argv) {<br />    cout&lt;&lt;INT_MAX&lt;&lt;endl;<br />    cout&lt;&lt;SHRT_MAX&lt;&lt;endl;<br />    short x=32768;<br />    short k=32767+1;<br />    long long y=2147483647;<br />    long long d=INT_MAX+1;<br />    cout&lt;&lt;x&lt;&lt;endl;<br />    cout&lt;&lt;k&lt;&lt;endl;<br />    cout&lt;&lt;y&lt;&lt;endl;<br />    cout&lt;&lt;d&lt;&lt;endl;<br />    return EXIT_SUCCESS;<br />}<br />//-----<br />2147483647<br />32767<br />-32768<br />-32768<br />2147483647<br />-2147483648<br />//-----</font>
		</div>
		<div>
				<font face="宋体" size="4">
				</font> </div>
		<div>
				<font face="宋体" size="4">    (二)无符号整型后缀是U(u),long型后缀是L(l),long long型后缀是LL(ll)，L或LL或以与U组合。</font>
		</div>
		<div>
				<br />
				<font face="宋体" size="4">    三、浮点型常量</font>
		</div>
		<div>
				<font face="宋体" size="4">
						<br />    默认是double类型，表示float类型常量加后缀F(f)，表示long double类型常量加后缀L(l)。</font>
		</div>
		<div>
				<font face="宋体" size="4">
				</font> </div>
		<div>
				<font face="宋体" size="4">    四、布尔型常量只有true和false，只认小写。当然可以用常数来表示，0为假，非零为真。</font>
		</div>
		<div> </div>
		<div>
				<font face="宋体" size="4">bool x=false;<br />bool y=1.234;<br />cout&lt;&lt;x&lt;&lt;endl;<br />cout.setf(ios_base::boolalpha);<br />cout&lt;&lt;y&lt;&lt;endl;</font>
		</div>
		<div>
				<font face="宋体" size="4">//-----<br />0<br />true<br />//-----</font>
		</div>
		<div>
				<font face="宋体" size="4">
				</font> </div>
		<div>
				<font face="宋体" size="4">例1:只有一个函数，但调用时参数不同，编译器尽量匹配<br />#include &lt;iostream&gt;</font>
		</div>
		<div>
				<font face="宋体" size="4">using namespace std;</font>
		</div>
		<div>
				<font face="宋体" size="4">void show(long);</font>
		</div>
		<div>
				<font face="宋体" size="4">int main(int argc,char** argv) {<br />    show(123);<br />    show(123L);<br />    show(123UL);<br />}</font>
		</div>
		<div>
				<font face="宋体" size="4">void show(long demo) {<br />    cout&lt;&lt;"long"&lt;&lt;endl;<br />}<br />//-----<br />long<br />long<br />long<br />//-----</font>
		</div>
		<div>
				<font face="宋体" size="4">例2:有多个函数，编译器会认为是人为设计函数重载，将不再自动匹配<br />#include &lt;iostream&gt;</font>
		</div>
		<div>
				<font face="宋体" size="4">using namespace std;</font>
		</div>
		<div>
				<font face="宋体" size="4">void show(int);<br />void show(long);<br />void show(unsigned long);</font>
		</div>
		<div>
				<font face="宋体" size="4">int main(int argc,char** argv) {<br />    show(123);<br />    show(123L);<br />    show(123UL);//改为show(123LL)试试如何？将会出错。<br />}</font>
		</div>
		<div>
				<font face="宋体" size="4">void show(int demo) {<br />    cout&lt;&lt;"int"&lt;&lt;endl;<br />}<br />void show(long demo) {<br />    cout&lt;&lt;"long"&lt;&lt;endl;<br />}<br />void show(unsigned long demo) {<br />    cout&lt;&lt;"unsigned long"&lt;&lt;endl;<br />}<br />//-----<br />int<br />long<br />unsigned long<br />//-----</font>
		</div>
<img src ="http://www.blogjava.net/Yipak/aggbug/227334.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yipak/" target="_blank">死神</a> 2008-09-05 22:24 <a href="http://www.blogjava.net/Yipak/articles/227334.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC_文件操作</title><link>http://www.blogjava.net/Yipak/articles/227022.html</link><dc:creator>死神</dc:creator><author>死神</author><pubDate>Thu, 04 Sep 2008 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/Yipak/articles/227022.html</guid><wfw:comment>http://www.blogjava.net/Yipak/comments/227022.html</wfw:comment><comments>http://www.blogjava.net/Yipak/articles/227022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yipak/comments/commentRss/227022.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yipak/services/trackbacks/227022.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">1</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的查找</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br /></font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当对一个文件操作时，如果不知道该文件是否存在，就要首先进行查找。</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">MFC</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中有一个专门用来进行文件查找的类</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“CFileFind”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />CString strFileTitle; <br /><br />CFileFind finder; <br /><br />BOOL bWorking = finder.FindFile("C:\\windows\\sysbkup\\*.cab"); <br /><br />while(bWorking) <br /><br />{ <br /><br />bWorking=finder.FindNextFile(); <br /><br />strFileTitle=finder.GetFileTitle(); <br /><br />} <br /><br />2</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的打开</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">/</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">保存对话框</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br /></font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">让用户选择文件进行打开和存储操作时，就要用到文件打开</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">/</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">保存对话框。</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">MFC</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的类</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“CFileDialog”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用于实现这种功能。使用</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“CFileDialog”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">声明一个对象时，第一个</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">BOOL</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">型参数用于指定文件的打开或保存，当为</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">TRUE</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时将构造一个文件打开对话框，为</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">FALSE</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时构造一个文件保存对话框。</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br /></font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在构造</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“CFileDialog”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象时，如果在参数中指定了</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“OFN_ALLOWMULTISELECT”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">风格，则在此对话框中可以进行多选操作。此时要重点注意为此</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“CFileDialog”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象的</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“m_ofn.lpstrFile”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分配一块内存，用于存储多选操作所返回的所有文件路径名，如果不进行分配或分配的内存过小就会导致操作失败。下面这段程序演示了文件打开对话框的使用方法。</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />CFileDialog mFileDlg(TRUE, NULL,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT, "All Files (*.*)|*.*| |", AfxGetMainWnd());<br /><br />CString str(" ", 10000); <br /><br />mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000); <br /><br />str.ReleaseBuffer(); <br /><br />POSITION mPos=mFileDlg.GetStartPosition(); <br /><br />CString pathName(" ", 128); <br /><br />CFileStatus status; <br /><br />while(mPos!=NULL) <br /><br />{ <br /><br />pathName=mFileDlg.GetNextPathName(mPos); <br /><br />CFile::GetStatus(pathName, status); <br /><br />} <br /><br />3</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的读写</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br /></font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的读写非常重要，下面将重点进行介绍。文件读写最普通的方法是直接使用</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“CFile”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类进行，如文件的读写可以使用下面的方法：</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />//</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对文件进行读操作</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />char sRead[2]; <br /><br />CFile mFile(_T("user.txt"),CFile::modeRead); <br /><br />if(mFile.GetLength()&lt;2) <br /><br />return; <br /><br />mFile.Read(sRead</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">2); <br /><br />mFile.Close(); <br /><br />//</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对文件进行写操作</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />CFile mFile(_T("user.txt"), CFile::modeWrite|CFile::modeCreate); <br /><br />mFile.Write(sRead</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">2); <br /><br />mFile.Flush(); <br /><br />mFile.Close(); <br /><br /></font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">虽然这种方法最为基本，但是它使用烦琐，而且功能非常简单。这里推荐的是使用</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“CArchive”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，它的使用方法简单且功能十分强大。首先还是用</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“CFile”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">声明一个对象，然后用这个对象的指针做参数声明一个</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“CArchive”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象，这样就可以非常方便地存储各种复杂的数据类型了。它的使用方法见下例：</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />//</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对文件进行写操作</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />CString strTemp; <br /><br />CFile mFile; <br /><br />mFile.Open("d:\\dd\\try.TRY",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite); <br /><br />CArchive ar(&amp;mFile</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">CArchive::store); <br /><br />ar&lt;&lt;strTemp; <br /><br />ar.Close(); <br /><br />mFile.Close(); <br /><br />//</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对文件进行读操作</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />CFile mFile; <br /><br />if(mFile.Open("d:\\dd\\try.TRY"</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">CFile::modeRead)==0) <br /><br />return; <br /><br />CArchive ar(&amp;mFile</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">CArchive::load); <br /><br />ar&gt;&gt;strTemp; <br /><br />ar.Close(); <br /><br />mFile.Close(); <br /><br />“CArchive”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“&lt;&lt;”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“&gt;&gt;”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作符用于简单数据类型的读写，对于</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“CObject”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">派生类的对象的存取要使用</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">ReadObject()</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">WriteObject()</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。使用</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“CArchive”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">ReadClass()</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">WriteClass()</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还可以进行类的读写，如：</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />//</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">存储</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">CAboutDlg</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />ar.WriteClass(RUNTIME_CLASS(CAboutDlg)); <br /><br />//</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">读取</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">CAboutDlg</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />CRuntimeClass*mRunClass=ar.Read <br /><br />Class(); <br /><br />//</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">CAboutDlg</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />CObject* pObject=mRunClass-&gt;CreateObject(); <br /><br />((CDialog* )pObject)-&gt;DoModal(); <br /><br /></font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">虽然</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">VC</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供的文档</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">/</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">视结构中的文档也可进行这些操作，但是不容易理解、使用和管理，如果要进行的文件操作只是简单的读写整行的字符串，建议使用</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“CStdioFile”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，用它来进行此类操作非常方便，如下例：</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />CStdioFile mFile; <br /><br />CFileException mExcept; <br /><br />mFile.Open( "d:\\temp\\aa.bat", CFile::modeWrite, &amp;mExcept); <br /><br />CString string="I am a string."; <br /><br />mFile.WriteString(string); <br /><br />mFile.Close(); <br /><br />4</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．临时文件的使用</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br /></font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正规软件经常用到临时文件，经常可以看到</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“C:\Windows\Temp”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下有大量的扩展名为</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">“.tmp”</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的文件，这些就是程序运行时建立的临时文件。临时文件的使用方法基本与常规文件一样，只是文件名应该调用函数</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">GetTempFileName()</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获得。它的第一个参数是建立此临时文件的路径，第二个参数是建立临时文件名的前缀，第四个参数用于得到建立的临时文件名。得到此临时文件名以后，就可以用它来建立并操作文件了，如：</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />char szTempPath[_MAX_PATH]</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">szTempfile[_MAX_PATH]; <br /><br />GetTempPath(_MAX_PATH, szTempPath); <br /><br />GetTempFileName(szTempPath</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">_T ("my_")</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">0</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">szTempfile); <br /><br />CFile m_tempFile(szTempfile</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">CFile:: modeCreate|CFile:: modeWrite); <br /><br />char m_char='a'; <br /><br />m_tempFile.Write(&amp;m_char</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">2); <br /><br />m_tempFile.Close(); <br /><br />5</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">．文件的复制、删除等</span>
				</font>
				<font size="3">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman"> <br /><br />MFC</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中没有提供直接进行这些操作的功能，因而要使用</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">SDK</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">SDK</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的文件相关函数常用的有</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">CopyFile()</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">CreateDirectory()</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">DeleteFile()</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">MoveFile()</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。它们的用法很简单，可参考</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Times New Roman">MSDN</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
				</font>
		</p>
<img src ="http://www.blogjava.net/Yipak/aggbug/227022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yipak/" target="_blank">死神</a> 2008-09-04 17:25 <a href="http://www.blogjava.net/Yipak/articles/227022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈VC++结合FLASH开发精美程序界面</title><link>http://www.blogjava.net/Yipak/articles/227016.html</link><dc:creator>死神</dc:creator><author>死神</author><pubDate>Thu, 04 Sep 2008 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/Yipak/articles/227016.html</guid><wfw:comment>http://www.blogjava.net/Yipak/comments/227016.html</wfw:comment><comments>http://www.blogjava.net/Yipak/articles/227016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yipak/comments/commentRss/227016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yipak/services/trackbacks/227016.html</trackback:ping><description><![CDATA[做过界面开发的人想必都清楚如果要用VC++来开发漂亮的程序界面其难度真是苦不堪言, 当然VC++可以作出漂亮的界面但要投入大量的人力和时间其代码量可以用海量来形容。BUG自然也就不计其数。本文主要介绍如何采用VC++结合FLASH在短时间内以及很少的人力投入的情况开发出精美漂亮的软件界面。在本例中VC++主要进行相关数据逻辑及业务处理，FLASH则进行相关的界面表现。FLASH和VC++之间采用XML流通信。VC++的XML解析库为开源的TinyXml解析库。 本实例的开发环境为visual studio 2003 + FLASH8.0。其效果图如下：<br /><img height="344" alt="" src="http://www.cppblog.com/images/cppblog_com/beifangying/show.jpg" width="490" align="left" border="0" /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />下面将进行详细介绍：<br />1、首先建一个基于MFC的对话框应用程序。<br />2、在对话框中插入名为Shockwave Flash Object的ActiveX控件.<br />3、为该FLASH控件添加相应的变量即FSCommand消息处理函数.<br />4、在OnInitDialog()函数添加如下代码将相关数据传给FLASH界面 
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO: 在此添加额外的初始化代码<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">加载flash界面</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> szBuf[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">];<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> szXml;<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    CString szFlashPath(m_FlashCtrl.GetModulePath());<br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    szFlashPath </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">演示界面.swf</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    m_FlashCtrl.LoadMovie(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, szFlashPath);<br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    MoveWindow(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">490</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">345</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    m_FlashCtrl.MoveWindow(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">490</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">345</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置标题栏</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    TiXmlElement xRoot(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">win_app</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    sprintf(szBuf, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%u</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0xf0000006</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">style</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, szBuf);<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">event</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    TiXmlElement xItem(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">item</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">我的测试程序</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    szXml </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> xRoot;<br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    m_FlashCtrl.SetVariable(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">_root.g_Protocol.win_data</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, szXml.c_str());<br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置组合框的数据</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    xRoot.Clear();<br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    szXml.clear();<br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">event</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">76</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    TiXmlElement xQuery(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">query</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sel_item</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">xRoot.InsertEndChild(xQuery);</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.RemoveAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">武林外传</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">西游记</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">三国演义</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">红楼梦</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">魔法英雄</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.InsertEndChild(xQuery);<br /></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    szXml </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> xRoot;<br /></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />     m_FlashCtrl.SetVariable(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">_root.g_Protocol.win_data</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, szXml.c_str());<br /></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置列表框数据</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">55</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    xRoot.Clear();<br /></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.Clear();<br /></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    szXml.clear();<br /></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">event</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">77</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sel_item</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    <br /></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">汉皇重色思倾国</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">御宇多年求不得</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">杨家有女初长成</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">养在深闺人未识</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">71</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">72</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">73</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">天生丽质难自弃</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">74</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">75</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">76</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.InsertEndChild(xQuery);<br /></span><span style="COLOR: #008080">77</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">78</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    szXml </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> xRoot;<br /></span><span style="COLOR: #008080">79</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    m_FlashCtrl.SetVariable(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">_root.g_Protocol.win_data</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, szXml.c_str());</span></div>5、在OnFsCommand()中处理FLASH发来的消息.<br /><a href="http://www.cppblog.com/"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> CUIShowDlg::OnFsCommand(LPCTSTR command, LPCTSTR args)<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img id="Codehighlighter1_60_659_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_659_Open_Text.style.display='none'; Codehighlighter1_60_659_Closed_Image.style.display='inline'; Codehighlighter1_60_659_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_60_659_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_659_Closed_Text.style.display='none'; Codehighlighter1_60_659_Open_Image.style.display='inline'; Codehighlighter1_60_659_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_60_659_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_60_659_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id="Codehighlighter1_68_597_Open_Image" onclick="this.style.display='none'; Codehighlighter1_68_597_Open_Text.style.display='none'; Codehighlighter1_68_597_Closed_Image.style.display='inline'; Codehighlighter1_68_597_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_68_597_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_68_597_Closed_Text.style.display='none'; Codehighlighter1_68_597_Open_Image.style.display='inline'; Codehighlighter1_68_597_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_68_597_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_68_597_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> nEvent </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        TiXmlDocument xmlData;<br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        xmlData.Parse(command);<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (xmlData.Error())<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img id="Codehighlighter1_164_189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_164_189_Open_Text.style.display='none'; Codehighlighter1_164_189_Closed_Image.style.display='inline'; Codehighlighter1_164_189_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_164_189_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_164_189_Closed_Text.style.display='none'; Codehighlighter1_164_189_Open_Image.style.display='inline'; Codehighlighter1_164_189_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_164_189_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_164_189_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> (__LINE__);<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        TiXmlElement </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pRoot </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> xmlData.FirstChildElement();<br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (NULL </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> pRoot)<br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id="Codehighlighter1_268_293_Open_Image" onclick="this.style.display='none'; Codehighlighter1_268_293_Open_Text.style.display='none'; Codehighlighter1_268_293_Closed_Image.style.display='inline'; Codehighlighter1_268_293_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_268_293_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_268_293_Closed_Text.style.display='none'; Codehighlighter1_268_293_Open_Image.style.display='inline'; Codehighlighter1_268_293_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_268_293_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_268_293_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> (__LINE__);<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        pRoot</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Attribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">event</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">nEvent);<br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(nEvent)<br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id="Codehighlighter1_353_594_Open_Image" onclick="this.style.display='none'; Codehighlighter1_353_594_Open_Text.style.display='none'; Codehighlighter1_353_594_Closed_Image.style.display='inline'; Codehighlighter1_353_594_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_353_594_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_353_594_Closed_Text.style.display='none'; Codehighlighter1_353_594_Open_Image.style.display='inline'; Codehighlighter1_353_594_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_353_594_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_353_594_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0xff000000</span><span style="COLOR: #000000">:            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">移动窗口消息</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0xff000001</span><span style="COLOR: #000000">:            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">关闭窗口</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            EndDialog(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0xff000003</span><span style="COLOR: #000000">:            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">最小化窗口</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            ShowWindow(SW_MINIMIZE);<br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">:<br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (<img src="http://www.cppblog.com/Images/dot.gif" />)<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img id="Codehighlighter1_613_657_Open_Image" onclick="this.style.display='none'; Codehighlighter1_613_657_Open_Text.style.display='none'; Codehighlighter1_613_657_Closed_Image.style.display='inline'; Codehighlighter1_613_657_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_613_657_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_613_657_Closed_Text.style.display='none'; Codehighlighter1_613_657_Open_Image.style.display='inline'; Codehighlighter1_613_657_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_613_657_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_613_657_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        TRACE(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\r\n收到无效的命令 : %s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, command);    <br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /></span></div></a>到此一款精美的软件界面已经开发完成。有兴趣的朋友可以下载我的源代码看看。<br /><a href="http://www.cppblog.com/Files/beifangying/UIShow.rar">/Files/beifangying/UIShow.rar</a><br /><img src ="http://www.blogjava.net/Yipak/aggbug/227016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yipak/" target="_blank">死神</a> 2008-09-04 17:16 <a href="http://www.blogjava.net/Yipak/articles/227016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈VC++结合FLASH开发精美程序界面</title><link>http://www.blogjava.net/Yipak/articles/227017.html</link><dc:creator>死神</dc:creator><author>死神</author><pubDate>Thu, 04 Sep 2008 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/Yipak/articles/227017.html</guid><wfw:comment>http://www.blogjava.net/Yipak/comments/227017.html</wfw:comment><comments>http://www.blogjava.net/Yipak/articles/227017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yipak/comments/commentRss/227017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yipak/services/trackbacks/227017.html</trackback:ping><description><![CDATA[做过界面开发的人想必都清楚如果要用VC++来开发漂亮的程序界面其难度真是苦不堪言, 当然VC++可以作出漂亮的界面但要投入大量的人力和时间其代码量可以用海量来形容。BUG自然也就不计其数。本文主要介绍如何采用VC++结合FLASH在短时间内以及很少的人力投入的情况开发出精美漂亮的软件界面。在本例中VC++主要进行相关数据逻辑及业务处理，FLASH则进行相关的界面表现。FLASH和VC++之间采用XML流通信。VC++的XML解析库为开源的TinyXml解析库。 本实例的开发环境为visual studio 2003 + FLASH8.0。其效果图如下：<br /><img height="344" alt="" src="http://www.cppblog.com/images/cppblog_com/beifangying/show.jpg" width="490" align="left" border="0" /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />下面将进行详细介绍：<br />1、首先建一个基于MFC的对话框应用程序。<br />2、在对话框中插入名为Shockwave Flash Object的ActiveX控件.<br />3、为该FLASH控件添加相应的变量即FSCommand消息处理函数.<br />4、在OnInitDialog()函数添加如下代码将相关数据传给FLASH界面 
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO: 在此添加额外的初始化代码<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">加载flash界面</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> szBuf[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">];<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> szXml;<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    CString szFlashPath(m_FlashCtrl.GetModulePath());<br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    szFlashPath </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">演示界面.swf</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    m_FlashCtrl.LoadMovie(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, szFlashPath);<br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    MoveWindow(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">490</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">345</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    m_FlashCtrl.MoveWindow(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">490</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">345</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置标题栏</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    TiXmlElement xRoot(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">win_app</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    sprintf(szBuf, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%u</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">0xf0000006</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">style</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, szBuf);<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">event</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    TiXmlElement xItem(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">item</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">我的测试程序</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    szXml </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> xRoot;<br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    m_FlashCtrl.SetVariable(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">_root.g_Protocol.win_data</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, szXml.c_str());<br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置组合框的数据</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    xRoot.Clear();<br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    szXml.clear();<br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">event</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">76</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    TiXmlElement xQuery(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">query</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sel_item</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">xRoot.InsertEndChild(xQuery);</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.RemoveAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">武林外传</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">西游记</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">三国演义</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">红楼梦</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">魔法英雄</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.InsertEndChild(xQuery);<br /></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    szXml </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> xRoot;<br /></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />     m_FlashCtrl.SetVariable(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">_root.g_Protocol.win_data</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, szXml.c_str());<br /></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置列表框数据</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">55</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">    xRoot.Clear();<br /></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.Clear();<br /></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    szXml.clear();<br /></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">event</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">77</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sel_item</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    <br /></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">汉皇重色思倾国</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">御宇多年求不得</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">杨家有女初长成</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">养在深闺人未识</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">71</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">72</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">73</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xItem.SetAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">天生丽质难自弃</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">74</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xQuery.InsertEndChild(xItem);<br /></span><span style="COLOR: #008080">75</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">76</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    xRoot.InsertEndChild(xQuery);<br /></span><span style="COLOR: #008080">77</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">78</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    szXml </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> xRoot;<br /></span><span style="COLOR: #008080">79</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" />    m_FlashCtrl.SetVariable(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">_root.g_Protocol.win_data</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, szXml.c_str());</span></div>5、在OnFsCommand()中处理FLASH发来的消息.<br /><a href="http://www.cppblog.com/"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> CUIShowDlg::OnFsCommand(LPCTSTR command, LPCTSTR args)<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img id="Codehighlighter1_60_659_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_659_Open_Text.style.display='none'; Codehighlighter1_60_659_Closed_Image.style.display='inline'; Codehighlighter1_60_659_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_60_659_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_659_Closed_Text.style.display='none'; Codehighlighter1_60_659_Open_Image.style.display='inline'; Codehighlighter1_60_659_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_60_659_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_60_659_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id="Codehighlighter1_68_597_Open_Image" onclick="this.style.display='none'; Codehighlighter1_68_597_Open_Text.style.display='none'; Codehighlighter1_68_597_Closed_Image.style.display='inline'; Codehighlighter1_68_597_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_68_597_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_68_597_Closed_Text.style.display='none'; Codehighlighter1_68_597_Open_Image.style.display='inline'; Codehighlighter1_68_597_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_68_597_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_68_597_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> nEvent </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        TiXmlDocument xmlData;<br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        xmlData.Parse(command);<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (xmlData.Error())<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img id="Codehighlighter1_164_189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_164_189_Open_Text.style.display='none'; Codehighlighter1_164_189_Closed_Image.style.display='inline'; Codehighlighter1_164_189_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_164_189_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_164_189_Closed_Text.style.display='none'; Codehighlighter1_164_189_Open_Image.style.display='inline'; Codehighlighter1_164_189_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_164_189_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_164_189_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> (__LINE__);<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        TiXmlElement </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pRoot </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> xmlData.FirstChildElement();<br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (NULL </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> pRoot)<br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id="Codehighlighter1_268_293_Open_Image" onclick="this.style.display='none'; Codehighlighter1_268_293_Open_Text.style.display='none'; Codehighlighter1_268_293_Closed_Image.style.display='inline'; Codehighlighter1_268_293_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_268_293_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_268_293_Closed_Text.style.display='none'; Codehighlighter1_268_293_Open_Image.style.display='inline'; Codehighlighter1_268_293_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_268_293_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_268_293_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> (__LINE__);<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        pRoot</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Attribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">event</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">nEvent);<br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(nEvent)<br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id="Codehighlighter1_353_594_Open_Image" onclick="this.style.display='none'; Codehighlighter1_353_594_Open_Text.style.display='none'; Codehighlighter1_353_594_Closed_Image.style.display='inline'; Codehighlighter1_353_594_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_353_594_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_353_594_Closed_Text.style.display='none'; Codehighlighter1_353_594_Open_Image.style.display='inline'; Codehighlighter1_353_594_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_353_594_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_353_594_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0xff000000</span><span style="COLOR: #000000">:            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">移动窗口消息</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0xff000001</span><span style="COLOR: #000000">:            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">关闭窗口</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            EndDialog(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0xff000003</span><span style="COLOR: #000000">:            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">最小化窗口</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            ShowWindow(SW_MINIMIZE);<br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">:<br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (<img src="http://www.cppblog.com/Images/dot.gif" />)<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img id="Codehighlighter1_613_657_Open_Image" onclick="this.style.display='none'; Codehighlighter1_613_657_Open_Text.style.display='none'; Codehighlighter1_613_657_Closed_Image.style.display='inline'; Codehighlighter1_613_657_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_613_657_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_613_657_Closed_Text.style.display='none'; Codehighlighter1_613_657_Open_Image.style.display='inline'; Codehighlighter1_613_657_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_613_657_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_613_657_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        TRACE(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\r\n收到无效的命令 : %s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, command);    <br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top" /></span></div></a>到此一款精美的软件界面已经开发完成。有兴趣的朋友可以下载我的源代码看看。<br /><a href="http://www.cppblog.com/Files/beifangying/UIShow.rar">/Files/beifangying/UIShow.rar</a><br /><img src ="http://www.blogjava.net/Yipak/aggbug/227017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yipak/" target="_blank">死神</a> 2008-09-04 17:16 <a href="http://www.blogjava.net/Yipak/articles/227017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C/C++变量申明</title><link>http://www.blogjava.net/Yipak/articles/226947.html</link><dc:creator>死神</dc:creator><author>死神</author><pubDate>Thu, 04 Sep 2008 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/Yipak/articles/226947.html</guid><wfw:comment>http://www.blogjava.net/Yipak/comments/226947.html</wfw:comment><comments>http://www.blogjava.net/Yipak/articles/226947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yipak/comments/commentRss/226947.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yipak/services/trackbacks/226947.html</trackback:ping><description><![CDATA[
		<p>曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗？本文将由易到难，一步一步教会你如何理解这种复杂的C/C++声明：我们将从每天都能碰到的较简单的声明入手，然后逐步加入const修饰符和typedef，还有函数指针，最后介绍一个能够让你准确地 理解任何C/C++声明的“右左法则”。需要强调一下的是，复杂的C/C++声明并不是好的编程风格；我这里仅仅是教你如何去理解这些声明。注 意：为了保证能够在同一行上显示代码和相关注释，本文最好在至少1024x768分辨率的显示器上阅读。  </p>
		<p>基础  </p>
		<p>让我们从一个非常简单的例子开始，如下：  </p>
		<p>int n;  </p>
		<p>这个应该被理解为“declare n as an int”（n是一个int型的变量）。  </p>
		<p>接下去来看一下指针变量，如下：  </p>
		<p>int *p;  </p>
		<p>这个应该被理解为“declare p as an int *”（p是一个int *型的变量），或者说p是一个指向一个int型变量的指针。我想在这里展开讨论一下：我觉得在声明一个指针（或引用）类型的变量时，最好将*（或&amp;）写在紧靠变量之前，而不是紧跟基本类型之后。这样可以避免一些理解上的误区，比如：  </p>
		<p>int*  p,q;  </p>
		<p>第一眼看去，好像是p和q都是int*类型的，但事实上，只有p是一个指针，而q是一个最简单的int型变量。  </p>
		<p>我们还是继续我们前面的话题，再来看一个指针的指针的例子：  </p>
		<p>char **argv;  </p>
		<p>理论上，对于指针的级数没有限制，你可以定义一个浮点类型变量的指针的指针的指针的指针...  </p>
		<p>再来看如下的声明：  </p>
		<p>int RollNum[30][4];<br />int (*p)[4]=RollNum;<br />int *q[5];  </p>
		<p>这里，p被声明为一个指向一个4元素（int类型）数组的指针，而q被声明为一个包含5个元素（int类型的指针）的数组。  </p>
		<p>另外，我们还可以在同一个声明中混合实用*和&amp;，如下：  </p>
		<p>int **p1; // p1 is a pointer  to a pointer  to an int.  <br />int *&amp;p2; // p2 is a reference to a pointer  to an int.  <br />int &amp;*p3; // ERROR: Pointer  to a reference is illegal.  <br />int &amp;&amp;p4; // ERROR: Reference to a reference is illegal.  </p>
		<p>注：p1是一个int类型的指针的指针；<br />      p2是一个int类型的指针的引用；<br />      p3是一个int类型引用的指针（不合法！）；<br />      p4是一个int类型引用的引用（不合法！）。  </p>
		<p>const修饰符<br />当你想阻止一个变量被改变，可能会用到const关键字。在你给一个变量加上const修饰符的同时，通常需要对它进行初始化，因为以后的任何 </p>
		<p>时候你将没有机会再去改变它。例如：  </p>
		<p>const int n=5;<br />int const m=10;  </p>
		<p>上述两个变量n和m其实是同一种类型的--都是const int（整形恒量）。因为C++标准规定，const关键字放在类型或变量名之前等价的。我个人 </p>
		<p>更喜欢第一种声明方式，因为它更突出了const修饰符的作用。  </p>
		<p>当const与指针一起使用时，容易让人感到迷惑。例如，我们来看一下下面的p和q的声明：  </p>
		<p>const int *p;<br />int const *q;  </p>
		<p>他们当中哪一个代表const int类型的指针（const直接修饰int），哪一个代表int类型的const指针（const直接修饰指针）？实际上，p和q都 </p>
		<p>被声明为const int类型的指针。而int类型的const指针应该这样声明：  </p>
		<p>int * const r= &amp;n; // n has been declared as an int  </p>
		<p>这里，p和q都是指向const int类型的指针，也就是说，你在以后的程序里不能改变*p的值。而r是一个const指针，它在声明的时候被初始化指 </p>
		<p>向变量n（即r=&amp;n;）之后，r的值将不再允许被改变（但*r的值可以改变）。  </p>
		<p>组合上述两种const修饰的情况，我们来声明一个指向const int类型的const指针，如下：  </p>
		<p>const int * const p=&amp;n // n has been declared as const int<br />//------------------------------------------------------------------------<br />下面给出的一些关于const的声明，将帮助你彻底理清const的用法。不过请注意，下面的一些声明是不能被编译通过的，因为他们需要在声明 </p>
		<p>的同时进行初始化。为了简洁起见，我忽略了初始化部分；因为加入初始化代码的话，下面每个声明都将增加两行代码。  </p>
		<p>char ** p1;          //    pointer to    pointer to    char  <br />const char **p2;        //    pointer to    pointer to const char  <br />char * const * p3;       //    pointer to const pointer to    char  <br />const char * const * p4;    //    pointer to const pointer to const char  <br />char ** const p5;       // const pointer to    pointer to    char  <br />const char ** const p6;    // const pointer to    pointer to const char  <br />char * const * const p7;    // const pointer to const pointer to    char  <br />const char * const * const p8; // const pointer to const pointer to const char  </p>
		<p>注：<br />p1是指向char类型的指针的指针；<br />p2是指向const char类型的指针的指针；<br />p3是指向char类型的const指针；<br />p4是指向const char类型的const指针；<br />p5是指向char类型的指针的const指针；<br />p6是指向const char类型的指针的const指针；<br />p7是指向char类型const指针的const指针；<br />p8是指向const char类型的const指针的const指针。<br />//------------------------------------------------------------------------<br />typedef的妙用<br />typedef给你一种方式来克服“*只适合于变量而不适合于类型”的弊端。你可以如下使用typedef：  </p>
		<p>typedef char * PCHAR;<br />PCHAR p,q;  </p>
		<p>这里的p和q都被声明为指针。（如果不使用typedef，q将被声明为一个char变量，这跟我们的第一眼感觉不太一致！）下面有一些使用typedef </p>
		<p>的声明，并且给出了解释：  </p>
		<p>typedef char * a; // a is a pointer to a char  </p>
		<p>typedef a b();   // b is a function that returns  <br />          // a pointer to a char  </p>
		<p>typedef b *c;   // c is a pointer to a function  <br />          // that returns a pointer to a char  </p>
		<p>typedef c d();   // d is a function returning  <br />          // a pointer to a function  <br />          // that returns a pointer to a char  </p>
		<p>typedef d *e;   // e is a pointer to a function  <br />          // returning a pointer to a  <br />          // function that returns a  <br />          // pointer to a char  </p>
		<p>e var[10];     // var is an array of 10 pointers to  <br />          // functions returning pointers to  <br />          // functions returning pointers to chars.  </p>
		<p>typedef经常用在一个结构声明之前，如下。这样，当创建结构变量的时候，允许你不使用关键字struct（在C中，创建结构变量时要求使用str </p>
		<p>uct关键字，如struct tagPOINT a；而在C++中，struct可以忽略，如tagPOINT b）。  </p>
		<p>typedef struct tagPOINT<br />{<br />  int x;<br />  int y;<br />}POINT;  </p>
		<p>POINT p; /* Valid C code */<br />//------------------------------------------------------------------------<br />函数指针  </p>
		<p>函数指针可能是最容易引起理解上的困惑的声明。函数指针在DOS时代写TSR程序时用得最多；在Win32和X-Windows时代，他们被用在需要回调 函数的场合。当然，还有其它很多地方需要用到函数指针：虚函数表，STL中的一些模板，Win NT/2K/XP系统服务等。让我们来看一个函数指针 </p>
		<p>的简单例子：  </p>
		<p>int (*p)(char);  </p>
		<p>这里p被声明为一个函数指针，这个函数带一个char类型的参数，并且有一个int类型的返回值。另外，带有两个float类型参数、返回值是char </p>
		<p>类型的指针的指针的函数指针可以声明如下：  </p>
		<p>char ** (*p)(float, float);  </p>
		<p>那么，带两个char类型的const指针参数、无返回值的函数指针又该如何声明呢？参考如下：  </p>
		<p>void * (*a[5])(char * const, char * const);  </p>
		<p>“右左法则”[重要！！！]  </p>
		<p>The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you  </p>
		<p>encounter parentheses, the direction should be reversed. Once everything in the parentheses has been parsed, jump out of it.  </p>
		<p>Continue till the whole declaration has been parsed.  </p>
		<p>这是一个简单的法则，但能让你准确理解所有的声明。这个法则运用如下：从最内部的括号开始阅读声明，向右看，然后向左看。当你碰到一 </p>
		<p>个括号时就调转阅读的方向。括号内的所有内容都分析完毕就跳出括号的范围。这样继续，直到整个声明都被分析完毕。  </p>
		<p>对上述“右左法则”做一个小小的修正：当你第一次开始阅读声明的时候，你必须从变量名开始，而不是从最内部的括号。  </p>
		<p>下面结合例子来演示一下“右左法则”的使用。  </p>
		<p>int * (* (*fp1) (int) ) [10];  </p>
		<p>阅读步骤：<br />1. 从变量名开始 -------------------------------------------- fp1 2. 往右看，什么也没有，碰到了)，因此往左看，碰到一个* ------ 一个指针<br />3. 跳出括号，碰到了(int) ----------------------------------- 一个带一个int参数的函数<br />4. 向左看，发现一个* --------------------------------------- （函数）返回一个指针<br />5. 跳出括号，向右看，碰到[10] ------------------------------ 一个10元素的数组<br />6. 向左看，发现一个* --------------------------------------- 指针<br />7. 向左看，发现int ----------------------------------------- int类型  </p>
		<p>
				<br />总结：fp1被声明成为一个函数的指针,该函数返回指向指针数组的指针.  </p>
		<p>
				<br />再来看一个例子：  </p>
		<p>int *( *( *arr[5])())();  </p>
		<p>阅读步骤：<br />1. 从变量名开始 -------------------------------------------- arr 2. 往右看，发现是一个数组 ---------------------------------- 一个5元素的数组<br />3. 向左看，发现一个* --------------------------------------- 指针<br />4. 跳出括号，向右看，发现() -------------------------------- 不带参数的函数<br />5. 向左看，碰到* ------------------------------------------- （函数）返回一个指针<br />6. 跳出括号，向右发现() ------------------------------------ 不带参数的函数<br />7. 向左，发现* --------------------------------------------- （函数）返回一个指针<br />8. 继续向左，发现int --------------------------------------- int类型  </p>
		<p>总结：？？  </p>
		<p>
				<br />还有更多的例子：  </p>
		<p>float ( * ( *b()) [] )();       // b is a function that returns a  <br />                            // pointer to an array of pointers  <br />                            // to functions returning floats.  </p>
		<p>void * ( *c) ( char, int (*)());        // c is a pointer to a function that takes  <br />                                // two parameters:  <br />                                //   a char and a pointer to a  <br />                                //   function that takes no  <br />                                //   parameters and returns  <br />                                //   an int  <br />                                // and returns a pointer to void.  </p>
		<p>void ** (*d) (int &amp;,  <br />char **(*)(char *, char **));   // d is a pointer to a function that takes  <br />                            // two parameters:  <br />                            //   a reference to an int and a pointer  <br />                            //   to a function that takes two parameters:  <br />                            //    a pointer to a char and a pointer  <br />                            //    to a pointer to a char  <br />                            //   and returns a pointer to a pointer  <br />                            //   to a char  <br />                            // and returns a pointer to a pointer to void  </p>
		<p>float ( * ( * e[10])  <br />  (int &amp;) ) [5];              // e is an array of 10 pointers to  <br />                            // functions that take a single  <br />                            // reference to an int as an argument  <br />                            // and return pointers to  <br />                            // an array of 5 floats.   </p>
<img src ="http://www.blogjava.net/Yipak/aggbug/226947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yipak/" target="_blank">死神</a> 2008-09-04 14:44 <a href="http://www.blogjava.net/Yipak/articles/226947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言中格式化输入输出函数</title><link>http://www.blogjava.net/Yipak/articles/226943.html</link><dc:creator>死神</dc:creator><author>死神</author><pubDate>Thu, 04 Sep 2008 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/Yipak/articles/226943.html</guid><wfw:comment>http://www.blogjava.net/Yipak/comments/226943.html</wfw:comment><comments>http://www.blogjava.net/Yipak/articles/226943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yipak/comments/commentRss/226943.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yipak/services/trackbacks/226943.html</trackback:ping><description><![CDATA[
		<p>1.1.1 格式化输入输出函数<br />Turbo C2.0 标准库提供了两个控制台格式化输入、 输出函数printf( ) 和<br />scanf(), 这两个函数可以在标准输入输出设备上以各种不同的格式读写数据。<br />printf()函数用来向标准输出设备(屏幕)写数据; scanf() 函数用来从标准输入<br />设备(键盘)上读数据。下面详细介绍这两个函数的用法。<br />一、printf()函数<br />printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出<br />信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:<br />printf(”&lt;格式化字符串&gt;”, &lt;参量表&gt;);<br />其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原<br />样输出; 另一部分是格式化规定字符, 以”%”开始, 后跟一个或几个规定字符,<br />用来确定输出内容格式。<br />参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出<br />参数个数一样多, 各参数之间用”,”分开, 且顺序一一对应, 否则将会出现意想<br />不到的错误。<br />1. 格式化规定符<br />Turbo C2.0提供的格式化规定符如下:<br />━━━━━━━━━━━━━━━━━━━━━━━━━━<br />符号 作用<br />——————————————————————————<br />%d 十进制有符号整数<br />%u 十进制无符号整数<br />%f 浮点数<br />%s 字符串<br />%c 单个字符<br />%p 指针的值<br />%e 指数形式的浮点数<br />%x, %X 无符号以十六进制表示的整数<br />%0 无符号以八进制表示的整数<br />%g 自动选择合适的表示法<br />━━━━━━━━━━━━━━━━━━━━━━━━━━<br />说明:<br />(1). 可以在”%”和字母之间插进数字表示最大场宽。<br />例如: %3d 表示输出3位整型数, 不够3位右对齐。<br />%9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6,<br />小数点占一位, 不够9位右对齐。<br />%8s 表示输出8个字符的字符串, 不够8个字符右对齐。<br />如果字符串的长度、或整型数位数超过说明的场宽, 将按其实际长度输出。<br />但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出;<br />若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入输出。<br />另外, 若想在输出值前加一些0, 就应在场宽项前加个0。<br />例如: %04d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽度<br />为4位。<br />如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度,<br />小数点前的数字代表最小宽度。<br />例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则<br />第9个字符以后的内容将被删除。<br />(2). 可以在”%”和字母之间加小写字母l, 表示输出的是长型数。<br />例如: %ld 表示输出long整数<br />%lf 表示输出double浮点数<br />(3). 可以控制输出左对齐或右对齐, 即在”%”和字母之间加入一个”-” 号可<br />说明输出为左对齐, 否则为右对齐。<br />例如: %-7d 表示输出7位整数左对齐<br />%-10s 表示输出10个字符左对齐<br />2. 一些特殊规定字符<br />━━━━━━━━━━━━━━━━━━━━━━━━━━<br />字符 作用<br />——————————————————————————<br />\n 换行<br />\f 清屏并换页<br />\r 回车<br />\t Tab符<br />\xhh 表示一个ASCII码用16进表示,<br />其中hh是1到2个16进制数<br />━━━━━━━━━━━━━━━━━━━━━━━━━━<br />由本节所学的printf()函数, 并结合上一节学习的数据类型, 编制下面的程<br />序, 以加深对Turbo C2.0数据类型的了解。<br />例1<br />#include&lt;stdio.h&gt;<br />#include&lt;string.h&gt;<br />int main()<br />{<br />char c, s[20], *p;<br />int a=1234, *i;<br />float f=3.141592653589;<br />double x=0.12345678987654321;<br />p=”How do you do”;<br />strcpy(s, “Hello, Comrade”);<br />*i=12;<br />c=’\x41′;<br />printf(”a=%d\n”, a); /*结果输出十进制整数a=1234*/<br />printf(”a=%6d\n”, a); /*结果输出6位十进制数a= 1234*/<br />printf(”a=%06d\n”, a); /*结果输出6位十进制数a=001234*/<br />printf(”a=%2d\n”, a); /*a超过2位, 按实际值输出a=1234*/<br />printf(”*i=%4d\n”, *i); /*输出4位十进制整数*i= 12*/<br />printf(”*i=%-4d\n”, *i); /*输出左对齐4位十进制整数*i=12*/<br />printf(”i=%p\n”, i); /*输出地址i=06E4*/<br />printf(”f=%f\n”, f); /*输出浮点数f=3.141593*/<br />printf(”f=6.4f\n”, f); /*输出6位其中小数点后4位的浮点数<br />f=3.1416*/<br />printf(”x=%lf\n”, x); /*输出长浮点数x=0.123457*/<br />printf(”x=%18.16lf\n”, x);/*输出18位其中小数点后16位的长浮点<br />数x=0.1234567898765432*/<br />printf(”c=%c\n”, c); /*输出字符c=A*/<br />printf(”c=%x\n”, c); /*输出字符的ASCII码值c=41*/<br />printf(”s[]=%s\n”, s); /*输出数组字符串s[]=Hello, Comrade*/<br />printf(”s[]=%6.9s\n”, s);/*输出最多9个字符的字符串s[]=Hello,<br />Co*/<br />printf(”s=%p\n”, s); /*输出数组字符串首字符地址s=FFBE*/<br />printf(”*p=%s\n”, p); /* 输出指针字符串p=How do you do*/<br />printf(”p=%p\n”, p); /*输出指针的值p=0194*/<br />getch();<br />retunr 0;<br />}<br />上面结果中的地址值在不同计算机上可能不同。<br />例1.中第一条语句#include&lt;stdio.h&gt;的含义是调用另一个文件stdio.h, 这<br />是一个头文件, 其中包括全部标准输入输出库函数的数据类型定义和函数说明。<br />Turbo C2.0对每个库函数便用的变量及函数类型都已作了定义与说明, 放在相应<br />头文件”*.h”中, 用户用到这些函数时必须要用#include&lt;*.h&gt;或#include”*. h”<br />语句调用相应的头文件, 以供连接。若没有用此语句说明, 则连接时将会出现错<br />误。<br />二、scanf()函数<br />scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。<br />其调用格式为:<br />scanf(”&lt;格式化字符串&gt;”, &lt;地址表&gt;);<br />格式化字符串包括以下三类不同的字符;<br />1. 格式化说明符: 格式化说明符与printf()函数中的格式说明符基本相同。<br />2. 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多<br />个空白字符。<br />3. 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非<br />空白字符相同的字符。<br />地址表是需要读入的所有变量的地址, 而不是变量本身。这与printf()函数<br />完全不同, 要特别注意。各个变量的地址之间同”,”分开。<br />例2:<br />main()<br />{<br />int i, j;<br />printf(”i, j=?\n”);<br />scanf(”%d, %d”, &amp;i, &amp;j);<br />}</p>
		<p>上例中的scanf()函数先读一个整型数, 然后把接着输入的逗号剔除掉, 最<br />后读入另一个整型数。如果”,”这一特定字符没有找到, scanf()函数就终止。若<br />参数之间的分隔符为空格, 则参数之间必须输入一个或多个空格。<br />说明:<br />(1). 对于字符串数组或字符串指针变量, 由于数组名和指针变量名本身就<br />是地址, 因此使用scanf()函数时, 不需要在它们前面加上”&amp;”操作符。<br />例3<br />mian()<br />{<br />char *p, str[20];<br />scanf(”%s”, p); /*从健盘输入字符串*/<br />scanf(”%s”, str);<br />printf(”%s\n”, p); /*向屏幕输出字符串*/<br />printf(”%s\n”, str);<br />}</p>
		<p>(2). 可以在格式化字符串中的”%”各格式化规定符之间加入一个整数, 表示<br />任何读操作中的最大位数。<br />如例3中若规定只能输入10字符给字符串指针p, 则第一条scanf() 函数语句<br />变为<br />scanf(”%10s”, p);<br />程序运行时一旦输入字符个数大于10, p就不再继续读入, 而后面的一个读<br />入函数即scanf(”%s”, str)就会从第11个字符开始读入。<br />实际使用scanf()函数时存在一个问题, 下面举例进行说明:<br />当使用多个scanf()函数连续给多个字符变量输入时, 例如:<br />main()<br />{<br />char c1, c2;<br />scanf(”%c”, &amp;c1);<br />scanf(”%c”, &amp;c2);<br />printf(”c1 is %c, c2 is %c”, c2\1, c2);<br />}</p>
		<p>运行该程序, 输入一个字符A后回车 (要完成输入必须回车), 在执行scanf<br />(”%c”, &amp;c1)时, 给变量c1赋值”A”, 但回车符仍然留在缓冲区内, 执行输入语句<br />scanf(”%c”, &amp;c2)时, 变量c2输出的是一空行, 如果输入AB后回车, 那么输出结<br />果为: c1 is A, c2 is B。<br />要解决以上问题, 可以在输入函数前加入清除函数fflush()( 这个函数的使<br />用方法将在本节最后讲述)。修改以上程序变成:<br />#include&lt;stdio.h&gt;<br />main()<br />{<br />char c1, c2;<br />scanf(”%c”, &amp;c1);<br />fflush(stdin);<br />scanf(”%c”, &amp;c2);<br />printf(”c1 is %c, c2 is %c”, c1, c2);<br />}</p>
		<p>1.1.2 非格式化输入输出函数<br />非格式化输入输出函数可以由上面讲述的标准格式化输入输出函数代替, 但<br />这些函数编译后代码少, 相对占用内存也小, 从而提高了速度, 同时使用也比较<br />方便。下面分别进行介绍。<br />一、puts()和gets()函数<br />1. puts()函数<br />puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为:<br />puts(s);<br />其中s为字符串变量(字符串数组名或字符串指针)。<br />puts()函数的作用与语printf(”%s\n”, s)相同。<br />例4:<br />main()<br />{<br />char s[20], *f; /*定义字符串数组和指针变量*/<br />strcpy(s, “Hello! Turbo C2.0″); /*字符串数组变量赋值*/<br />f=”Thank you”; /*字符串指针变量赋值*/<br />puts(s);<br />puts(f);<br />}</p>
		<p>说明:<br />(1). puts()函数只能输出字符串, 不能输出数值或进行格式变换。<br />(2). 可以将字符串直接写入puts()函数中。如:<br />puts(”Hello, Turbo C2.0″);</p>
		<p>2. gets()函数<br />gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符<br />不属于这个字符串。其调用格式为:<br />gets(s);<br />其中s为字符串变量(字符串数组名或字符串指针)。<br />gets(s)函数与scanf(”%s”, &amp;s)相似, 但不完全相同, 使用scanf(”%s”, &amp;s)<br />函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束,<br />空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符<br />串直到回车为止。<br />例5<br />main()<br />{<br />char s[20], *f;<br />printf(”What’s your name?\n”);<br />gets(s); /*等待输入字符串直到回车结束*/<br />puts(s); /*将输入的字符串输出*/<br />puts(”How old are you?”);<br />gets(f);<br />puts(f);<br />}</p>
<img src ="http://www.blogjava.net/Yipak/aggbug/226943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yipak/" target="_blank">死神</a> 2008-09-04 14:34 <a href="http://www.blogjava.net/Yipak/articles/226943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>