﻿<?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>C++博客-时间的痕迹-文章分类-MFC技术</title><link>http://www.cppblog.com/ivenher/category/246.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 13:01:52 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 13:01:52 GMT</pubDate><ttl>60</ttl><item><title>利用VC从DLL传递消息到EXE </title><link>http://www.cppblog.com/ivenher/articles/37002.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Tue, 20 Nov 2007 04:18:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/37002.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/37002.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/37002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/37002.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/37002.html</trackback:ping><description><![CDATA[&nbsp;在进行DLL开发过程中，尤其在进行底层硬件开发过程中，比如实时接收数据，进程需要和应用程序进行交互，而DLL和应用程序最好的交互就是发消息了，在DLL中定义消息的方式和在应用程序中定义消息的方式非常相似。下面谈谈这两种定义的方法：
<p>&#160;</p>
<p>&nbsp; 一、在应用程序自定义消息方法：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般自定义消息有一定的范围，虽然说自定义消息从WM_USER开始，但是由于我们的工程里面一般还有很多其他的控件，他们也要占用一部分WM_USER消息范围，所以我们必须为他们留出一部分范围，这里，我们保留100个消息，一般情况下，这可以满足我们的要求。</p>
<p>&nbsp; (1)&nbsp;&nbsp;&nbsp; 定义消息的值。在我们要发生消息的地方(例如CMyView.cpp的开始部分)或者stdafx..h文件，进行如下定义：</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>#define WM_MSG&nbsp; (WM_USER+101)</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接下来的工作其实很简单，我们在前面说了，消息正常工作有3个部分必须协调：消息声明、消息映射、消息体。我们就一次进行手工加入。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)首先在AFX_MSG块中加入消息声明：在CMyView.h中，找到如下部分，并加入消息声明：</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // {{AFX_MSG（CMyView)</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ......</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; afx_msg LRESULT OnMyMsg(WPARAM wParam,LPARAM lParam);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="file://}}AFX_MSG/"><u><font color=#0000ff>file://}}AFX_MSG</font></u></a> </p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)在MESSAGE_MAP块中添加ON_MESSAGE宏指令：</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN_MESSAGE_MAP(CMyView, CView) </p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="file://{{AFX_MSG_MAP(CMyView/"><u><font color=#0000ff>file://{{AFX_MSG_MAP(CMyView</font></u></a>) </p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .....</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ON_MESSAGE(WM_MSG, OnMyMsg) </p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="file://}}AFX_MSG_MAP/"><u><font color=#0000ff>file://}}AFX_MSG_MAP</font></u></a> </p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END_MESSAGE_MAP() </p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4)添加消息函数体：</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPESULT CMyView::OnMyMsg(WPARAM wParam, LPARAM lParam)
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { </p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AfxMessageBox("消息已经收到！"); </p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0; </p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 消息至此就已经定义完毕，接下来我们就可以激活消息了，就可以用我们前面所说的PostMessage/SendMessage来发送消息了。</p>
<p>　　　　如：::PostMessage(hwnd,WM_MSG,0,1);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostMessage:不用等消息返回。</p>
<p>　　　 SendMessage:需要等消息返回。</p>
<p>&nbsp; 二、从DLL中传递消息到EXE</p>
<p>　　　在DLL中定义消息和上面的方法很相似，有两点不同的地方：</p>
<p>&nbsp; 1、&nbsp; 在DLL和应用程序中两个地方定义相同的消息。</p>
<p>&nbsp; 2、&nbsp; 应用程序调用DLL程序之后，需要将应用程序的窗口句柄传递给DLL，以便DLL中的消息返回。</p>
<p>&nbsp; 在DLL工程中：</p>
<p>&nbsp; （1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在stdafx.h头文件中添加消息定义：</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>&nbsp;#define WM_MSG WM_USER + 102</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　　　　　　</p>
<p>&nbsp; （2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加启动消息的输出函数：</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>
            <p>　　　　　　　CMessageDLLApp theApp;</p>
            <p>&nbsp; //发送消息</p>
            <p>extern "C" _declspec(dllexport) void StartSendMessage(HWND hwnd)</p>
            <p>{</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theApp.SendMessage(hwnd);</p>
            <p>}　　　　　</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中hwnd是接收消息的窗口句柄。</p>
<p>&nbsp; （3）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加启动消息的实现函数：</p>
<p>在头文件中添加函数声明：</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>&nbsp; void SendMessage(HWND hwnd);</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>&nbsp; 在CPP文件中添加函数实现</p>
<p>&nbsp; //启动发送消息</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>
            <p>void CMessageDLLApp::SendMessage(HWND hwnd)</p>
            <p>{</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::PostMessage(hwnd,WM_MSG,0,1);</p>
            <p>}</p>
            <p>&nbsp; 在应</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>用程序中：</p>
<p>&nbsp; （1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在stdafx.h头文件中添加消息定义：</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>#define WM_MSG WM_USER + 102</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　　　　　　 </p>
<p>&nbsp; （2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先在AFX_MSG块中加入消息声明：在CTestMessageDLLDlg.h中，找到如下部分，并加入消息声明：</p>
<p>。。。。。。</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>
            <p>　　　　　　　 afx_msg LRESULT OnMyMsg(WPARAM wParam,LPARAM lParam);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE_MESSAGE_MAP()</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>&nbsp; （3）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在MESSAGE_MAP块中添加ON_MESSAGE宏指令：</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>
            <p>　　　　　　　 BEGIN_MESSAGE_MAP(CTestMessageDLLDlg, CDialog)</p>
            <p>&nbsp;&nbsp;&nbsp; 　　　　　　。。。。。。</p>
            <p>&nbsp;&nbsp;&nbsp; 　　　　　　ON_MESSAGE(WM_MSG, OnMyMsg) </p>
            <p>&nbsp;&nbsp;&nbsp; 　　　　　　//}}AFX_MSG_MAP</p>
            <p>&nbsp;&nbsp;&nbsp; 　　　　　　END_MESSAGE_MAP()</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>&nbsp; （4）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加消息函数体：</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>　　　　　　 LRESULT CTestMessageDLLDlg::OnMyMsg(WPARAM wParam, LPARAM lParam)
            <p>&nbsp;{ <br></p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　　　 AfxMessageBox("消息已经收到！"); </p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　　　 return 0; </p>
            <p>&nbsp;　　　　}</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>　（5）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在对话框上添加一个按钮，在按钮事件中，先调用DLL文件，然后发送一个测试消息响应的命令：</p>
<p>
<table borderColor=#55aaff cellSpacing=0 cellPadding=0 rules=none width=500 align=center bgColor=#ddedfb border=1>
    <tbody>
        <tr>
            <td width=10><br></td>
            <td>
            <p>void CTestMessageDLLDlg::OnBnClickedButton1()</p>
            <p>{</p>
            <p>&nbsp;&nbsp;&nbsp; // TODO: 在此添加控件通知处理程序代码</p>
            <p>&nbsp;&nbsp;&nbsp; //定义函数</p>
            <p>&nbsp;&nbsp;&nbsp; typedef void (_cdecl*STARTSENDMESSAGE)(HWND hwnd);</p>
            <p>&nbsp;&nbsp;&nbsp; HMODULE hmessage = NULL;</p>
            <p>&nbsp;&nbsp;&nbsp; STARTSENDMESSAGE StartSendMessage = NULL;</p>
            <p>　　//导入DLL库文件</p>
            <p>&nbsp;&nbsp;&nbsp; hmessage = LoadLibrary("MessageDLL.dll");</p>
            <p>&nbsp;&nbsp;&nbsp; if(hmessage==NULL)</p>
            <p>&nbsp;&nbsp;&nbsp; {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FreeLibrary(hmessage);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(0);</p>
            <p>&nbsp;&nbsp;&nbsp; }</p>
            <p>　　//导入DLL中测试消息函数</p>
            <p>&nbsp;&nbsp;&nbsp; StartSendMessage = (STARTSENDMESSAGE)GetProcAddress(hmessage,"StartSendMessage");</p>
            <p>&nbsp;&nbsp;&nbsp; if(StartSendMessage==NULL)</p>
            <p>&nbsp;&nbsp;&nbsp; {</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FreeLibrary(hmessage);</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(1);</p>
            <p>&nbsp;&nbsp;&nbsp; }</p>
            <p>&nbsp;&nbsp;&nbsp; //获取对话框的窗口句柄</p>
            <p>&nbsp;&nbsp;&nbsp; HWND hwnd = this-＞GetSafeHwnd();</p>
            <p>&nbsp;&nbsp;&nbsp; //发送测试消息函数</p>
            <p>&nbsp;&nbsp;&nbsp; (*StartSendMessage)(hwnd);</p>
            <p>}</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p>运行应用程序，就可以看到测试结果了。<br>&nbsp;<br></p>
<p><br><br><br><br><br clear=all></p>
<p><br><br><br></p>
<img src ="http://www.cppblog.com/ivenher/aggbug/37002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-11-20 12:18 <a href="http://www.cppblog.com/ivenher/articles/37002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CEdit 颜色设置</title><link>http://www.cppblog.com/ivenher/articles/21810.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Fri, 13 Apr 2007 08:50:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/21810.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/21810.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/21810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/21810.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/21810.html</trackback:ping><description><![CDATA[<br>
<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">&nbsp;1</span>&nbsp;<span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Color.h<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Colorref's&nbsp;to&nbsp;use&nbsp;with&nbsp;your&nbsp;Programs</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;RED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RGB(127,&nbsp;&nbsp;0,&nbsp;&nbsp;0)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;GREEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RGB(&nbsp;&nbsp;0,127,&nbsp;&nbsp;0)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;BLUE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RGB(&nbsp;&nbsp;0,&nbsp;&nbsp;0,127)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;LIGHTRED&nbsp;&nbsp;&nbsp;RGB(255,&nbsp;&nbsp;0,&nbsp;&nbsp;0)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;LIGHTGREEN&nbsp;RGB(&nbsp;&nbsp;0,255,&nbsp;&nbsp;0)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;LIGHTBLUE&nbsp;&nbsp;RGB(&nbsp;&nbsp;0,&nbsp;&nbsp;0,255)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;BLACK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RGB(&nbsp;&nbsp;0,&nbsp;&nbsp;0,&nbsp;&nbsp;0)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;WHITE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RGB(255,255,255)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;GRAY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RGB(192,192,192)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #808080">//////////////////////////////////////////</span><span style="COLOR: #008000">/</span><span style="COLOR: #808080"><br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #808080"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">color.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #808080">///////////////////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">//</span><span style="COLOR: #808080"><br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #808080"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;CColorStatic&nbsp;window</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CColorStatic&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CStatic<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Construction</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SetTextColor(COLORREF&nbsp;crColor);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;This&nbsp;Function&nbsp;is&nbsp;to&nbsp;set&nbsp;the&nbsp;Color&nbsp;for&nbsp;the&nbsp;Text.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SetBkColor(COLORREF&nbsp;crColor);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;This&nbsp;Function&nbsp;is&nbsp;to&nbsp;set&nbsp;the&nbsp;BackGround&nbsp;Color&nbsp;for&nbsp;the&nbsp;Text.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CColorStatic();<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Overrides<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;ClassWizard&nbsp;generated&nbsp;virtual&nbsp;function&nbsp;overrides<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">{{AFX_VIRTUAL(CColorStatic)<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">}}AFX_VIRTUAL</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CColorStatic();<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Generated&nbsp;message&nbsp;map&nbsp;functions</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">{{AFX_MSG(CColorStatic)</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CBrush&nbsp;m_brBkgnd;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Holds&nbsp;Brush&nbsp;Color&nbsp;for&nbsp;the&nbsp;Static&nbsp;Text</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;COLORREF&nbsp;m_crBkColor;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Holds&nbsp;the&nbsp;Background&nbsp;Color&nbsp;for&nbsp;the&nbsp;Text</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;COLORREF&nbsp;m_crTextColor;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Holds&nbsp;the&nbsp;Color&nbsp;for&nbsp;the&nbsp;Text</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;afx_msg&nbsp;HBRUSH&nbsp;CtlColor(CDC</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pDC,&nbsp;UINT&nbsp;nCtlColor);<br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">}}AFX_MSG</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_MESSAGE_MAP()<br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #000000"></span></div>
<br><br><br>
<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">&nbsp;1</span>&nbsp;<span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;ColorEdit.cpp&nbsp;:&nbsp;implementation&nbsp;file<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stdafx.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ColorEdit.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Color.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;File&nbsp;Holding&nbsp;(#define)'s&nbsp;for&nbsp;COLORREF&nbsp;Values</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">#ifdef&nbsp;_DEBUG<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;new&nbsp;DEBUG_NEW</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#undef</span><span style="COLOR: #000000">&nbsp;THIS_FILE</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;THIS_FILE[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;__FILE__;<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #808080">///////////////////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">//</span><span style="COLOR: #808080"><br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #808080"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;CColorEdit</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">CColorEdit::CColorEdit()<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_crBkColor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;::GetSysColor(COLOR_3DFACE);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Initializing&nbsp;background&nbsp;color&nbsp;to&nbsp;the&nbsp;system&nbsp;face&nbsp;color.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_crTextColor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;BLACK;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Initializing&nbsp;text&nbsp;color&nbsp;to&nbsp;black</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_brBkgnd.CreateSolidBrush(m_crBkColor);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Creating&nbsp;the&nbsp;Brush&nbsp;Color&nbsp;For&nbsp;the&nbsp;Edit&nbsp;Box&nbsp;Background</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">CColorEdit::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CColorEdit()<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">BEGIN_MESSAGE_MAP(CColorEdit,&nbsp;CEdit)<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">{{AFX_MSG_MAP(CColorEdit)</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;ON_WM_CTLCOLOR_REFLECT()<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">}}AFX_MSG_MAP</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">END_MESSAGE_MAP()<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #808080">///////////////////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">//</span><span style="COLOR: #808080"><br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #808080"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;CColorEdit&nbsp;message&nbsp;handlers</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CColorEdit::SetTextColor(COLORREF&nbsp;crColor)<br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_crTextColor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;crColor;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Passing&nbsp;the&nbsp;value&nbsp;passed&nbsp;by&nbsp;the&nbsp;dialog&nbsp;to&nbsp;the&nbsp;member&nbsp;varaible&nbsp;for&nbsp;Text&nbsp;Color</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;RedrawWindow();<br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;CColorEdit::SetBkColor(COLORREF&nbsp;crColor)<br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_crBkColor&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;crColor;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Passing&nbsp;the&nbsp;value&nbsp;passed&nbsp;by&nbsp;the&nbsp;dialog&nbsp;to&nbsp;the&nbsp;member&nbsp;varaible&nbsp;for&nbsp;Backgound&nbsp;Color</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_brBkgnd.DeleteObject();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Deleting&nbsp;any&nbsp;Previous&nbsp;Brush&nbsp;Colors&nbsp;if&nbsp;any&nbsp;existed.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_brBkgnd.CreateSolidBrush(crColor);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Creating&nbsp;the&nbsp;Brush&nbsp;Color&nbsp;For&nbsp;the&nbsp;Edit&nbsp;Box&nbsp;Background</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;RedrawWindow();<br></span><span style="COLOR: #008080">50</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">51</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">52</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">53</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">54</span>&nbsp;<span style="COLOR: #000000">HBRUSH&nbsp;CColorEdit::CtlColor(CDC</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pDC,&nbsp;UINT&nbsp;nCtlColor)<br></span><span style="COLOR: #008080">55</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">56</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;HBRUSH&nbsp;hbr;<br></span><span style="COLOR: #008080">57</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;hbr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(HBRUSH)m_brBkgnd;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Passing&nbsp;a&nbsp;Handle&nbsp;to&nbsp;the&nbsp;Brush</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">58</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetBkColor(m_crBkColor);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Setting&nbsp;the&nbsp;Color&nbsp;of&nbsp;the&nbsp;Text&nbsp;Background&nbsp;to&nbsp;the&nbsp;one&nbsp;passed&nbsp;by&nbsp;the&nbsp;Dialog</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">59</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetTextColor(m_crTextColor);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Setting&nbsp;the&nbsp;Text&nbsp;Color&nbsp;to&nbsp;the&nbsp;one&nbsp;Passed&nbsp;by&nbsp;the&nbsp;Dialog</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">60</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">61</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(nCtlColor)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;To&nbsp;get&nbsp;rid&nbsp;of&nbsp;compiler&nbsp;warning</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">62</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nCtlColor&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">63</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">64</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;hbr;<br></span><span style="COLOR: #008080">65</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">66</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">67</span>&nbsp;<span style="COLOR: #000000">BOOL&nbsp;CColorEdit::SetReadOnly(BOOL&nbsp;flag)<br></span><span style="COLOR: #008080">68</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">69</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(flag&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;TRUE)<br></span><span style="COLOR: #008080">70</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetBkColor(m_crBkColor);<br></span><span style="COLOR: #008080">71</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">72</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetBkColor(WHITE);<br></span><span style="COLOR: #008080">73</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">74</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;CEdit::SetReadOnly(flag);<br></span><span style="COLOR: #008080">75</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">76</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">77</span>&nbsp;<span style="COLOR: #000000"></span></div>
<img src ="http://www.cppblog.com/ivenher/aggbug/21810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-04-13 16:50 <a href="http://www.cppblog.com/ivenher/articles/21810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文本框字体色,对话框和静态文件背景色设置方法(OnCtlColor消息)</title><link>http://www.cppblog.com/ivenher/articles/21805.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Fri, 13 Apr 2007 08:23:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/21805.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/21805.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/21805.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/21805.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/21805.html</trackback:ping><description><![CDATA[<p>重载 OnCtrlColor.<font face="Times New Roman" color=#000000 size=3><br><br>HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) <br>{<br>&nbsp;HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);<br>&nbsp;<br>&nbsp;if(nCtlColor == CTLCOLOR_DLG || nCtlColor == CTLCOLOR_STATIC)<br>&nbsp;{<br>&nbsp;&nbsp;//pDC-&gt;SetTextColor(RGB(0,0,255));//字体色<br>&nbsp;&nbsp;pDC-&gt;SetBkColor(RGB(210,230,211));//字体背景色******<br>&nbsp;&nbsp;HBRUSH B = CreateSolidBrush(RGB(210,230,211)); //背景色<br>&nbsp;&nbsp;return B;<br>&nbsp;}<br>&nbsp;if(nCtlColor == CTLCOLOR_EDIT)<br>&nbsp;{<br>&nbsp;&nbsp;pDC-&gt;SetTextColor(RGB(0,0,255));//字体色<br>&nbsp;}</font></p>
<p><font face="Times New Roman" color=#000000 size=3>&nbsp;return hbr;<br>}</font></p>
<img src ="http://www.cppblog.com/ivenher/aggbug/21805.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-04-13 16:23 <a href="http://www.cppblog.com/ivenher/articles/21805.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>很好的button类 实现文件 4</title><link>http://www.cppblog.com/ivenher/articles/21705.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Thu, 12 Apr 2007 03:48:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/21705.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/21705.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/21705.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/21705.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/21705.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;2&nbsp;//&nbsp;This&nbsp;function&nbsp;creates&nbsp;a&nbsp;grayscale&nbsp;icon&nbsp;starting&nbsp;from&nbsp;a&nbsp;given&nbsp;icon.&nbsp;&nbsp;3&nbsp;//&nbsp;The&nbsp;re...&nbsp;&nbsp;<a href='http://www.cppblog.com/ivenher/articles/21705.html'>阅读全文</a><img src ="http://www.cppblog.com/ivenher/aggbug/21705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-04-12 11:48 <a href="http://www.cppblog.com/ivenher/articles/21705.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>很好的button类 实现文件 3</title><link>http://www.cppblog.com/ivenher/articles/21703.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Thu, 12 Apr 2007 03:47:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/21703.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/21703.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/21703.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/21703.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/21703.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: HBITMAP&nbsp;CButtonST::CreateBitmapMask(HBITMAP&nbsp;hSourceBitmap,&nbsp;DWORD&nbsp;dwWidth,&nbsp;DWORD&nbsp;dwHeight,&nbsp;COLORREF&nbsp;crTransColor){&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP&nbsp;&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.cppblog.com/ivenher/articles/21703.html'>阅读全文</a><img src ="http://www.cppblog.com/ivenher/aggbug/21703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-04-12 11:47 <a href="http://www.cppblog.com/ivenher/articles/21703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>很好的button类 实现文件 2</title><link>http://www.cppblog.com/ivenher/articles/21702.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Thu, 12 Apr 2007 03:46:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/21702.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/21702.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/21702.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/21702.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/21702.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;2&nbsp;#ifdef&nbsp;&nbsp;&nbsp;&nbsp;BTNST_USE_BCMENU&nbsp;&nbsp;3&nbsp;LRESULT&nbsp;CButtonST::OnMenuChar(UINT&nbsp;nChar,&nbsp;UINT&nbsp;nFlags,&nbsp;CMenu*&nbsp;pMenu...&nbsp;&nbsp;<a href='http://www.cppblog.com/ivenher/articles/21702.html'>阅读全文</a><img src ="http://www.cppblog.com/ivenher/aggbug/21702.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-04-12 11:46 <a href="http://www.cppblog.com/ivenher/articles/21702.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>很好的button类 实现文件 1</title><link>http://www.cppblog.com/ivenher/articles/21701.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Thu, 12 Apr 2007 03:45:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/21701.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/21701.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/21701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/21701.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/21701.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;1#include&nbsp;"stdafx.h"&nbsp;&nbsp;2#include&nbsp;"BtnST.h"&nbsp;&nbsp;3&nbsp;&nbsp;4#ifdef&nbsp;&nbsp;&nbsp;&nbsp;BTNST_USE_SOUND&nbsp;&nbsp;5#pragma&nbsp;comment(lib,&nbsp;"winmm.lib")...&nbsp;&nbsp;<a href='http://www.cppblog.com/ivenher/articles/21701.html'>阅读全文</a><img src ="http://www.cppblog.com/ivenher/aggbug/21701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-04-12 11:45 <a href="http://www.cppblog.com/ivenher/articles/21701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>很好的button类  头文件</title><link>http://www.cppblog.com/ivenher/articles/21698.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Thu, 12 Apr 2007 03:37:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/21698.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/21698.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/21698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/21698.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/21698.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ////&nbsp;&nbsp;&nbsp;&nbsp;Class:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CButtonST////&nbsp;&nbsp;&nbsp;&nbsp;Compiler:&nbsp;&nbsp;&nbsp;&nbsp;Visual&nbsp;C++//&nbsp;&nbsp;&nbsp;&nbsp;Tested&...&nbsp;&nbsp;<a href='http://www.cppblog.com/ivenher/articles/21698.html'>阅读全文</a><img src ="http://www.cppblog.com/ivenher/aggbug/21698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-04-12 11:37 <a href="http://www.cppblog.com/ivenher/articles/21698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>      CBitmapDialog 的使用</title><link>http://www.cppblog.com/ivenher/articles/21696.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Thu, 12 Apr 2007 03:36:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/21696.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/21696.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/21696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/21696.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/21696.html</trackback:ping><description><![CDATA[<div twffan="done"><font face=Arial color=#ff0000 size=5>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CBitmapDialog 的使用</font></div>
<div twffan="done"><font face=Arial>在所有步骤之前，先添加按钮各个状态所需的位图资源。 </font></div>
<div twffan="done"><font face=Arial>1 &nbsp; 在对话框应用程序中添加Button1（ID为IDC_BUTTON1)。在属性的Style标签下选择Owner&nbsp; draw即可，不需要选择Bitmap属性！</font></div>
<div twffan="done"><font face=Arial>&nbsp; <br>2&nbsp; 在程序中定义一个CBitmapButton成员变量bmButton。不能使用ClassWizard为按钮映射一个CButton变量，然后改为CBitmapButton，这么做并不能将按钮直接映射为CBitmapButton类的对象，反而会出现初始化错误。 <br>&nbsp;<br>3&nbsp; 使用CBitmapButton::LoadBitmaps装载各种状态的图片,使用SubclassDlgItem关联到想要的按钮，使用CBitmapButton::SizeToContent函数使按钮适合图片大小。注意Loadbitmaps一定要在关联到按钮之前进行！&nbsp; </font></div>
<font face=Arial>
<div twffan="done"><br>在OnInitDialog()中添加的代码如下所示：</div>
<div twffan="done">BOOL CCBitmapDlgDlg::OnInitDialog()<br>{<br>&nbsp;CDialog::OnInitDialog();</div>
<div twffan="done">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //.........................<br>&nbsp;<br>&nbsp;<br>&nbsp;// TODO: Add extra initialization here<br>if(bmButton.LoadBitmaps(IDB_BITMAP_QI,IDB_BITMAP1,IDB_BITMAP2,IDB_BITMAP2)==0)<br>MessageBox("装载位图出错！");<br>bmButton.SubclassDlgItem(IDC_BUTTON1,AfxGetMainWnd());</div>
<div twffan="done">&nbsp;bmButton.SizeToContent();</div>
<div twffan="done"><br>return TRUE;&nbsp; // return TRUE&nbsp; unless you set the focus to a control<br>}</div>
<div twffan="done">//对LoadBitmaps( ) 的一点说明：&nbsp; <br>第一个参数为按钮没有按下时（UP）的位图。<br>第二个参数为按钮按下时（DOWM ）的位图。<br>第三个参数为按钮是焦点时（Focused）的位图。<br>第四个参数为按钮不可用时（Disabled）的位图。</div>
</font>
<img src ="http://www.cppblog.com/ivenher/aggbug/21696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-04-12 11:36 <a href="http://www.cppblog.com/ivenher/articles/21696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CFormView 设置背景色</title><link>http://www.cppblog.com/ivenher/articles/21685.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Thu, 12 Apr 2007 02:19:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/21685.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/21685.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/21685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/21685.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/21685.html</trackback:ping><description><![CDATA[<br><br>给类CXXFormView添加一个CBrush类的成员变量m_brush &nbsp; <br>&nbsp; 然后在其构造函数中加m_brush.CreateSolidBrush(RGB(255,255,255)); &nbsp; <br>&nbsp; 如我的CXXFormView类 &nbsp; <br>&nbsp; CPackInterView::CPackInterView() &nbsp; <br>&nbsp; : &nbsp; CFormView(CPackInterView::IDD) &nbsp; <br>&nbsp; { &nbsp; <br>&nbsp; //{{AFX_DATA_INIT(CPackInterView) &nbsp; <br>&nbsp; //}}AFX_DATA_INIT &nbsp; <br>&nbsp; m_brush.CreateSolidBrush(RGB(255,255,255));//设为白色 &nbsp; <br>&nbsp; } &nbsp; <br>&nbsp; 接着映射一个WM_CTLCOLOR消息，在ClassWizard中添加.在OnCtlColor中如下设置即可 &nbsp; <br>&nbsp; HBRUSH &nbsp; CPackInterView::OnCtlColor(CDC* &nbsp; pDC, &nbsp; CWnd* &nbsp; pWnd, &nbsp; UINT &nbsp; nCtlColor) &nbsp; &nbsp; <br>&nbsp; { &nbsp; <br>&nbsp; HBRUSH &nbsp; hbr &nbsp; = &nbsp; CFormView::OnCtlColor(pDC, &nbsp; pWnd, &nbsp; nCtlColor); &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; // &nbsp; TODO: &nbsp; Change &nbsp; any &nbsp; attributes &nbsp; of &nbsp; the &nbsp; DC &nbsp; here &nbsp; <br>&nbsp; if(nCtlColor==CTLCOLOR_DLG) &nbsp; <br>&nbsp; return &nbsp; (HBRUSH)m_brush.GetSafeHandle(); &nbsp; <br>&nbsp; // &nbsp; TODO: &nbsp; Return &nbsp; a &nbsp; different &nbsp; brush &nbsp; if &nbsp; the &nbsp; default &nbsp; is &nbsp; not &nbsp; desired &nbsp; <br>&nbsp; return &nbsp; hbr; &nbsp; <br>&nbsp; }&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; <br>
<img src ="http://www.cppblog.com/ivenher/aggbug/21685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-04-12 10:19 <a href="http://www.cppblog.com/ivenher/articles/21685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>滚动条位置</title><link>http://www.cppblog.com/ivenher/articles/21596.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Tue, 10 Apr 2007 06:02:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/21596.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/21596.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/21596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/21596.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/21596.html</trackback:ping><description><![CDATA[在ListBox中怎么样才能使右边的垂直滚动条一直处于列表框的最下端<br><br>int &nbsp; iMinPos &nbsp; = &nbsp; 0; &nbsp; <br>&nbsp; int &nbsp; iMaxPos &nbsp; = &nbsp; 0; &nbsp; <br>&nbsp; m_nInfoList.GetScrollRange(SB_VERT, &nbsp; &amp;iMinPos, &nbsp; &amp;iMaxPos); &nbsp; <br>&nbsp; m_nInfoList.SetScrollPos(SB_VERT, &nbsp; iMaxPos, &nbsp; TRUE); &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; 这样的话，滚条是一直都在底端了，但最新的内容没有显示在最底端(所见部分的最底端).<br><br>CEdit<br><br>&nbsp; int&nbsp;&nbsp; iMinPos&nbsp;&nbsp; =&nbsp;&nbsp; 0;&nbsp;&nbsp; <br>&nbsp; int&nbsp;&nbsp; iMaxPos&nbsp;&nbsp; =&nbsp;&nbsp; 0;&nbsp;&nbsp; <br>&nbsp; m_edit.GetScrollRange(SB_VERT,&nbsp;&nbsp; &amp;iMinPos,&nbsp;&nbsp; &amp;iMaxPos);&nbsp;&nbsp; <br>&nbsp; //m_edit.SetScrollPos(SB_VERT,&nbsp;&nbsp; iMaxPos,&nbsp;&nbsp; TRUE);&nbsp;<br>&nbsp;&nbsp;&nbsp;m_edit.LineScroll(iMaxPos);&nbsp;&nbsp;// Select LAST LINE
<img src ="http://www.cppblog.com/ivenher/aggbug/21596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-04-10 14:02 <a href="http://www.cppblog.com/ivenher/articles/21596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vc6 转换到  vc7的一点问题</title><link>http://www.cppblog.com/ivenher/articles/21308.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Thu, 05 Apr 2007 05:23:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/21308.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/21308.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/21308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/21308.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/21308.html</trackback:ping><description><![CDATA[.H &nbsp; <br>&nbsp; // &nbsp; Generated &nbsp; message &nbsp; map &nbsp; functions &nbsp; <br>&nbsp; //{{AFX_MSG(CConnectThread) &nbsp; <br>&nbsp; //}}AFX_MSG &nbsp; <br>&nbsp; afx_msg &nbsp; LRESULT &nbsp; OnThreadMessage(WPARAM &nbsp; wParam, &nbsp; LPARAM &nbsp; lParam); &nbsp; <br>&nbsp; DECLARE_MESSAGE_MAP() &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; .CPP &nbsp; <br>&nbsp; BEGIN_MESSAGE_MAP(CConnectThread, &nbsp; CWinThread) &nbsp; <br>&nbsp; //{{AFX_MSG_MAP(CConnectThread) &nbsp; <br>&nbsp; //}}AFX_MSG_MAP &nbsp; <br>&nbsp; ON_MESSAGE(WM_THREADMSG, &nbsp; OnThreadMessage)----出错 &nbsp; <br>&nbsp; //ON_THREAD_MESSAGE(WM_THREADMSG, &nbsp; OnThreadMessage) &nbsp; <br>&nbsp; END_MESSAGE_MAP() &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; afx_msg &nbsp; LRESULT &nbsp; CConnectThread::OnThreadMessage(WPARAM &nbsp; wParam, &nbsp; LPARAM &nbsp; lParam) &nbsp; <br>&nbsp; { &nbsp; <br>&nbsp; switch(wParam) &nbsp; <br>&nbsp; { &nbsp; <br>&nbsp; case &nbsp; 0: &nbsp; // &nbsp; destroy &nbsp; data &nbsp; socket &nbsp; <br>&nbsp; m_ConnectSocket.DestroyDataConnection(); &nbsp; <br>&nbsp; break; &nbsp; <br>&nbsp; case &nbsp; 1: &nbsp; // &nbsp; quit &nbsp; ! &nbsp; <br>&nbsp; PostThreadMessage(WM_QUIT,0,0); &nbsp; <br>&nbsp; break; &nbsp; <br>&nbsp; default: &nbsp; <br>&nbsp; break; &nbsp; <br>&nbsp; } &nbsp; <br>&nbsp; return &nbsp; 0L; &nbsp; <br>&nbsp; } &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; d:\ConnectThread.cpp(146) &nbsp; : &nbsp; error &nbsp; C2440: &nbsp; &#8220;static_cast&#8221; &nbsp; : &nbsp; 无法从&#8220;LRESULT &nbsp; (__thiscall &nbsp; CConnectThread::* &nbsp; )(WPARAM,LPARAM)&#8221;转换为&#8220;LRESULT &nbsp; (__thiscall &nbsp; CWnd::* &nbsp; )(WPARAM,LPARAM)&#8221;&nbsp;&nbsp; <br><br>／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／<br>void &nbsp; OnThreadMessage(WPARAM &nbsp; wParam, &nbsp; LPARAM &nbsp; lParam); &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; DECLARE_MESSAGE_MAP() &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; .CPP &nbsp; <br>&nbsp; BEGIN_MESSAGE_MAP(CConnectThread, &nbsp; CWinThread) &nbsp; <br>&nbsp; //{{AFX_MSG_MAP(CConnectThread) &nbsp; <br>&nbsp; //}}AFX_MSG_MAP &nbsp; <br>&nbsp; //ON_MESSAGE(WM_THREADMSG, &nbsp; OnThreadMessage)----出错 &nbsp; <br>&nbsp; ON_THREAD_MESSAGE(WM_THREADMSG, &nbsp; OnThreadMessage) &nbsp; <br>&nbsp; END_MESSAGE_MAP() &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; void &nbsp; CConnectThread::OnThreadMessage(WPARAM &nbsp; wParam, &nbsp; LPARAM &nbsp; lParam) &nbsp; <br>&nbsp; { &nbsp; <br>&nbsp; switch(wParam) &nbsp; <br>&nbsp; { &nbsp; <br>&nbsp; case &nbsp; 0: &nbsp; // &nbsp; destroy &nbsp; data &nbsp; socket &nbsp; <br>&nbsp; m_ConnectSocket.DestroyDataConnection(); &nbsp; <br>&nbsp; break; &nbsp; <br>&nbsp; case &nbsp; 1: &nbsp; // &nbsp; quit &nbsp; ! &nbsp; <br>&nbsp; PostThreadMessage(WM_QUIT,0,0); &nbsp; <br>&nbsp; break; &nbsp; <br>&nbsp; default: &nbsp; <br>&nbsp; break; &nbsp; <br>&nbsp; } &nbsp; <br>&nbsp; return; &nbsp; <br>&nbsp; }&nbsp;&nbsp; <br>／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／／<br><br><br>
<img src ="http://www.cppblog.com/ivenher/aggbug/21308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-04-05 13:23 <a href="http://www.cppblog.com/ivenher/articles/21308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC 多文档用户界面设计 </title><link>http://www.cppblog.com/ivenher/articles/20746.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Wed, 28 Mar 2007 01:32:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/20746.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/20746.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/20746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/20746.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/20746.html</trackback:ping><description><![CDATA[     <span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">用习惯了</span><span lang="EN-US" twffan="done">Delphi</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">、</span><span lang="EN-US" twffan="done">VB</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">、</span><span lang="EN-US" twffan="done">Windows Form</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">（</span><span lang="EN-US" twffan="done">Visual C#</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">）等称之为</span><span lang="EN-US" twffan="done">RAD</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">（</span><span lang="EN-US" twffan="done">Rapid Application Development</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">）的开发工具进行项目开发的都会很满足这些工具和平台提供的快速界面开发的功效：你可以很容易就可以实现一个</span><span lang="EN-US" twffan="done">MIS</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">系统的管理界面，提供一个主框架，点击主框架上的某一个菜单项就打开一个处理事务的窗口，这些窗口可以重叠，可以最大</span><span lang="EN-US" twffan="done">/</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">小化，一切看起来都像那么回事。但是当你在</span><span lang="EN-US" twffan="done">VC</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">中进行开发的时候，发现整个世界都变了，虽然</span><span lang="EN-US" twffan="done">VC</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">提供了</span><span lang="EN-US" twffan="done">MDI</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">支持多文档视图的框架，但是每次你点击“打开”</span><span lang="EN-US" twffan="done">/</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">“新建”菜单项的时候，你会发现新打开的窗口千孔一面，都是同一个样式，根本就不能满足项目的开发。这就需要你能够为不同的业务逻辑提供不同的显示</span><span lang="EN-US" twffan="done">/</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">操作界面。这里给出一个模版，供大家参考：</span><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: red; FONT-FAMILY: Arial" twffan="done">Step 1</span></b><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">：使用</span><span lang="EN-US" twffan="done">VC 6.0</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">新建一个</span><span lang="EN-US" twffan="done">Project</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">，命名为：</span><span lang="EN-US" twffan="done">MIS</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">。除选择单文档属性外，一切使用“默认”方式。于是你可以获得五个类：</span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="COLOR: blue; FONT-FAMILY: Arial" twffan="done">CMainFrame</span></b><span lang="EN-US" twffan="done"></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">，</span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="COLOR: blue; FONT-FAMILY: Arial" twffan="done">CMISApp</span></b><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">，</span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="COLOR: blue; FONT-FAMILY: Arial" twffan="done">CMISDoc</span></b><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">，</span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="COLOR: blue; FONT-FAMILY: Arial" twffan="done">CMISView</span></b><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">，和</span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="COLOR: blue; FONT-FAMILY: Arial" twffan="done">CAboutDlg</span></b><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">；</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span></span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: red; FONT-FAMILY: Arial" twffan="done">Step 2</span></b><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">：新建一套新的</span><span lang="EN-US" twffan="done">Doc/View/Frame</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">：添加新类</span><span lang="EN-US" twffan="done">CNewDoc</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">，基类为</span><span lang="EN-US" twffan="done">CDocument</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">（方法：</span><span lang="EN-US" twffan="done">Insert</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">——</span><span lang="EN-US" twffan="done">&gt;New Class</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">（</span><span lang="EN-US" twffan="done">Class Type</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">：</span><span lang="EN-US" twffan="done">MFC Class</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">），基类选择</span><span lang="EN-US" twffan="done">CDocument</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">）。添加新的框架类</span><span lang="EN-US" twffan="done">CNewChildFrame</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">，基类为</span><span lang="EN-US" twffan="done">CMDIChildWnd</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">，添加方法同上。添加新的视图类</span><span lang="EN-US" twffan="done">CNewView</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">，方法：</span><span lang="EN-US" twffan="done">Insert</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">——</span><span lang="EN-US" twffan="done">&gt;New Form</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">，对话框中的文档类选择为</span><span lang="EN-US" twffan="done">CNewDoc</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">（默认也是）。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span></span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: red; FONT-FAMILY: Arial" twffan="done">Step 3</span></b><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">：将菜单资源</span><span lang="EN-US" twffan="done">IDR_MAINFRAME</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">中添加菜单项“功能”，并添加菜单子项“功能</span><?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?><st1:chmetcnv w:st="on" unitname="”" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" twffan="done">1</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">”</span></st1:chmetcnv><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">和“功能</span><st1:chmetcnv w:st="on" unitname="”" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" twffan="done">2</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">”</span></st1:chmetcnv><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">，分别对应项目开发中的不同的业务逻辑。为了保证整个过程中菜单项的一致性，在</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">IDR_MAINFRAME</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">上</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">Ctrl + C</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">，然后</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">Ctrl +V</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">两次生成和</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">IDR_MAINFRAME</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">一样的菜单两个，然后将这两个菜单分别改名为</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">IDR_MISTYPE</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">和</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">IDR_VIEW2_TMPL</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">（注意：先将后两个菜单名字</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">Copy</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">再删除它们，然后再改名，这里菜单的名字可以换，但是为了简单就直接使用系统生成的默认菜单名字，如果改变了名字要在</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">New CMultiDocTemplate</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">时刻修改相应项）。</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: red; FONT-FAMILY: Arial" twffan="done">Step 4</span></b><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">：在</span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="COLOR: blue; FONT-FAMILY: Arial" twffan="done">CMISApp</span></b><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">中添加变量记录这两个框架类，为简单起见就声明为</span><span lang="EN-US" twffan="done">public</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">（方便后面的访问，也就懒得管面向对象的设计原则了，因为仅仅是示例而已）：</span></p><div align="center" twffan="done"><table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #d9d9d9; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid green .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid green; mso-border-insidev: .5pt solid green" cellspacing="0" cellpadding="0" border="1"><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: green 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: green 1pt solid; WIDTH: 257.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid green .5pt" valign="top" width="343"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done">public</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang="EN-US" twffan="done">CMultiDocTemplate* m_pDocTemplate1;</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>CMultiDocTemplate* m_pDocTemplate2;</span></p></td></tr></tbody></table></div><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">并将</span><span lang="EN-US" twffan="done">BOOL CMISApp::InitInstance()</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">函数中由</span><span lang="EN-US" twffan="done">VC</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">自动生成的代码作如下改变：</span></p><table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #d9d9d9; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid green .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid green; mso-border-insidev: .5pt solid green" cellspacing="0" cellpadding="0" border="1"><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"><td style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: green 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: green 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid green .5pt" valign="top" width="568"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang="EN-US" twffan="done">{<span style="mso-tab-count: 1" twffan="done">   </span>// BLOCK: doc template registration</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">     </span>// Register the document template.<span style="mso-spacerun: yes" twffan="done">  </span>Document templates serve</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">     </span>// as the connection between documents, frame windows and views.</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">     </span>// Attach this form to another document or frame window by changing</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">     </span>// the document or frame class in the constructor below.</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">     </span>CMultiDocTemplate* m_pDocTemplate2 = new CMultiDocTemplate(</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">            </span>IDR_VIEW2_TMPL,<span style="mso-spacerun: yes" twffan="done">          </span>//</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">这里就是菜单项目</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">            </span>RUNTIME_CLASS(CNewDoc),<span style="mso-tab-count: 2" twffan="done">          </span>// document class</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">            </span>RUNTIME_CLASS(CMDIChildWnd),<span style="mso-tab-count: 2" twffan="done">         </span>// frame class</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">            </span>RUNTIME_CLASS(CNewView));<span style="mso-tab-count: 2" twffan="done">        </span>// view class</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">     </span>AddDocTemplate(m_pDocTemplate2);</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; mso-char-indent-count: 2.57"><span lang="EN-US" twffan="done">}</span></p></td></tr><tr style="mso-yfti-irow: 1"><td style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: green 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid green .5pt; mso-border-top-alt: solid green .5pt" valign="top" width="568"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">改为</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">：</span><span lang="EN-US" twffan="done">1</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">）（注意将</span><span lang="EN-US" twffan="done">CMultiDocTemplate*</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">去掉，否则你是新建了一个</span><span lang="EN-US" twffan="done">CMultiDocTemplate*</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">的对</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">象）</span><span lang="EN-US" twffan="done">2</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">）如果不是选用</span><span lang="EN-US" twffan="done">New Form </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">则没有生成以上代码，则直接添加以下代码。</span></p></td></tr><tr style="mso-yfti-irow: 2; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: green 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid green .5pt; mso-border-top-alt: solid green .5pt" valign="top" width="568"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 17.85pt; mso-char-indent-count: 1.7"><span lang="EN-US" twffan="done">m_pDocTemplate2 = new CMultiDocTemplate(</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done"></span>IDR_VIEW2_TMPL,</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done"></span>RUNTIME_CLASS(CNewDoc),<span style="mso-tab-count: 2" twffan="done">          </span>// document class</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done"></span>RUNTIME_CLASS(CNewChildFrame),<span style="mso-tab-count: 2" twffan="done">              </span>// frame class</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done"></span>RUNTIME_CLASS(CNewView));<span style="mso-tab-count: 2" twffan="done">        </span>// view class</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71"><span lang="EN-US" twffan="done">AddDocTemplate(m_pDocTemplate2);</span></p></td></tr></tbody></table><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">以及：</span></p><table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #d9d9d9; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid green .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid green; mso-border-insidev: .5pt solid green" cellspacing="0" cellpadding="0" border="1"><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"><td style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: green 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: green 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid green .5pt" valign="top" width="568"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>CMultiDocTemplate* pDocTemplate;</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>pDocTemplate = new CMultiDocTemplate(</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>IDR_MISTYPE,</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>RUNTIME_CLASS(CMISDoc),</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>RUNTIME_CLASS(CChildFrame), // custom MDI child frame</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>RUNTIME_CLASS(CMISView));</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>AddDocTemplate(pDocTemplate);*/</span></p></td></tr><tr style="mso-yfti-irow: 1"><td style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: green 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid green .5pt; mso-border-top-alt: solid green .5pt" valign="top" width="568"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">改为</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">：（注意将</span><span lang="EN-US" twffan="done">CMultiDocTemplate*</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">去掉，否则你是新建了一个</span><span lang="EN-US" twffan="done">CMultiDocTemplate*</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">的对象）</span></p></td></tr><tr style="mso-yfti-irow: 2; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: green 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid green .5pt; mso-border-top-alt: solid green .5pt" valign="top" width="568"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang="EN-US" twffan="done">m_pDocTemplate1 = new CMultiDocTemplate(</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>IDR_MISTYPE,</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>RUNTIME_CLASS(CMISDoc),</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>RUNTIME_CLASS(CChildFrame), // custom MDI child frame</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>RUNTIME_CLASS(CMISView));</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang="EN-US" twffan="done">AddDocTemplate(m_pDocTemplate1);</span></p></td></tr></tbody></table><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: red; FONT-FAMILY: Arial" twffan="done">Step 5</span></b><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">：在</span><span lang="EN-US" twffan="done">MainFrm.h</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">中添加两个文档类变量记录这里的两个不同的</span><span lang="EN-US" twffan="done">Document</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">，为简单起见就声明为</span><span lang="EN-US" twffan="done">public</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">：</span></p><div align="center" twffan="done"><table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #d9d9d9; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid green .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid green; mso-border-insidev: .5pt solid green" cellspacing="0" cellpadding="0" border="1"><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: green 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: green 1pt solid; WIDTH: 257.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid green .5pt" valign="top" width="343"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done">public</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang="EN-US" twffan="done">CMISDoc* m_pDoc1;</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>CNewDoc* m_pDoc2</span></p></td></tr></tbody></table></div><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" twffan="done">注意：在</span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: blue; FONT-FAMILY: Arial; mso-fareast-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" twffan="done">CMainFrame</span><span style="FONT-SIZE: 10.5pt; COLOR: blue; FONT-FAMILY: 宋体; mso-hansi-font-family: Arial; mso-ascii-font-family: Arial; mso-bidi-font-family: Arial; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" twffan="done">构造函数</span></b><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" twffan="done">中将上面两个变量置为</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" twffan="done">NULL</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" twffan="done">（否则：））。</span>并响应</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">IDR_MAINFRAME</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">的两个菜单项目“功能</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">1</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">”和“功能</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">2</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt" twffan="done">”消息，在各自的响应菜单中分别添加响应函数：</span><span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt" twffan="done"><o:p></o:p></span></p><table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #d9d9d9; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid green .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid green; mso-border-insidev: .5pt solid green" cellspacing="0" cellpadding="0" border="1"><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: green 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: green 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid green .5pt" valign="top" width="568"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>// TODO: Add your command handler code here</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>if (m_pDoc1 != NULL)<span style="mso-spacerun: yes" twffan="done">   </span>//</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">已经打开则激活</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>{</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>POSITION pos;</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>pos =m_pDoc1-&gt;GetFirstViewPosition();</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>CView* pView = m_pDoc1-&gt;GetNextView(pos);</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>pView-&gt;GetParentFrame()-&gt;ActivateFrame();</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>}</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>else</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>{</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>CMISApp* pApp = (CMISApp*)AfxGetApp();</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>m_pDoc1 = (CMISDoc*)(pApp-&gt;m_pDocTemplate1-&gt;OpenDocumentFile(NULL));</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>}</span></p></td></tr></tbody></table><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">和：</span></p><table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #e0e0e0; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid green .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid green; mso-border-insidev: .5pt solid green" cellspacing="0" cellpadding="0" border="1"><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: green 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: green 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: green 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: green 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid green .5pt" valign="top" width="568"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>// TODO: Add your command handler code here</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>if (m_pDoc2 != NULL)</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>{</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>POSITION pos;</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>pos =m_pDoc2-&gt;GetFirstViewPosition();</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>CView* pView = m_pDoc2-&gt;GetNextView(pos);</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>pView-&gt;GetParentFrame()-&gt;ActivateFrame();</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>}</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>else</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>{</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>CMISApp* pApp = (CMISApp*)AfxGetApp();</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 2" twffan="done">              </span>m_pDoc2 = (CNewDoc*)(pApp-&gt;m_pDocTemplate2-&gt;OpenDocumentFile(NULL));</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span>}</span></p></td></tr></tbody></table><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">       </span></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">至此就完成了整个工作，需要说明的是：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'" twffan="done"><span style="mso-list: Ignore" twffan="done">1）<span style="FONT: 7pt 'Times New Roman'" twffan="done">  </span></span></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">实现中由于使用到相关的类，因此在必要的地方要</span><span lang="EN-US" twffan="done">include</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">相关的头文件，这里省略（编译有错误的时候添加就是了：））；</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'" twffan="done"><span style="mso-list: Ignore" twffan="done">2）<span style="FONT: 7pt 'Times New Roman'" twffan="done">  </span></span></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'" twffan="done">这里给出的是一个示例代码，实际开发中可以通过参考实现获得自己想要实现的具体应用情况（例如视图类的不同、数量不同，更重要的还有业务逻辑的不同实现等）；</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'" twffan="done"><span style="mso-list: Ignore" twffan="done"> </span></span></p><img src ="http://www.cppblog.com/ivenher/aggbug/20746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-03-28 09:32 <a href="http://www.cppblog.com/ivenher/articles/20746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入分析MFC文档视图结构（转）</title><link>http://www.cppblog.com/ivenher/articles/20707.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Tue, 27 Mar 2007 07:32:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/20707.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/20707.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/20707.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/20707.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/20707.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 文档视图结构（				Document/View Architecture				）是				MFC				的精髓，也是				Observer				模式的具体实现框架之一，				Document/View Architecture				通过将数据和其表示分开，提供了很好的数据层次和表现层次的解耦。然而，虽然我们使用				MFC AppWizard	...&nbsp;&nbsp;<a href='http://www.cppblog.com/ivenher/articles/20707.html'>阅读全文</a><img src ="http://www.cppblog.com/ivenher/aggbug/20707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-03-27 15:32 <a href="http://www.cppblog.com/ivenher/articles/20707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SetTimer的使用问题 </title><link>http://www.cppblog.com/ivenher/articles/19969.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Fri, 16 Mar 2007 08:54:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/19969.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/19969.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/19969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/19969.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/19969.html</trackback:ping><description><![CDATA[
		<p>etTimer函数用于创建一个计时器，KillTimer函数用于销毁一个计时器。计时器属于系统资源，使用完应及时销毁。</p>
		<p>　</p>
		<p>　　<strong><font color="#003399">SetTimer</font></strong>的函数原型如下：<br /><font color="#003366">UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc ) ;</font><br />　　其中<br />　　hWnd是和timer关联的窗口句柄，此窗口必须为调用SetTimer的线程所有；如果hWnd为NULL，没有窗口和timer相关联并且nIDEvent参数被忽略 <br />　　nIDEvent是timer的标识，为非零值；如果hWnd为NULL则被忽略；如果hWnd非NULL而且与timer相关联的窗口已经存在一个为此标识的timer，则此次SetTimer调用将用新的timer代替原来的timer。timer标识和窗口相关，两个不同的窗口可以拥有nIDEvent相同的tiemr <br />　　uElapse是以毫秒指定的计时间隔值，范围为1毫秒到4,294,967,295毫秒（将近50天），这个值指示Windows每隔多久时间给程序发送WM_TIMER消息。 <br />　　lpTimerFunc是一个回调函数的指针，俗称TimerFunc；如果lpTimerFunc为NULL，系统将向应用程序队列发送WM_TIMER消息；如果lpTimerFunc指定了一个值，DefWindowProc将在处理WM_TIMER消息时调用这个lpTimerFunc所指向的回调函数，因此即使使用TimerProc代替处理WM_TIMER也需要向窗口分发消息。 <br /></p>
		<p>　　关于SetTimer的返回值：如果hWnd为NULL，返回值为新建立的timer的ID，如果hWnd非NULL，返回一个非0整数，如果SetTimer调用失败则返回0 <br /></p>
		<p>　　<strong><font color="#003399">KillTimer</font></strong>的函数原型为：<font color="#003366">BOOL KillTimer( HWND hWnd, UINT_PTR uIDEvent ) ;</font> 参数意义同SetTimer。 <br />　　关于KillTimer对消息队列中剩余未处理的WM_TIMER消息的影响，MSDN和Programming Windows上的说法完全相反。MSDN的说法很干脆：<font color="#336600">The KillTimer function does not remove WM_TIMER messages already posted to the message queue.</font> 而petzold则说 <font color="#336600">The KillTimer call purges the message queue of any pending WM_TIMER messages. Your program will never receive a stray WM_TIMER message following a KillTimer call.</font><font color="#339900"></font>(KillTimer消除消息队列中任何未处理的WM_TIMER消息，调用KillTimer后你的程序永远不会收到一条“漂泊游荡”的WM_TIMER消息) </p>
		<p>  
