• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            面對(duì)現(xiàn)實(shí),超越自己
            逆水行舟,不進(jìn)則退
            posts - 269,comments - 32,trackbacks - 0
            一種方法:解決方法是在CDialog::PreTranslateMessage() 的重載函數(shù)中將ESC和回車按鍵的消息處理掉.

            BOOL CYourDlg::PreTranslateMessage(MSG* pMsg)   
            {  
                if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_RETURN)     
                    return TRUE;  
                if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE)     
                    return TRUE;  
                return CDialog::PreTranslateMessage(pMsg);  
            }  

            另一種方法:一開始的cancel按扭不要去掉,雙擊它進(jìn)入命令OnCancel(), 把OnCancel()去掉
            直接返回,這就沒問題了

            如果你已經(jīng)把按鈕刪掉,那就得手工加這個(gè)命令,但效果一樣
            posted @ 2013-09-13 08:31 王海光 閱讀(687) | 評(píng)論 (0)編輯 收藏

            1. 首先介紹計(jì)算機(jī)定義的每個(gè)安全區(qū)域的項(xiàng):Zones 。默認(rèn)情況下,定義以下   5   個(gè)區(qū)域(編號(hào)從   0   到   4):

            0   我的電腦 
            1   本地   Intranet   區(qū)域 
            2   受信任的站點(diǎn)區(qū)域 
            3   Internet   區(qū)域 
            4   受限制的站點(diǎn)區(qū)域

            注意:默認(rèn)情況下,“我的電腦”不會(huì)出現(xiàn)在“安全”選項(xiàng)卡的“區(qū)域”框中。

            其中的每項(xiàng)都包含以下   DWORD   值,用于表示自定義“安全”選項(xiàng)卡上的相應(yīng)設(shè)置。

            注意:除非另外聲明,否則每個(gè)   DWORD   值等于   0、1   或   3。通常,設(shè)置為   0   則將具體操作設(shè)置為允許;設(shè)置為   1   則導(dǎo)致出現(xiàn)提示;設(shè)置為   3   則禁止執(zhí)行具體操作。

            ----------------------------------------------------------------------- 

            1001           下載已簽名的   ActiveX   控件 
            1004           下載未簽名的   ActiveX   控件 
            1200           運(yùn)行   ActiveX   控件和插件 
            1201           對(duì)沒有標(biāo)記為安全的   ActiveX   控件進(jìn)行初始化和腳本運(yùn)行 
            1206           允許   Internet   Explorer   Webbrowser   控件的腳本 
            1400           活動(dòng)腳本 
            1402           Java   小程序腳本 
            1405           對(duì)標(biāo)記為可安全執(zhí)行腳本的   ActiveX   控件執(zhí)行腳本 
            1406           通過域訪問數(shù)據(jù)資源 
            1407           允許通過腳本進(jìn)行粘貼操作 
            1601           提交非加密表單數(shù)據(jù) 
            1604           字體下載 
            1605           運(yùn)行   Java 
            1606           持續(xù)使用用戶數(shù)據(jù) 
            1607           跨域?yàn)g覽子框架 
            1608           允許   META   REFRESH   * 
            1609           顯示混合內(nèi)容   * 
            1800           桌面項(xiàng)目的安裝 
            1802           拖放或復(fù)制和粘貼文件 
            1803           文件下載 
            1804           在   IFRAME   中加載程序和文件 
            1805           在   Web   視圖中加載程序和文件 
            1806           加載應(yīng)用程序和不安全文件 
            1807                                   保留   ** 
            1808                                   保留   ** 
            1809           使用彈出窗口阻止程序   ** 
            1A00           登錄 
            1A02           允許持續(xù)使用存儲(chǔ)在計(jì)算機(jī)上的   Cookie 
            1A03           允許使用每個(gè)會(huì)話的   Cookie(未存儲(chǔ)) 
            1A04           沒有證書或只有一個(gè)證書時(shí)不提示選擇客戶證書   * 
            1A05           允許持續(xù)使用第三方   Cookie   * 
            1A06           允許使用第三方會(huì)話   Cookie   * 
            1A10           隱私設(shè)置   * 
            1C00           Java   權(quán)限 
            1E05           軟件頻道權(quán)限

            1F00           保留   **

            2000           二進(jìn)制和腳本行為 
            2001           運(yùn)行已用   Authenticode   簽名的   .NET   組件 
            2004           運(yùn)行未用   Authenticode   簽名的   .NET   組件 
            2100           基于內(nèi)容打開文件,而不是基于文件擴(kuò)展名   ** 
            2101           在低特權(quán)   Web   內(nèi)容區(qū)域中的網(wǎng)站可以導(dǎo)航到此區(qū)域   ** 
            2102           允許由腳本初始化的窗口,沒有大小和位置限制   ** 
            2200           文件下載自動(dòng)提示   ** 
            2201           ActiveX   控件自動(dòng)提示   ** 
            2300           允許網(wǎng)頁(yè)為活動(dòng)內(nèi)容使用受限制的協(xié)議   ** 

            ----------------------------------------------------------------------- 

            以上介紹完了IE安全選項(xiàng)的基本概念,接下說明如何利用腳本修改。

            假設(shè)我們要修改瀏覽器的跨域?yàn)g覽子框架(代號(hào)1607)為啟用,它默認(rèn)為禁用狀態(tài)。

            1、VBS篇
            Const HKEY_CURRENT_USER = &H80000001
            strComputer = "."
            Set objReg = GetObject("winmgmts:" &"{impersonationLevel=impersonate}\\"&strComputer _&"\root\default:StdRegProv")
            strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\" & "Zones\3" 
            strEntryName = "1607" 
            dwvalue = 0 
            objReg.SetDWORDValue HKEY_CURRENT_USER, strKeyPath, strEntryName,dwValue
            其中HKEY_CURRENT_USER指的是當(dāng)前登錄用戶,此設(shè)置不會(huì)影響到其它登錄的賬號(hào)。strKeyPath為關(guān)鍵字的路徑,根據(jù)之前關(guān)于Zones選項(xiàng)的解釋,此路徑不難看懂。strEntryName為需要設(shè)置的選項(xiàng)代號(hào)。dwvalue為需要設(shè)置的安全級(jí)別,此處0則代表允許。

            2、BAT篇
            REG add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3" /v "1607" /t reg_dword /d 0x00000003 /f
            通過VBS的講解,此處就不在贅述,不過主要的是以上兩種方法的保存格式分別是以vbs和bat類型。例如bat方法,則可以在記事本中考本上一行代碼存為IE_modify.bat。

            本文轉(zhuǎn)自:http://blog.csdn.net/yingminxing/article/details/7250585
            posted @ 2013-09-06 16:09 王海光 閱讀(1215) | 評(píng)論 (0)編輯 收藏

            針對(duì)該問題,微軟有一個(gè)名為Certmgr.exe的證書管理器工具可以實(shí)現(xiàn)此目標(biāo),該工具主要用于管理證書、證書信任列表 (CTL) 和證書吊銷列表 (CRL)

            具體參數(shù)的示例請(qǐng)參考:
            http://msdn.microsoft.com/zh-cn/library/e78byta0(VS.80).aspx

            該工具是SDK Tool的一部分,您可以下載最新的Windows SDK發(fā)行版獲得此工具;若您安裝了visual studio,該工具也包含在安裝目錄中。

            為了更好的幫助您解決這一問題,我們可以通過下列步驟實(shí)現(xiàn)在客戶端簡(jiǎn)易安裝信任證書。
            首先,您可以將根證書導(dǎo)出,并把這個(gè)證書保存到一個(gè)share folder里。
            Export 成功之后,在客戶端跑下面2個(gè)命令就可以把這個(gè)證書test.cer加到”trusted publishers””trusted root certification authorities”里了。
            如果您的client端沒有certmgr.exe,您可以把certmgr.exe放到一個(gè)sharefolder里,比如這里我把它放到當(dāng)前目錄下

            1  “.\certmgr.exe” -add “.\test.cer” --r localMachine trustedpublisher
            2  “.\certmgr.exe” -add “.\test.cer” --r localMachine AuthRoot
            您可以把上面兩行代碼拷貝到一個(gè)bat文件中,客戶只要雙擊這個(gè)bat文件即可完成安裝證書,或者通過組策略來強(qiáng)制在域內(nèi)的指定機(jī)器上運(yùn)行這個(gè)bat 文件。

            靜默安裝
            利用vbs文件實(shí)現(xiàn)靜默安裝,腳本示例如下:
            1 set ws=wscript.createobject("wscript.shell")
            2 ws.run "installcert.bat /start",0

             

            posted @ 2013-09-06 15:56 王海光 閱讀(11744) | 評(píng)論 (1)編輯 收藏

            我們打開淘寶等網(wǎng)站時(shí),IE瀏覽器會(huì)提示安裝空間,這個(gè)控件便是用于對(duì)用戶名密碼進(jìn)行加密的ActiveX控件。如何在我們的站點(diǎn)上安裝如此控件,讓用戶可以通過簡(jiǎn)單的點(diǎn)擊便可方便使用我們的空間呢?

            下面是如何讓在你的站點(diǎn)上安裝控件的方法。


             基礎(chǔ)知識(shí)

            html語(yǔ)言中Object標(biāo)簽

            定義和用法

            定義一個(gè)嵌入的對(duì)象。請(qǐng)使用此元素向您的 XHTML 頁(yè)面添加多媒體。此元素允許您規(guī)定插入 HTML 文檔中的對(duì)象的數(shù)據(jù)和參數(shù),以及可用來顯示和操作數(shù)據(jù)的代碼。<object> 標(biāo)簽用于包含對(duì)象,比如圖像、音頻、視頻、Java applets、ActiveX、PDF 以及 Flash。object 的初衷是取代 img 和 applet 元素。不過由于漏洞以及缺乏瀏覽器支持,這一點(diǎn)并未實(shí)現(xiàn)。瀏覽器的對(duì)象支持有賴于對(duì)象類型。不幸的是,主流瀏覽器都使用不同的代碼來加載相同的對(duì)象類型。而幸運(yùn)的是,object 對(duì)象提供了解決方案。如果未顯示 object 元素,就會(huì)執(zhí)行位于 <object> 和 </object> 之間的代碼。通過這種方式,我們能夠嵌套多個(gè) object 元素(每個(gè)對(duì)應(yīng)一個(gè)瀏覽器)。

            實(shí)例

            向HTML中添加對(duì)象:

            1 <object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider1"   
            2 width="100" height="50">  
            3   <param name="BorderStyle" value="1" />  
            4   <param name="MousePointer" value="0" />  
            5   <param name="Enabled" value="1" />  
            6   <param name="Min" value="0" />  
            7   <param name="Max" value="10" />  
            8 </object>  

             

            參考

            http://www.w3school.com.cn/tags/tag_object.asp

            Windows中注冊(cè)類ID:clsid

            “通用唯一標(biāo)識(shí)符”(UUID),用于標(biāo)識(shí) COM 組件。每個(gè) COM 組件在 Windows 注冊(cè)表中都有自己的 CLSID,以便讓其他應(yīng)用程序加載。

            ActiveX控件CLSID的獲取

            在編譯完成每一個(gè)ActiveX控件之后,系統(tǒng)會(huì)生成ocx.html文件,其中是調(diào)用該ActiveX控件的方法。該頁(yè)面中有一個(gè)標(biāo)簽即為Object,其中有一行則記錄著該ocx文件的CLSID,如下:

            1 <object  
            2  ID="TopoSceneViewer"    
            3  WIDTH=800  
            4  HEIGHT=600  
            5  CLASSID="CLSID:321B84C8-3745-4AC9-BF04-55753F40CE63">   
            6 </object> 

             


            創(chuàng)建cab文件

            cab文件中需要包含一系列文件,其中.inf文件會(huì)告訴IE如何去安裝這些文件。我們從.inf文件開始

            怎么寫inf

            INF文件的組成有節(jié)(Sections),鍵(Key)和值(value)三部分。 
            關(guān)鍵節(jié)有 
            1 [Version]版本描述信息,主要用于版本控制。   
            2 [Strings]字符串信息,用于常量定義。   
            3 [DestinationDirs]定義系統(tǒng)路徑信息。   
            4 [SourceDisksNames]指明源盤信息。   
            5 [SourceDisksNames]指明源盤文件名。   
            6 [DefaultInstall]開始執(zhí)行安裝。

            其它的節(jié)可以自定義

            最開始一般是[Version]區(qū): 

            1 [Version]    
            2 signature="$XXXX$"    
            3 AdvancedINF=2.0  

             

            "Signature"項(xiàng)定義了該INF文件需要運(yùn)行在何種操作系統(tǒng)版本中。有$Windows NT$, $Chicago$, or $Windows 95$三個(gè)值供選擇,一般選擇$Chicago$即可。

            接下來就是最重要的[Add.Code]區(qū): 

            1 [Add.Code]    
            2 Ctrl1.dll=C1Section    
            3 Ctrl2.dll=Ctrl2.dll  

            前面是要下載的文件名,后面是對(duì)應(yīng)這個(gè)文件的區(qū)域名,可以是任何名字,不過一般都是和文件的名字相同,這樣方便維護(hù)。

            還有需要注意是在[Add.Code]區(qū)出現(xiàn)的文件要根據(jù)依賴性進(jìn)行排序,例如前面說的ctrl1.dll要依賴于ctrl2.dll,則ctrl2.dll要出現(xiàn)在ctrl1.dll的前面。因?yàn)榘惭b時(shí)是按照相反的順序進(jìn)行的,也就是說先安裝ctrl2.dll,然后才是ctrl1.dll,哧哧,記清楚了,不要搞反了。

            再接下來是各個(gè)文件的區(qū)域了 

            1 [Ctrl1.dll]    
            2 file-win32-x86=thiscab    
            3 RegisterServer=yes    
            4 clsid={..}    
            5 DestDir=      
            6 FileVersion=1,0,0,0   

            [Ctrl1.dll]區(qū)域中的第一個(gè)file值告訴ie到哪里去得到這個(gè)dll,file一共包括三個(gè)部分,第一部分是file,這個(gè)永遠(yuǎn)都是這樣的(至少目前來說);第二部分告訴聲明支持的OS,win32表示windows,mac就是蘋果MAC OX了;第三部分是CPU類型,比如說x86、 ppc (Power PC)、 mips或者alpha了。

            file的值可以取三個(gè)一個(gè)URL、ignore和thiscab,如果是URL則說明到URL所在的位置去下;如果是ignore說明對(duì)于這種OS和CPU,不需要下載這個(gè)文件(ctrl1.dll);如果是thiscab很明顯就在當(dāng)前的cab文件中了。

            接下來是RegisterServer,可以取兩個(gè)值yes和no,如果為yes則說明ie要注冊(cè)該dll,如果是no就不必了。+如果這里選yes,則需要指定clsid,否則clsid一行可以省略。+

            再下來是DestDir,它的值是dll將要存到本地硬盤的位置,如果它的值是10,則將dll放到/Windows或者/WinNT下;如果是11,則放到/Windows/System或者/WinNT/System32下;如果是空(就是沒有值)則會(huì)放到/Windows或者/WinNT下的Downloaded Program Files目錄下;

            最后是FileVersion,這個(gè)就比較明顯了,說明了ctrl1.dll的版本號(hào)。

            其他部分詳見參考文獻(xiàn)。

            創(chuàng)建cab文件

            1. 如果需要?jiǎng)?chuàng)建cab文件,首先需要Cabarc或者M(jìn)akecab,它們隨著Cabinet SDK的安裝就有了,Cabinet SDK的下載地址是http://msdn.microsoft.com/workshop/management/cab/cabdl.asp
            2. Cabarc可以創(chuàng)建、查看或者解出cab里面的文件,而Makecab則只可以用來創(chuàng)建cab文件。
            3. 制作cab文件時(shí)需要將所有的相關(guān)文件都包含進(jìn)去,可以通過Depends(VC自帶的)檢查需要的文件。使用inf文件將這些東西都寫進(jìn)去。
            4. inf搞法:inf文件描述cab中所有的ocx及dll文件,inf通過一些命名區(qū)域來提供需要的信息。
              cabarc  N  ctrl1.cab  ctrl1.inf  ctrl1.dll  
              N表示要?jiǎng)?chuàng)建一個(gè)新的文件,ctrl1.cab是創(chuàng)建的文件名,ctrl1.inf是cab的inf,后而是需要加到cab里的文件,可以使用通配符。 
              然后就可以將cab文件放到網(wǎng)頁(yè)上了

            參考

            1. 如何編寫INF:http://www.cnblogs.com/sbdx/archive/2006/12/14/whatisinffile.html
            2. 如何寫cab相關(guān)的INF:http://docs.google.com/Doc?docid=0Aehzv88zbfy_ZGdncGdqczZfMjIxZHNnZDhtYzg&hl=zh_CN

            簽名

            申請(qǐng)證書

            要使用到makecert工具,在VS2005目錄下搜索可以搜索到。

            在命令提示行中執(zhí)行

            1 makecert -sk myNewKey --"CN=發(fā)證機(jī)關(guān)的名字,OU=Certification,O=公司名字,E=name@email.com" -ss my myNew.cer  
            2 cert2spc myNew.cer myNew.spc  

            makecert具體使用幫助可參考創(chuàng)建證書的工具(makecert.exe)

            簽名

            要使用到signtool工具,也可以在VS2005目錄下找到。

            signtool工具有多種使用模式,下面使用的是帶UI的向?qū)J健?br />在命令提示行中執(zhí)行

            1 signtool  signwizard  

            之后進(jìn)入signcodewizard:

            1 step1.選擇要簽名的cab文件  
            2 step2.自定義  
            3 step3.從文件中選擇 myNew.spc  
            4 step4.csp中的私鑰/密鑰容器:myNewKey  
            5 step5.sha1  
            6 step6.next  
            7 step7.描述:插件名稱/web:www.yourcompany.com  
            8 step8.http://timestamp.verisign.com/scripts/timstamp.dll

            signtool 的具體使用幫助可參考簽名工具 (SignTool.exe)

            本文轉(zhuǎn)自:http://blog.csdn.net/wangjingfei/article/details/5417028
            其他
            鏈接:http://www.cnblogs.com/rushoooooo/archive/2011/06/22/2087542.html

            posted @ 2013-09-05 10:05 王海光 閱讀(726) | 評(píng)論 (0)編輯 收藏
            示例:
                CRect rc = CRect(0,0,0,0);
                m_staticTime.GetClientRect(&rc);

                CDC* pDC = m_staticTime.GetDC();
                TEXTMETRIC tm;
                pDC->GetTextMetrics(&tm);
                int nFontHeight  = tm.tmHeight + tm.tmExternalLeading;
                int nTopBottom  = (rc.Height() - nFontHeight) / 2;
                int nLeftRight     = (rc.Width()  - nFontHeight) / 2;

                rc.DeflateRect(nLeftRight, nTopBottom);
                m_staticTime.SetRectNP(&rc);
                m_staticTime.SetWindowText("45");

                ReleaseDC(pDC);
            posted @ 2013-09-04 16:14 王海光 閱讀(2947) | 評(píng)論 (0)編輯 收藏

            可以使用MUI函數(shù)里面的

            MUI_FINISHPAGE_RUN_FUNCTION function 

            定義一個(gè)function,函數(shù)里面執(zhí)行 安裝完成后的exe

            ;定義安裝界面
            !define MUI_FINISHPAGE_RUN
            ;安裝函數(shù)定義
            !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink" 
            !insertmacro MUI_PAGE_FINISH

            ;function要寫字section之后
            Function LaunchLink
                ExecShell "" "$INSTDIR\*.exe"
            FunctionEnd

            posted @ 2013-09-02 14:39 王海光 閱讀(4692) | 評(píng)論 (0)編輯 收藏
            問題產(chǎn)生:
                   使用gsoap時(shí),如果WebService服務(wù)端及客戶調(diào)用端都使用 C++ 再傳遞中文時(shí)不會(huì)存在亂碼問題,

                   當(dāng)客戶端為 C++ WebService服務(wù)端使用Javadomino,傳遞中文則會(huì)有亂碼問題。

            產(chǎn)生原因:

                   寬字符的原因

            解決辦法()

                在程序中首先設(shè)置本地代碼頁(yè)

                vista 操作系統(tǒng): 

                      setlocal(LC_ALL,"Chinese");

                      soap_set_mode(soap,SOAP_C_MBSTRING);

                windowsxp 操作系統(tǒng):

                      setlocal(LC_ALL,"chs");

                      soap_set_mode(soap,SOAP_C_MBSTRING);

             

            解決方法(二)

                1. 使用 wsdl2h.exe 通過wsdl描述文件創(chuàng)建C++頭文件(test.h);

                2. 將頭文件(test.h) std:string* 使用wchar_t* 替換;

                3. 使用 soapcpp2.exe -i test.h ,生成相關(guān)的cpph文件

                4. 使用 C++ 時(shí),需要將接收的wchar_t類型數(shù)據(jù)轉(zhuǎn)換為char 使用WideCharToMultiByte函數(shù)   

            后續(xù):

                soap在對(duì)字符編碼轉(zhuǎn)換時(shí),調(diào)用 wctomb 函數(shù),該函數(shù)的調(diào)用在 stdcoap2.cpp 文件中,代碼調(diào)試跟蹤至此,查看 該函數(shù)的返回值是否正確,-1表示字符集設(shè)置不正確。

            本文轉(zhuǎn)自:http://wenhaidongke.blog.163.com/blog/static/128070090200982313655668/

            posted @ 2013-08-29 19:57 王海光 閱讀(2825) | 評(píng)論 (0)編輯 收藏

            1.使用CTime類   

            CString str; //獲取系統(tǒng)時(shí)間   

            CTime tm; tm=CTime::GetCurrentTime();   

            str=tm.Format("現(xiàn)在時(shí)間是%Y年%m月%d日 %X");

            MessageBox(str,NULL,MB_OK); 2: 得到系統(tǒng)時(shí)間日期(使用GetLocalTime)   

            SYSTEMTIME st;   

            CString strDate,strTime;   

            GetLocalTime(&st);   

            strDate.Format("%4d-%2d-%2d",st.wYear,st.wMonth,st.wDay);   

            strTime.Format("%2d:%2d:%2d",st.wHour,st.wMinute,st.wSecond);

             

            3.使用GetTickCount//獲取程序運(yùn)行時(shí)間   

            long t1=GetTickCount();//程序段開始前取得系統(tǒng)運(yùn)行時(shí)間(ms)   

            Sleep(500); long t2=GetTickCount();//程序段結(jié)束后取得系統(tǒng)運(yùn)行時(shí)間(ms)   

            str.Format("time:%dms",t2-t1);//前后之差即 程序運(yùn)行時(shí)間   

            AfxMessageBox(str);//獲取系統(tǒng)運(yùn)行時(shí)間   

            long t=GetTickCount();   

            CString str,str1;   

            str1.Format("系統(tǒng)已運(yùn)行 %d時(shí)",t/3600000);   

            str=str1; t%=3600000;   

            str1.Format("%d分",t/60000);   

            str+=str1; t%=60000;   

            str1.Format("%d秒",t/1000);   

            str+=str1; AfxMessageBox(str);

            本文轉(zhuǎn)自:http://www.cnblogs.com/bigbigtree/archive/2011/12/02/2272066.html

            posted @ 2013-08-22 17:36 王海光 閱讀(1579) | 評(píng)論 (0)編輯 收藏
            1、RichEdit文本轉(zhuǎn)RTF文件

            static DWORD CALLBACK MyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
            {
                CFile* pFile = (CFile*) dwCookie;
                pFile->Write(pbBuff, cb);
                *pcb = cb;
                return 0;
            }

            void CKTLXFunction::OnBnClickedIssuePaper()
            {
                // TODO: Add your control notification handler code here
                CString sText;
                m_richEdit.GetWindowText(sText);
                if (sText.IsEmpty() && m_sImportPaperPath.IsEmpty())
                {
                    AfxMessageBox("內(nèi)容為空");
                    return;
                }

                CString sImportRtfPath = CCommonFun::GetExecutablePath() + "temp.rtf";
                if (CFileFind().FindFile(sImportRtfPath))
                {
                    ::DeleteFile(sImportRtfPath);
                }

                CFile cFile(TEXT(sImportRtfPath), CFile::modeCreate|CFile::modeWrite);
                EDITSTREAM es;
                es.dwCookie = (DWORD) &cFile; //設(shè)置用例參數(shù),以便回調(diào)函數(shù)調(diào)用
                es.pfnCallback = MyStreamOutCallback;
                m_richEdit.StreamOut(SF_RTF, es);
            }

            2、word文本轉(zhuǎn)RTF文件

                CString  m_sImportRtfPath = CCommonFun::GetExecutablePath() + "temp.rtf";
                if (CFileFind().FindFile(m_sImportRtfPath))
                {
                    ::DeleteFile(m_sImportRtfPath);
                }

                _Application WordApp;
                CoInitialize(NULL);
                if(!WordApp.CreateDispatch("Word.Application",NULL))
                {
                    LOG("創(chuàng)建Word服務(wù)失敗!");
                    exit(1);
                    return FALSE;
                }
                WordApp.SetVisible(FALSE);

                COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

                Documents docs=WordApp.GetDocuments();
                docs.Open(COleVariant("word文件路徑"), vFalse, vFalse, vFalse, COleVariant(""), 
                          COleVariant(""), vFalse, COleVariant(""), COleVariant(""),
                          COleVariant((short)0),COleVariant("UTF-8") ,vTrue, vFalse, 
                          COleVariant((short)0), vFalse, COleVariant(""));

                _Document active_doc; 
                active_doc = WordApp.GetActiveDocument();

                active_doc.SaveAs(COleVariant(m_sImportRtfPath), COleVariant((short)wdFormatRTF), vFalse, 
                          COleVariant(""),vFalse, COleVariant(""), vFalse, vTrue, vFalse, vFalse,
                          vFalse,COleVariant("936"), vFalse, vFalse, COleVariant((short)0), vFalse);

                WordApp.Quit(vOpt, vOpt, vOpt);
                active_doc.ReleaseDispatch();
                docs.ReleaseDispatch();
              WordApp.ReleaseDispatch(); //釋放對(duì)象指針。切記,必須調(diào)用

            3、RTF文件轉(zhuǎn)html文件

                // 保存html文件 [8/12/2013 dell]
                _Application WordApp;
                CoInitialize(NULL);
                if(!WordApp.CreateDispatch("Word.Application",NULL))
                {
                    //AfxMessageBox("創(chuàng)建Word服務(wù)失敗!");
                    exit(1);
                    return FALSE;
                }
                WordApp.SetVisible(FALSE);

                COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
                CString  m_sImportRtfPath = CCommonFun::GetExecutablePath() + "temp.rtf";
                if (!CFileFind().FindFile(m_sImportRtfPath))
                {
                    LOG("轉(zhuǎn)換html文件失敗,沒有找到rtf文件 : %s", m_sImportRtfPath);
                    return FALSE;
                }
                Documents docs=WordApp.GetDocuments();
                docs.Open(COleVariant(m_sImportRtfPath),
                    vFalse,vFalse,vFalse,COleVariant(""),COleVariant(""),
                    vFalse,COleVariant(""),COleVariant(""),
                    COleVariant((short)0),COleVariant("UTF-8")
                    ,vTrue,vFalse,COleVariant((short)0),vFalse,
                    COleVariant(""));

                _Document active_doc; 
                active_doc = WordApp.GetActiveDocument();

                active_doc.SaveAs(COleVariant("保存html文件路徑"), 
                    COleVariant((short)wdFormatHTML),
                    vFalse, COleVariant(""),vFalse, COleVariant(""),
                    vFalse,vTrue,vFalse,vFalse,vFalse,COleVariant("936"),//COleVariant(L"UTF-8")
                    vFalse,vFalse,COleVariant((short)0),vFalse);

                WordApp.Quit(vOpt, vOpt, vOpt);
                active_doc.ReleaseDispatch();
                docs.ReleaseDispatch();
                WordApp.ReleaseDispatch(); //釋放對(duì)象指針。切記,必須調(diào)用
            posted @ 2013-08-21 08:53 王海光 閱讀(2474) | 評(píng)論 (1)編輯 收藏
                 摘要: 一.常見問題 a.可以編譯,不能執(zhí)行的 AfxInitRichEdit(); b.升級(jí)默認(rèn)的Riched版本(默認(rèn)的有一些bug),如 可在InitInstance中添加 LoadLibrary("RICHED20.DLL") 最后注意 FreeLibrary 如果是CRichEditView基類的可用 BOOL ...  閱讀全文
            posted @ 2013-08-21 08:42 王海光 閱讀(14646) | 評(píng)論 (0)編輯 收藏
            僅列出標(biāo)題
            共27頁(yè): First 2 3 4 5 6 7 8 9 10 Last 
            久久久久99精品成人片| 亚洲精品乱码久久久久久久久久久久 | 亚洲精品高清一二区久久 | 亚洲精品tv久久久久| 久久婷婷五月综合97色一本一本| 久久午夜伦鲁片免费无码| 999久久久免费精品国产| 久久99精品久久久久久9蜜桃| 久久丫忘忧草产品| 亚洲国产精品久久久久久| 区亚洲欧美一级久久精品亚洲精品成人网久久久久| 久久久久久久亚洲精品| 久久天天躁狠狠躁夜夜躁2O2O| 99久久精品费精品国产| 欧美丰满熟妇BBB久久久| 久久无码一区二区三区少妇 | 人人妻久久人人澡人人爽人人精品 | 潮喷大喷水系列无码久久精品| 国产免费久久精品丫丫| 久久久精品国产sm调教网站| 人人狠狠综合久久亚洲高清| 久久er热视频在这里精品| 99久久国产宗和精品1上映 | 久久久一本精品99久久精品66| 亚洲国产成人久久一区WWW| 久久精品国产精品青草| 色欲综合久久躁天天躁蜜桃| 精品国产乱码久久久久软件| 看全色黄大色大片免费久久久 | 久久综合九色欧美综合狠狠 | 精品久久久久久| 久久精品国产亚洲77777| 久久无码专区国产精品发布| 久久久不卡国产精品一区二区| 久久青草国产精品一区| 国产精品久久久久久久久鸭 | AV色综合久久天堂AV色综合在| 狠狠精品久久久无码中文字幕| 久久久久久国产精品美女 | 久久99久久99精品免视看动漫| 久久这里只有精品首页|