﻿<?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++博客-披星戴月-随笔分类-Win32</title><link>http://www.cppblog.com/wangjs720/category/3868.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 08:19:26 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 08:19:26 GMT</pubDate><ttl>60</ttl><item><title>将CListCtrl中的数据导出至Excel</title><link>http://www.cppblog.com/wangjs720/archive/2007/09/10/31934.html</link><dc:creator>披星戴月</dc:creator><author>披星戴月</author><pubDate>Mon, 10 Sep 2007 04:25:00 GMT</pubDate><guid>http://www.cppblog.com/wangjs720/archive/2007/09/10/31934.html</guid><wfw:comment>http://www.cppblog.com/wangjs720/comments/31934.html</wfw:comment><comments>http://www.cppblog.com/wangjs720/archive/2007/09/10/31934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wangjs720/comments/commentRss/31934.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wangjs720/services/trackbacks/31934.html</trackback:ping><description><![CDATA[<p>#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE11\\MSO.DLL" rename( "RGB", "MSORGB" )<br>using namespace Office;</p>
<p>#pragma warning(disable : 4192)</p>
<p>#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"<br>#import "D:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE" \<br>&nbsp;&nbsp;rename( "DialogBox", "ExcelDialogBox" ) \<br>&nbsp;&nbsp;rename( "RGB", "ExcelRGB" ) \<br>&nbsp;&nbsp;rename( "CopyFile", "ExcelCopyFile" ) \<br>&nbsp;&nbsp;rename( "ReplaceText", "ExcelReplaceText" )<br><br>void CRecordView::OnFileExport()<br>{<br>&nbsp;TCHAR szFilter[] = { _T("Excel文件 (*.xls)|*.xls|所有文件 (*.*)|*.*||") };<br>&nbsp;CFileDialog SaveDialog(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);<br>&nbsp;if (SaveDialog.DoModal() == IDOK)<br>&nbsp;{<br>&nbsp;&nbsp;_variant_t&nbsp;varOption((long)DISP_E_PARAMNOTFOUND, VT_ERROR);</p>
<p>&nbsp;&nbsp;CWaitCursor wait;</p>
<p>&nbsp;&nbsp;try<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;Excel::_ApplicationPtr pExcelApp(_T("Excel.Application"));<br>&nbsp;&nbsp;&nbsp;Excel::_WorkbookPtr pBook = pExcelApp-&gt;Workbooks-&gt;Add(varOption);<br>&nbsp;&nbsp;&nbsp;Excel::_WorksheetPtr pSheet = pBook-&gt;ActiveSheet;</p>
<p>&nbsp;&nbsp;&nbsp;//Excel::RangePtr pRange = pSheet-&gt;GetRange(_T("A1"), _T("D1"));<br>&nbsp;&nbsp;&nbsp;Excel::RangePtr pRange = pSheet-&gt;Cells;<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;CHeaderCtrl* pHeader = m_wndList.GetHeaderCtrl();<br>&nbsp;&nbsp;&nbsp;int nColumn = pHeader-&gt;GetItemCount();</p>
<p>&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;TCHAR szText[40] = { 0 };<br>&nbsp;&nbsp;&nbsp;&nbsp;HDITEM hdi = { 0 };<br>&nbsp;&nbsp;&nbsp;&nbsp;hdi.mask = HDI_TEXT;<br>&nbsp;&nbsp;&nbsp;&nbsp;hdi.pszText = szText;<br>&nbsp;&nbsp;&nbsp;&nbsp;hdi.cchTextMax = 40;<br>&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 1; i &lt; nColumn; i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pHeader-&gt;GetItem(i, &amp;hdi);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pRange-&gt;Item[1][i] = hdi.pszText;<br>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;Excel::RangePtr pHeaderRange = pRange-&gt;GetRange(variant_t(_T("A1")), variant_t(_T("F1")));<br>&nbsp;&nbsp;&nbsp;&nbsp;pHeaderRange-&gt;Font-&gt;Bold = true;<br>&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; m_wndList.GetItemCount(); i++)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;for (int j = 1; j &lt; nColumn; j++)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pRange-&gt;Item[i+2][j] = (LPCTSTR)m_wndList.GetItemText(i, j);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;pRange = pRange-&gt;EntireColumn;<br>&nbsp;&nbsp;&nbsp;pRange-&gt;AutoFit();</p>
<p>&nbsp;&nbsp;&nbsp;pBook-&gt;Close(true, (LPCTSTR)SaveDialog.GetPathName(), varOption);<br>&nbsp;&nbsp;&nbsp;pExcelApp-&gt;Quit();</p>
<p>&nbsp;&nbsp;&nbsp;AfxMessageBox(_T("数据已成功导出到Excel表格中！"), MB_OK | MB_ICONINFORMATION);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;catch (...)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;AfxMessageBox(_T("导出数据错误！"), MB_OK | MB_ICONERROR);<br>&nbsp;&nbsp;&nbsp;return;<br>&nbsp;&nbsp;}<br>&nbsp;}<br>}</p>
<img src ="http://www.cppblog.com/wangjs720/aggbug/31934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wangjs720/" target="_blank">披星戴月</a> 2007-09-10 12:25 <a href="http://www.cppblog.com/wangjs720/archive/2007/09/10/31934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在对话框里面使用ON_UPDATE_COMMAND_UI映射工具条</title><link>http://www.cppblog.com/wangjs720/archive/2007/09/10/31933.html</link><dc:creator>披星戴月</dc:creator><author>披星戴月</author><pubDate>Mon, 10 Sep 2007 04:22:00 GMT</pubDate><guid>http://www.cppblog.com/wangjs720/archive/2007/09/10/31933.html</guid><wfw:comment>http://www.cppblog.com/wangjs720/comments/31933.html</wfw:comment><comments>http://www.cppblog.com/wangjs720/archive/2007/09/10/31933.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wangjs720/comments/commentRss/31933.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wangjs720/services/trackbacks/31933.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><span style="COLOR: #0000ff"><font color=#000000>BOOL CRoiDialog::ContinueModal()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(m_wndToolBar.IsWindowVisible())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CWnd* pWndParent = m_wndToolBar.GetParent();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_wndToolBar.OnUpdateCmdUI((CFrameWnd*)this, TRUE);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font></span></p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><span style="COLOR: #0000ff"><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return CDialog::ContinueModal();<br>}<br></font></span></p>
<img src ="http://www.cppblog.com/wangjs720/aggbug/31933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wangjs720/" target="_blank">披星戴月</a> 2007-09-10 12:22 <a href="http://www.cppblog.com/wangjs720/archive/2007/09/10/31933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FormView 外观</title><link>http://www.cppblog.com/wangjs720/archive/2007/09/10/31932.html</link><dc:creator>披星戴月</dc:creator><author>披星戴月</author><pubDate>Mon, 10 Sep 2007 04:21:00 GMT</pubDate><guid>http://www.cppblog.com/wangjs720/archive/2007/09/10/31932.html</guid><wfw:comment>http://www.cppblog.com/wangjs720/comments/31932.html</wfw:comment><comments>http://www.cppblog.com/wangjs720/archive/2007/09/10/31932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wangjs720/comments/commentRss/31932.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wangjs720/services/trackbacks/31932.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><span style="COLOR: #0000ff">BOOL</span> <span style="COLOR: #008080">CMainFrame</span>::PreCreateWindow(<span style="COLOR: #008080">CREATESTRUCT</span>&amp; cs)<br>{<br>&nbsp;<span style="COLOR: #0000ff">if </span>(!<span style="COLOR: #008080">CFrameWndBase</span>::PreCreateWindow(cs))<br>&nbsp;&nbsp;<span style="COLOR: #0000ff">return</span> <span style="COLOR: #0000ff">FALSE</span>;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&nbsp;cs.dwExStyle &amp;= ~<span style="COLOR: #c0c0c0">WS_EX_CLIENTEDGE</span>;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&nbsp;<span style="COLOR: #0000ff">return</span> <span style="COLOR: #0000ff">TRUE</span>;<br>}<br><br><span style="COLOR: #0000ff">BOOL</span> <span style="COLOR: #008080">CMainView</span>::PreCreateWindow(<span style="COLOR: #008080">CREATESTRUCT</span>&amp; cs)<br>{<br>&nbsp;cs.style &amp;=&nbsp; ~<span style="COLOR: #c0c0c0">WS_BORDER</span>;<br>&nbsp;<span style="COLOR: #0000ff">return</span> <span style="COLOR: #008080">CFormView</span>::PreCreateWindow(cs);<br>}</p>
<img src ="http://www.cppblog.com/wangjs720/aggbug/31932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wangjs720/" target="_blank">披星戴月</a> 2007-09-10 12:21 <a href="http://www.cppblog.com/wangjs720/archive/2007/09/10/31932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>删除文件至回收站而不是永久删除[转]</title><link>http://www.cppblog.com/wangjs720/archive/2007/09/10/31931.html</link><dc:creator>披星戴月</dc:creator><author>披星戴月</author><pubDate>Mon, 10 Sep 2007 04:20:00 GMT</pubDate><guid>http://www.cppblog.com/wangjs720/archive/2007/09/10/31931.html</guid><wfw:comment>http://www.cppblog.com/wangjs720/comments/31931.html</wfw:comment><comments>http://www.cppblog.com/wangjs720/archive/2007/09/10/31931.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wangjs720/comments/commentRss/31931.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wangjs720/services/trackbacks/31931.html</trackback:ping><description><![CDATA[<div class=postText>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><span style="COLOR: #0000ff">class</span> CRecycleFile : <span style="COLOR: #0000ff">private</span> SHFILEOPSTRUCT <br>{<br><span style="COLOR: #0000ff">public</span>:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRecycleFile()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset((SHFILEOPSTRUCT*)this,0,sizeof(SHFILEOPSTRUCT));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fFlags |= FOF_SILENT;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #008000">// don't report progress</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fFlags |= FOF_NOERRORUI;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #008000">// don't report errors</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fFlags |= FOF_NOCONFIRMATION;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #008000">// don't confirm delete</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~CRecycleFile()&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Send a file to the recycle bin. Args:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp; - full pathname of file.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp; - bDelete: if TRUE, really delete file (no recycle bin)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #0000ff">int</span> Recycle(LPCTSTR pszPath, <span style="COLOR: #0000ff">BOOL</span> bDelete=<span style="COLOR: #0000ff">FALSE</span>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #0000ff">TCHAR</span> buf[_MAX_PATH + 1]; <span style="COLOR: #008000">// allow one more character</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_tcscpy(buf, pszPath);&nbsp;&nbsp;&nbsp; <span style="COLOR: #008000">// copy caller's path name</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[_tcslen(buf)+1]=0;&nbsp;&nbsp;&nbsp; <span style="COLOR: #008000">// need two NULLs at end</span></p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Set SHFILEOPSTRUCT params for delete operation</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wFunc = FO_DELETE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #008000">// REQUIRED: delete operation<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pFrom = buf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #008000"> // REQUIRED: which file(s)<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTo = NULL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #008000">// MUST be NULL<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #0000ff">if</span>(bDelete)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #008000"> // if delete requested..<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fFlags &amp;= ~FOF_ALLOWUNDO;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #008000"> // ..don't use Recycle Bin<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #0000ff">else</span>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #008000"> // otherwise..<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fFlags |= FOF_ALLOWUNDO;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #008000">// ..send to Recycle Bin</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #0000ff">return</span> SHFileOperation(<span style="COLOR: #0000ff">this</span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #008000"> // do it!<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>}</p>
</div>
<img src ="http://www.cppblog.com/wangjs720/aggbug/31931.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wangjs720/" target="_blank">披星戴月</a> 2007-09-10 12:20 <a href="http://www.cppblog.com/wangjs720/archive/2007/09/10/31931.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>引用Word类型库</title><link>http://www.cppblog.com/wangjs720/archive/2007/09/10/31929.html</link><dc:creator>披星戴月</dc:creator><author>披星戴月</author><pubDate>Mon, 10 Sep 2007 04:15:00 GMT</pubDate><guid>http://www.cppblog.com/wangjs720/archive/2007/09/10/31929.html</guid><wfw:comment>http://www.cppblog.com/wangjs720/comments/31929.html</wfw:comment><comments>http://www.cppblog.com/wangjs720/archive/2007/09/10/31929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wangjs720/comments/commentRss/31929.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wangjs720/services/trackbacks/31929.html</trackback:ping><description><![CDATA[#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE11\\MSO.DLL" named_guids<br>using namespace Office;<br>#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"<br>#import "D:\\Program Files\\Microsoft Office\\OFFICE11\\MSWORD.OLB" named_guids&nbsp;rename("ExitWindows","WordExitWindows") 
<img src ="http://www.cppblog.com/wangjs720/aggbug/31929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wangjs720/" target="_blank">披星戴月</a> 2007-09-10 12:15 <a href="http://www.cppblog.com/wangjs720/archive/2007/09/10/31929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在客户区内拖动鼠标移动对话框</title><link>http://www.cppblog.com/wangjs720/archive/2007/09/10/31926.html</link><dc:creator>披星戴月</dc:creator><author>披星戴月</author><pubDate>Mon, 10 Sep 2007 04:06:00 GMT</pubDate><guid>http://www.cppblog.com/wangjs720/archive/2007/09/10/31926.html</guid><wfw:comment>http://www.cppblog.com/wangjs720/comments/31926.html</wfw:comment><comments>http://www.cppblog.com/wangjs720/archive/2007/09/10/31926.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wangjs720/comments/commentRss/31926.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wangjs720/services/trackbacks/31926.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">1. 捕获WM_NCHITTEST：<br><br>&nbsp;&nbsp;&nbsp; UINT CMyDialog::OnNcHitTest(CPoint point)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UINT nResult = CDialog::OnNcHitTest(point);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;nResult&nbsp; == HTCLIENT ? HTCAPTION : nResult;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>2. 捕获WM_LBUTTONDOWN：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; void CMyDialog::OnLButtonDown(CPoint point)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SendMessage(WM_SYSCOMMAND, 0xF012, 0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDialog::OnLButtonDown(point);<br>&nbsp;&nbsp;&nbsp; }</p>
<img src ="http://www.cppblog.com/wangjs720/aggbug/31926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wangjs720/" target="_blank">披星戴月</a> 2007-09-10 12:06 <a href="http://www.cppblog.com/wangjs720/archive/2007/09/10/31926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VideoLAN</title><link>http://www.cppblog.com/wangjs720/archive/2007/04/04/21232.html</link><dc:creator>披星戴月</dc:creator><author>披星戴月</author><pubDate>Wed, 04 Apr 2007 05:59:00 GMT</pubDate><guid>http://www.cppblog.com/wangjs720/archive/2007/04/04/21232.html</guid><wfw:comment>http://www.cppblog.com/wangjs720/comments/21232.html</wfw:comment><comments>http://www.cppblog.com/wangjs720/archive/2007/04/04/21232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wangjs720/comments/commentRss/21232.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wangjs720/services/trackbacks/21232.html</trackback:ping><description><![CDATA[VideoLAN是法国巴黎的一群学生搞出来的，主要用途是用作MPEG和DVD播放。但是随着开发小组的努力，最后成为一个单独的多媒体播放器，不仅可以播放视频，还可以接收卫星视频信号或者MPEG捕捉卡上的信号。<br><br><a href="http://www.videolan.org/" target=_blank>http://www.videolan.org/</a>
<img src ="http://www.cppblog.com/wangjs720/aggbug/21232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wangjs720/" target="_blank">披星戴月</a> 2007-04-04 13:59 <a href="http://www.cppblog.com/wangjs720/archive/2007/04/04/21232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应用程序之间互相通讯的几种方法[转] </title><link>http://www.cppblog.com/wangjs720/archive/2007/03/22/20346.html</link><dc:creator>披星戴月</dc:creator><author>披星戴月</author><pubDate>Thu, 22 Mar 2007 03:36:00 GMT</pubDate><guid>http://www.cppblog.com/wangjs720/archive/2007/03/22/20346.html</guid><wfw:comment>http://www.cppblog.com/wangjs720/comments/20346.html</wfw:comment><comments>http://www.cppblog.com/wangjs720/archive/2007/03/22/20346.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wangjs720/comments/commentRss/20346.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wangjs720/services/trackbacks/20346.html</trackback:ping><description><![CDATA[应用程序之间的数据交换（互相通讯）一直是困扰广大程序员的难题，尽管已经出现了各式各样的解决方案，但迄今为止没有哪一种方案是完美无缺的。因此，只有学习并了解了它们的优缺点后，才能在特定的情况下选择最佳方案，以满足最终的要求。 <br /><br />　　1、共享 <br /><br />　　在硬盘上建立一个文件，一个应用程序往该文件里写数据（可以不关闭文件，但必须刷新缓冲区），另一个应用程序以共享方式打开这个文件并读取其中的内容，这便是最简单的一种数据交换方式。对于网络用户而言，只要两台终端上安装的都是Win311 For Workgroup或Windows 95（或NT），则只要设置一下目录共享，映射成网络驱动器，同样可以简单地实现数据交换。但它的缺点也是显而易见的：只能采取轮询的方式获得最新数据（效率低下），网络映射的驱动器绝对不能变动或取消（可靠性差），所以这是一种“低级”的通讯方式。 <br /><br />　　2、DDE <br /><br />　　每个Windows程序员都不会对DDE（动态数据交换）感到陌生，它是最早的基于Windows的数据交换方法，有三种方式可供选择：冷连接、温连接和热连接。一般都是由客户端向服务器端发出连接申请，并且必须指明服务器端的名字和标题。在连接建立后，数据可以双向流动。典型的例子如抓图软件SnagIt，它提供了DDE接口，能够让其它应用程序来控制它。DDE是完全向后兼容的，从16位平台转到32位，源代码几乎不用修改。 <br /><br />　　DDE还有网络功能。使用过Win311 For Workgroup的人大概都还记得，它自带一个非常吸引人的小程序“Chat”，能使两台计算机通过网络实时交谈，这在当时几乎是一项创举。可是很少有人知道“Chat”使用的是一种特殊的DDE，即NetDDE。它的基本工作原理仍然是DDE，但它能使一台计算机向在同一个网络中的另一台终端发消息，而不像普通DDE 只能局限在同一台机器上。与其它的数据交换方式相比，DDE已不够先进，而且Microsoft也不再积极支持DDE，所以它的前景不被看好。 <br /><br />　　3、WM_COPYDATA <br /><br />　　Windows消息WM_COPYDATA功能强大，知之者却甚少。它的确切定义是：一个应用程序向另一个应用程序传递数据时所发出的消息。众所周知，Windows 在很大程度上依赖于消息机制，那么我们为什么不把数据放在消息中一起发送出去呢？这样，我们只要调用SendMessage（），以对方窗体的句柄作为第一个参数，以含有指向实际数据的指针结构的地址作为第二个参数，就可以把整个数据块当作消息发向另一个应用程序。也许有的程序员会说，一个自定义的消息同样可以完成这样的工作。他只说对了一半。自定义消息的确可以发送到其它的应用程序上去，但其原始数据所在的内存区只有在发送过程中才是合法的，若在其它模块中存取该内存区就会导致“Access Violation”。而使用WM_COPYDATA 则不存在这个问题，因为Windows 本身会替你处理这一切。深入钻研下去，你会发现它其实是先创建了一个文件映射的对象，将发送方的原始数据先拷贝至映射文件，然后再在接收方对这个映射文件打开一个“视图”。WM_COPYDATA 的不足之处在于：必须要有一个窗体来接收消息和数据（缺乏灵活性），数据在使用之前先得拷贝到一个映射文件（浪费资源）。 <br /><br />　　4、NetBIOS <br /><br />　　从80年代开始，NetBIOS就是开发Client/Server类程序的标准接口。而当时其它的解决方案几乎都是从UNIX系统上发展而来的。当然，对于今天的用户而言，NetBIOS已不是唯一的选择，他们可以从各种方案中择优选取。在Windows 95和NT平台上，可以通过API函数Netbios()来调用NetBIOS功能。 <br /><br />　　NetBIOS兼容以下几种低层协议：NetBEUI协议（NBF）、NWLink NetBIOS(NWNBlink)、NetBIOS over TCP/IP(NetBT)。NetBIOS的优点是速度较快，缺点是可靠性较差。 <br /><br />　　5、标准的Sockets和WinSock <br /><br />　　Sockets是15年前在UNIX系统上提出来的，一开始主要是用于本地通讯，但很快就应用在Client/Server体系上了。它的内核很简单：你可以将一个Socket看作是一个双向的节点，一个应用程序可以通过它先与另一个程序建立连接（建立在一个双方都认可的端上，以便于区分同时运行的几个通讯线程），然后就可以彼此交换数据了。 <br /><br />　　微软公司在其基础上创建了WinSock，专门用于Windows接口，与Socket完全兼容。近年来基于TCP/IP协议的网络大行其道，Socket也随之获得了更加广泛的应用。 <br /><br />　　如今，Sockets已在Internet上获得了最广泛的应用，主要是因为它的可移植性好： <br /><br />　　Socket应用程序无论在任何平台间都能互相进行通讯（不管是PC机还是Macintosh,也不管是Windows平台还是UNIX平台）。而最新推出的WinSock 2.0，已不仅仅只基于TCP/IP协议，还可基于其它几种传输协议（如IPX）。 <br /><br />　　Socket的缺陷是它工作在通讯的低层，所以实现起来较为复杂（如果是Win 95或NT平台，则不存在这个问题，微软公司提供了相应的控件）。但是，如果要在多个平台间互相通讯，则Socket是不二之选。 <br /><br />　　6、Mailslot和Pipe <br /><br />　　Mailslot和Pipe有很多相同点，即都是高层的、基于内存的通讯系统。Mailslot由Server端创建，代码如下： <br /><br />　　myMailslot = CreateMailslot(pSlotName, 0, MAILSLOT_WAIT_FOREVER, NULL); <br /><br />　　然后，Client端就可以像打开文件一样打开这个Mailslot，再通过API函数WriteFile()来将数据写入到消息队列中。 <br /><br />　　与此相类似，Pipe也是由Server端创建的，代码如下： <br /><br />　　pipe = CreateNamedPipe(pPipeName, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE |PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, BUFSIZE,BUFSIZE, 20000, NULL); <br /><br />　　接着，Client端就可以通过一般的文件API读写数据，代码如下： <br /><br />　　pipe = CreateFile(pPipeName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,0,NULL); <br /><br />　　success = WriteFile(pipe, pMessage, strlen(pMessage) + 1, &amp;bytesWritten, NULL); <br /><br />　　Pipe分两种，即命名Pipe和匿名Pipe。匿名Pipe是以句柄而不是以名字来进行标识的，因而也就限制了它只能在同一台机器上通讯，而不能应用于网络。命名Pipe则提供了以名字来进行标识，所以能在网络上的其它任何地方打开它。需要注意的是：命名Pipe只能在 Win NT而不是Win 95上创建（即Server端），Client端则可以是任意平台。 <br /><br />　　Pipe既可以单向通讯也可以双向通讯，Mailslot则只能单向通讯。Client端可以发送消息给mailslot，但不能接收消息；如果你想要接收消息，则只能创建一个新的mailslot。但mailslot有一个很大的优点：它支持数据广播。也就是说，若Client端发送一条消息，则整个网络中的同名对象都能收到。这是因为mailslot的名字的作用域只是在本台机器上，所以可在不同机器上创建同名的mailslot，当Client端发来消息时则每一台机上的mailslot都得到了该消息的一份拷贝，并在本机上作出相应的反应。Mailslot的最大缺陷是不可靠，因为它的数据是以数据报格式来传送的，网络错误或负荷过重都会导致数据丢失。 <br /><br />　　Pipe则较为可靠，但它不能广播。所以，如果你不需要进行广播，则Pipe是更好的选择。选择Mailslot，则要对此后遇到的麻烦有充分的准备。 <br /><br />　　7、剪贴板（Clipboard） <br /><br />　　大家对Windows的剪贴板应该不会感到陌生吧？它的出现就是为了实现应用程序间的互相数据交换。Windows提供了一系列的API函数来让应用程序安全地打开剪贴板，读写其中的数据。 <br /><br />　　剪贴板的缺陷也是显而易见的：当有新的数据放在剪贴板上时，则先前的数据就会被冲掉，而在Windows中用到剪贴板的时候又实在太多了，所以这种方式用于程序间的通讯显然不够安全。 <br /><br />　　8、COM和DCOM <br /><br />　　公共对象模式（COM）是一种协议，它建立了一个软件模块同另一个软件模块之间的连接，然后将其描述出来。当这种连接建立起来之后，则两个模块之间就可以通过称为“接口”的机制来进行通讯。COM可以用不同的语言（VB、VC、Delphi）进行编制，又能被其它语言编写的程序所使用，并且不用管通讯双方实际所处的位置（是在同一台机上，还是在同一个网络上的不同机上）。事实上，Internet上有大量的COM控件可供人们下载使用，其中有相当一部分就是用于应用程序间的相互通讯（甚至是Internet程序间的通讯），硬盘上能够看到的大量的.ocx文件其实就是一种COM。 <br /><br />　　COM对象为外部调用提供了一个标准的界面，COM Client通过创建COM Server的一个实例获得指针，转向所需的函数定义处并执行相应的程序。讲得通俗一点，也就是先正确定义好COM对象的属性（Property），再执行相应的方法（Method）。 <br /><br />　　DCOM（分布式公共对象模式）是COM在网络上的一种扩展，它通过把分布式对象间的通讯变成一个实体来实现通讯。 <br /><br />　　COM如今被微软公司大力提倡，最著名的有OLE、ActiveX、DirectX和Win95、WinNT的外壳。由于微软公司目前在软件业处于霸主地位，所以COM很有可能成为将来的业界标准，其前途也较为看好。但COM的庞大也会使一些经验丰富的程序员望而却步，他们宁可自己多写一些代码以使整个程序更为简洁、有效而不愿使用COM。 <br /><br />　　以上介绍的只是现今流行的一些通讯方法，它们各有各的优缺点，没有哪一种是万能的。因此，只有在合适的场合采用合适的方案，才是最好的解决办法。 <img src ="http://www.cppblog.com/wangjs720/aggbug/20346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wangjs720/" target="_blank">披星戴月</a> 2007-03-22 11:36 <a href="http://www.cppblog.com/wangjs720/archive/2007/03/22/20346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>