</p>
		<table cellspacing="0" cellpadding="2" width="100%" bgcolor="#003399" border="0">
				<tbody>
						<tr>
								<td>
										<font color="#ffffff">
												<strong>关于WM_TIMER消息</strong>
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<strong>
				</strong>　　wParam为计时器的ID；如果需要设定多个计时器，那么对每个计时器都使用不同的计时器ID。wParam的值将随传递到窗口过程中的WM_TIMER消息的不同而不同。<br />　　lParam为指向TimerProc的指针，如果调用SetTimer时没有指定TimerProc(参数值为NULL)，则lParam为0(即NULL)。 <br />　　可以通过在窗口过程中提供一个WM_TIMER case处理这个消息，或者，默认窗口过程会调用SetTimer中指定的TimerProc来处理WM_TIMER消息</p>
		<p>
		</p>
		<table cellspacing="0" cellpadding="2" width="100%" bgcolor="#003498" border="0">
				<tbody>
						<tr>
								<td>
										<strong>
												<font color="#ffffff">使用计时器的三种方法</font>
										</strong>
								</td>
						</tr>
				</tbody>
		</table>
		<p>　　如果在程序的整个执行过程中使用计时器，一般在处理WM_CREATE消息时或WinMain中消息循环前调用SetTimer,在处理WM_DESTROY消息时或在WinMain中消息循环后return前调用KillTimer。根据SetTimer中的参数不同，有三种方法使用计时器。</p>
		<p>　　方法一：<font color="#003366">调用SetTimer时<font color="#ff3333">指定窗口句柄</font>hWnd，nIDEvent中<font color="#ff3333">指定计时器ID</font>，将<font color="#ff3333">lpTimerFunc置NULL</font>从而不使用TimerProc；<font color="#ff3333">在窗口过程中处理WM_TIMER消息</font>。</font>调用KillTimer时，使用SetTimer中指定的hWnd和id。最好使用#define定义timer的id，例如：</p>
		<p>
		</p>
		<table cellpadding="2" width="90%" align="center" bgcolor="#666666" border="0">
				<tbody>
						<tr bgcolor="#cccccc">
								<td>
										<font color="#003366">#define ID_TIMER 1 <br />SetTimer(hWnd,ID_TIMER,1000,NULL) ;<br />KillTimer(hWnd,ID_TIMER) ;</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>　　方法二：<font color="#003366">调用SetTimer时<font color="#ff3333">指定窗口句柄</font>hWnd，nIDEvent中<font color="#ff3333">指定计时器ID</font>，<font color="#ff3333">lpTimerFunc参数不为NULL</font>而指定为TimerProc函数的指针。</font>这种方法<font color="#ff3333">使用TimerProc函数(名字可自定)处理WM_TIMER消息</font>：</p>
		<p>
		</p>
		<table cellpadding="2" width="90%" align="center" bgcolor="#666666" border="0">
				<tbody>
						<tr bgcolor="#cccccc">
								<td>
										<font color="#003366">VOID CALLBACK TimerProc ( HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)<br />{<br />　//处理WM_TIMER讯息 <br />}</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>　　　TimerProc的参数hwnd是在调用SetTimer时指定的窗口句柄。Windows只把WM_TIMER消息送给TimerProc，因此消息参数总是等于WM_TIMER。iTimerID值是计时器ID，dwTimer值是与从GetTickCount函数的返回值相容的值。这是自Windows启动后所经过的毫秒数。 使用这种方法时，相关函数调用的形式为：</p>
		<p>
		</p>
		<table cellpadding="2" width="90%" align="center" bgcolor="#666666" border="0">
				<tbody>
						<tr bgcolor="#cccccc">
								<td>
										<font color="#003366">SetTimer(hWnd,ID_TIMER,1000,TimerProc) ;<br />KillTimer(hWnd,ID_TIMER) ;</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>　　方法三：<font color="#003366">调用SetTimer时<font color="#ff3333">不指定窗口句柄(为NULL)</font>，<font color="#ff3333">iTimerID参数自然被忽略</font>，<font color="#ff3333">lpTimerFunc不为NULL</font>而指定为TimerProc的指针。</font>正如上面SetTimer的讨论中所说的，此时SetTimer的返回值正是新建立的计时器的ID，需将这个ID保存以供KillTimer销毁计时器时所用。当然，KillTimer的hWnd参数也置为NULL。这种方法<font color="#ff3333">同样用TimerProc处理WM_TIMER消息</font>。</p>
		<p>
		</p>
		<table cellpadding="2" width="90%" align="center" bgcolor="#666666" border="0">
				<tbody>
						<tr bgcolor="#cccccc">
								<td>
										<font color="#003366">UINT_PTR iTimerID ; <br />iTimerID = SetTimer(NULL,0,1000,TimerProc) ;<br />KillTimer(NULL,iTimerID) ;</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>　　使用这种方法的好处是不必自己指定计时器ID,这样就不必担心用错ID。</p>
		<p>
		</p>
		<table cellspacing="0" cellpadding="2" width="100%" bgcolor="#b0a8d8" border="0">
				<tbody>
						<tr bgcolor="#003399">
								<td>
										<font color="#ffffff">
												<strong>使用多个计时器</strong>
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>　　使用多个计时器只要在建立计时器时指定不同的ID。比如用上面所述方法一时的情况：</p>
		<p>
		</p>
		<table cellpadding="2" width="90%" align="center" bgcolor="#666666" border="0">
				<tbody>
						<tr bgcolor="#cccccc">
								<td>
										<font color="#003366">#define TIMER_SEC 1<br />#define TIMER_MIN 2</font>
										<br />然后使用两个SetTimer来设定两个计时器：<br /><font color="#003366">SetTimer (hwnd, TIMER_SEC, 1000, NULL) ;<br />SetTimer (hwnd, TIMER_MIN, 60000, NULL) ; </font><br />WM_TIMER的处理如下所示：<br /><font color="#003366">case WM_TIMER:<br />　switch (wParam)<br />　{<br />　　case TIMER_SEC:<br />　　　//每秒一次的处理 <br />　　　break ;<br />　　case TIMER_MIN:<br />　　　//每分钟一次的处理<br />　　　break ;<br />　}<br />　return 0 ;</font></td>
						</tr>
				</tbody>
		</table>
		<p> </p>
		<p>
		</p>
		<table cellspacing="0" cellpadding="2" width="100%" bgcolor="#003498" border="0">
				<tbody>
						<tr>
								<td>
										<font color="#ffffff">
												<strong>改变计时器的时间间隔</strong>
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>　　如果想将一个已经存在的计时器设定为不同的时间间隔，可以简单地用不同的时间值再次调用SetTimer。</p>
		<p>
		</p>
		<table cellspacing="0" cellpadding="2" width="100%" bgcolor="#003498" border="0">
				<tbody>
						<tr>
								<td>
										<font color="#ffffff">
												<strong>计时器精确吗？</strong>
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>　　计时器并不精确。有两个原因：</p>
		<p>　　原因一：Windows计时器是硬件和ROM BIOS架构下之计时器一种相对简单的扩充。回到Windows以前的MS-DOS程序写作环境下，应用程式能够通过拦截者称为timer tick的BIOS中断来实现时钟或计时器。一些为MS-DOS编写的程序自己拦截这个硬件中断以实现时钟和计时器。这些中断每54.915毫秒产生一次，或者大约每秒18.2次。这是原始的IBM PC的微处理器频率值4.772720 MHz被218所除而得出的结果。在Windows 98中，计时器与其下的PC计时器一样具有55毫秒的解析度。在Microsoft Windows NT中，计时器的解析度为10毫秒。Windows应用程式不能以高于这些解析度的频率（在Windows 98下，每秒18.2次，在Windows NT下，每秒大约100次）接收WM_TIMER消息。在SetTimer中指定的时间间隔总是截尾后tick数的整数倍。例如，1000毫秒的间隔除以54.925毫秒，得到18.207个tick，截尾后是18个tick，它实际上是989毫秒。对每个小于55毫秒的间隔，每个tick都会产生一个WM_TIMER消息。 <br />　　可见，计时器并不能严格按照指定的时间间隔发送WM_TIMER消息，它总要相差那么几毫秒。</p>
		<p>　　即使忽略这几个毫秒的差别，计时器仍然不精确。请看原因二：<br />　　WM_TIMER消息放在正常的消息队列之中，和其他消息排列在一起，因此，如果在SetTimer中指定间隔为1000毫秒，那么不能保证程序每1000毫秒或者989毫秒就会收到一个WM_TIMER消息。如果其他程序的执行事件超过一秒，在此期间内，您的程式将收不到任何WM_TIMER讯息。事实上， Windows对WM_TIMER消息的处理非常类似于对WM_PAINT消息的处理，这两个消息都是低优先级的，程序只有在消息队列中没有其他消息时才接收它们。<br />　　WM_TIMER还在另一方面和WM_PAINT相似：Windows不能持续向消息队列中放入多个WM_TIMER讯息，而是将多余的WM_TIMER消息组合成一个消息。因此，应用程序不会一次收到多个这样的消息，尽管可能在短时间内得到两个WM_TIMER消息。应用程序不能确定这种处理方式所导致的WM_TIMER消息「遗漏」的数目。<br />　　可见，WM_TIMER消息并不能及时被应用程序所处理，WM_TIMER在消息队列中的延误可能就不能用毫秒来计算了。</p>
		<p>　　由以上两点，你不能通过在处理WM_TIMER时一秒一秒计数的方法来计时。如果要实现一个时钟程序，可以使用系统的时间函数如GetLocalTime ，而在时钟程序中，计时器的作用是定时调用GetLocalTime获得新的时间并刷新时钟画面，当然这个刷新的间隔要等于或小于1秒。</p>
		<p> </p>
<img src ="http://www.cppblog.com/ivenher/aggbug/19969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2007-03-16 16:54 <a href="http://www.cppblog.com/ivenher/articles/19969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入getmessage和peekmessage</title><link>http://www.cppblog.com/ivenher/articles/12473.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Thu, 14 Sep 2006 10:18:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/12473.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/12473.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/12473.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/12473.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/12473.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: bob gunderson																		msdn						技术组																		作于						:1992						年						11						月						11						日																																 					...&nbsp;&nbsp;<a href='http://www.cppblog.com/ivenher/articles/12473.html'>阅读全文</a><img src ="http://www.cppblog.com/ivenher/aggbug/12473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ivenher/" target="_blank">爱饭盒</a> 2006-09-14 18:18 <a href="http://www.cppblog.com/ivenher/articles/12473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CArchive原理 </title><link>http://www.cppblog.com/ivenher/articles/12459.html</link><dc:creator>爱饭盒</dc:creator><author>爱饭盒</author><pubDate>Thu, 14 Sep 2006 07:17:00 GMT</pubDate><guid>http://www.cppblog.com/ivenher/articles/12459.html</guid><wfw:comment>http://www.cppblog.com/ivenher/comments/12459.html</wfw:comment><comments>http://www.cppblog.com/ivenher/articles/12459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ivenher/comments/commentRss/12459.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ivenher/services/trackbacks/12459.html</trackback:ping><description><![CDATA[
		<div class="postsub" twffan="done">
				<p>
						<strong>
								<img height="16" src="http://www.vckbase.com/document/image/paragraph.gif" width="14" twffan="done" />
								<a name="A1">
								</a>一.概述 </strong>
				</p>CArchive使用了缓冲区，即一段内存空间作为临时数据存储地，对CArchive的读写都先依次排列到此缓冲区，当缓冲区满或用户要求时，将此段整理后的数据读写到指定的存储煤质。 <br />当建立CArchive对象时，应指定其模式是用于缓冲区读，还是用于缓冲区写。 <br />可以这样理解，CArchive对象相当于铁路的货运练调度站，零散的货物被收集，当总量到达火车运量的时候，由火车装运走。 <br />当接到火车的货物时，则货物由被分散到各自的货主。与货运不同的是，交货、取货是按时间循序执行的，而不是凭票据。因此必须保证送货的和取货的货主按同样的循序去存或取。 <br />对于大型的货物，则是拆散成火车单位，运走，取货时，依次取各部分，组装成原物。 
<p></p><p><strong><img height="16" src="http://www.vckbase.com/document/image/paragraph.gif" width="14" twffan="done" /><a id="A2" name="A2"></a>二.内部数据</strong><br />缓冲区指针 BYTE* m_lpBufStart,指向缓冲区，这个缓冲区有可能是底层CFile(如派生类CMemFile)对象提供的，但一般是CArchive自己建立的。 <br />缓冲区尾部指针 BYTE* m_lpBufMax; <br />缓冲区当前位置指针 BYTE* m_lpBufCur; <br />初始化时，如果是读模式,当前位置在尾部，如果是写模式，当前位置在头部: </p><pre>m_lpBufCur = (IsLoading()) ? m_lpBufMax : m_lpBufStart;</pre><strong><img height="16" src="http://www.vckbase.com/document/image/paragraph.gif" width="14" twffan="done" /><a id="A3" name="A3"></a>三.基本数据读写 </strong><p>对于基本的数据类型，例如字节、双字等，可以直接使用"&gt;&gt;"、"&lt;&lt;"符号进行读出、写入。 </p><pre>//操作符定义捕:
	
//插入操作
CArchive&amp; operator&lt;&lt;(BYTE by);
CArchive&amp; operator&lt;&lt;(WORD w);
CArchive&amp; operator&lt;&lt;(LONG l);
CArchive&amp; operator&lt;&lt;(DWORD dw);
CArchive&amp; operator&lt;&lt;(float f);
CArchive&amp; operator&lt;&lt;(double d);
CArchive&amp; operator&lt;&lt;(int i);
CArchive&amp; operator&lt;&lt;(short w);
CArchive&amp; operator&lt;&lt;(char ch);
CArchive&amp; operator&lt;&lt;(unsigned u);

//提取操作
CArchive&amp; operator&gt;&gt;(BYTE&amp; by);
CArchive&amp; operator&gt;&gt;(WORD&amp; w);
CArchive&amp; operator&gt;&gt;(DWORD&amp; dw);
CArchive&amp; operator&gt;&gt;(LONG&amp; l);
CArchive&amp; operator&gt;&gt;(float&amp; f);
CArchive&amp; operator&gt;&gt;(double&amp; d);

CArchive&amp; operator&gt;&gt;(int&amp; i);
CArchive&amp; operator&gt;&gt;(short&amp; w);
CArchive&amp; operator&gt;&gt;(char&amp; ch);
CArchive&amp; operator&gt;&gt;(unsigned&amp; u);</pre>下面以双字为例，分析原码 
<p><strong>双字的插入(写)</strong></p><pre>CArchive&amp; CArchive::operator&lt;&lt;(DWORD dw)
{
	if (m_lpBufCur + sizeof(DWORD) &gt; m_lpBufMax) //缓冲区空间不够
		Flush();  //缓冲区内容提交到实际存储煤质。

	if (!(m_nMode &amp; bNoByteSwap))
		_AfxByteSwap(dw, m_lpBufCur);  //处理字节顺序
	else
		*(DWORD*)m_lpBufCur = dw;      //添入缓冲区

	m_lpBufCur += sizeof(DWORD); 	   //移动当前指针
	return *this;
}
</pre><strong>双字的提取(读)</strong><pre>CArchive&amp; CArchive::operator&gt;&gt;(DWORD&amp; dw)
{
	if (m_lpBufCur + sizeof(DWORD) &gt; m_lpBufMax) //缓冲区要读完了
		FillBuffer(sizeof(DWORD) - (UINT)(m_lpBufMax - m_lpBufCur));  //重新读入内容到缓冲区

	dw = *(DWORD*)m_lpBufCur;		//读取双字
	m_lpBufCur += sizeof(DWORD);	//移动当前位置指针

	if (!(m_nMode &amp; bNoByteSwap))
		_AfxByteSwap(dw, (BYTE*)&amp;dw);  //处理字节顺序
	return *this;
}
</pre><strong><img height="16" src="http://www.vckbase.com/document/image/paragraph.gif" width="14" twffan="done" /><a id="A4" name="A4"></a>四.缓冲区的更新</strong><br /><br />以上操作中，当缓冲区将插入满或缓冲区将提取空时，都将对缓冲区进行更新处理。<br /><br />缓冲区将插入满时调用Flush(); <pre>void CArchive::Flush()
{
	AS