posts - 3,comments - 3,trackbacks - 0

CStdioFile继承自CFile,一个CStdioFile 对象代表一个用运行时函数fopen 打开的C 运行时流式文件。
流式文件是被缓冲的,而且可以以文本方式(缺省)或二进制方式打开。文本方式提供对硬回车—换行符对的特殊处理。当你将一个换行符(0x0A)写入一个文本方式的CStdioFile 对象时,字节对(0x0D,0x0A)被发送给该文件。当你读一个文件时,字节对(0x0D,0x0A)被翻译为一个字节(0x0A)。
CStdioFile 不支持Duplicate,LockRange,和UnlockRange 这几个CFile 函数。如果在CStdioFile 中调用了这几个函数,将会出现CNoSupported 异常。

CStdioFile::ReadString(LPTSTR lpsz, UINT nMax);
读取一行文本到缓冲区,遇到“0x0D,0x0A”时停止读取,并且去掉硬回车“0x0D”,保留换行符“0x0A”,在字符串末尾添加“\0”(0x00)。nMax个字符里包含0x00这个字符。分析如下:
1)如果nMax <= 字符数,读取(nMax-1)个字符 + 0x00
2)如果nMax  = 字符数 + 1,读取nMax个字符 + 0x00
3)如果nMax  > 字符数,读取nMax个字符 + 0x0A + 0x00

CStdioFile::ReadString(CString &rString);(重载)
读取一行文本到rString,遇到回车换行符停止读取。回车和换行符不读到rString,而且末尾也没有添加“\0”。

CStdioFile::WriteString( LPCTSTR lpsz );(不支持CString直接写入)
将一个缓冲区中的数据写入与CStdioFile 对象关联的文件中。结束的空字符(“\0”)不被写入该文件。lpsz 中的所有换行符都被以一个硬回车换行符对写入该文件,即“\n”被转化成“\r\n”写入到文件里。

posted @ 2006-04-29 16:01 伏羲 阅读(801) | 评论 (0)编辑 收藏
把编辑控件设为微调控件的伙伴(Buddy)后,可以用微调控件的函数(int SetBase(int nBase);)很方便地显示十六进制数据。
posted @ 2006-04-15 19:07 伏羲 阅读(333) | 评论 (2)编辑 收藏
注:摘抄自候捷的《深入浅出MFC》第二版。

程序的诞生:
1.  CWinApp theApp;
     Application object产生,内存获得配置,初值也设立了。
2. AfxWinMain执行AfxWinInit,后者又调用AfxInitThread,把消息队列尽量加大到96。
3. AfxWinMain执行InitApplication。这是CWinApp的虚函数,但我们通常不改写它。
4. AfxWinMain执行InitInstance。这是CWinApp的虚函数,但我们必须改写它。
5. CMyWinApp::InitInstance‘new’了一个CMyFrameWnd对象。
6. CMyFrameWnd构造函数调用Create,产生窗口种类,自行为我们注册一个名为“AfxFrameOrView42d”的窗口类。
7. 回到InitInstance中继续执行ShowWindow,显示窗口。
8. 执行UpdateWindow,于是发出WM_PAINT。
9. 回到AfxWinMain,执行Run,进入消息循环。

程序开始运行:
1. 程序获得WM_PAINT消息(藉由CWinApp::Run中的::GetMessage循环)。
2. WM_PAINT经由::DispatchMessage送到窗口函数Cwnd::DefWindowProc中。
3. CWnd::DefWindowProc将消息传递国消息映射表格(Message Map)。
4. 传递过程中发现有相符项目,于是调用项目中对应的函数。此函数是应用程序利用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间的宏设立起来的。
5. 标准消息的处理程序也有标准命名。例如WM_PAINT必然由OnPaint处理。

程序的死亡:
1. 使用者单击〔File/Close〕,于是发出WM_CLOSE。
2. CMyFrameWnd并没有设置WM_CLOSE处理程序,于是交给默认的处理程序。
3. 默认函数对于WM_CLOSE的处理方式是调用::DestroyMessage,并因而发出WM_DESTROY。
4. 默认的WM_DESTROY处理方式是调用::PostQuitMessage,因此发出WM_QUIT。
5. CWinApp::Run收到WM_QUIT后会结束其内部之消息循环,然后调用ExitInstance,这是CWinApp的一个虚拟函数。
6. 如果是CMyWinApp改写了ExitInstance,那么CWinApp::Run所调用的就是CMyWinApp::ExitInstance,否则就是CWinApp::ExitInstance。
7. 最后回到AfxWinMain,执行AfxWinTerm,结束程序。
posted @ 2006-03-13 14:55 伏羲 阅读(325) | 评论 (1)编辑 收藏
仅列出标题