Jiangsheng的CSDN Digest (Jan 21 2006)

 

CSDN 討論總結系列:


inet控件下載ftp文件後,下載的文件被存放在IE緩存文件夾中,如何自動清除(VB 基礎類)


http://vbnet.mvps.org/index.html?code/internet/deleteurlcache.htm

通過API訪問IE Cache :

http://blog.csdn.net/technofantasy/archive/2002/03/29/2962.aspx


微軟的MSWORD,MSEXCEL可以嵌入在IE中,Outlook可以嗎? (VC/MFC ATL/ActiveX/COM )


Word and Excel are ActiveX Document servers which is why you can embed them within a web page.
Outlook is not an ActiveX Document server.


ATL的線程函數中 FIRE EVENT出錯,其它類中FIRE EVENT 就OK ? (VC/MFC 進程/線程/DLL )


ATL和MFC都不是線程安全的
參考http://www.mvps.org/vcfaq/com/11.htm


以不同身份登陸域以獲取不同的服務權限 (C++ Builder 基礎類 )


如何可以做到不轉換Windows用戶的情況下,以另一個用戶的身份訪問域服務器,並且結束時可以註銷該用戶身份。
參看了一些資料,可能要用到LogonUser,DuplicateTokenEx,CreateProcessAsUser這些函數,有誰可以提供一些思路或上述函數的執行代碼。謝謝!


你可以用CreateProcessAsUser函數另外啓動一個進程,之後使用進程間通訊(http://msdn.microsoft.com/library/en-us/ipc/base/interprocess_communications.asp )的方法來控制啓動的程序。用LogonUser、CreateProcessAsUser,要SE_TCB_NAME權限,且即使你是administrator,也很難在程序中得到要SE_TCB_NAME權限(我從未成功過)
建議用CreateProcessWithLogon.

其實,還有一個最簡的方法,就是用系統的runas命令:
如:
runas /env /user:[email protected] "notepad /"my file.txt/""

你可以在控制面板->管理工具->本地安全設置->用戶權利指派中將"以操作系統方式運行"賦給你要設SE_TCB_NAME權限的用戶,這樣你上面的程序應該可以運行,但有安全隱患,因爲SE_TCB_NAME是系統的最高權限


請教一個多國語言字符串轉換的問題 (VC/MFC 基礎類 )


我的程序中要求一個功能,當從其他窗口,比如ie中,將一段文字拖到本窗口時,要接收到字符串並顯示出來。
現在功能已經基本實現,拖過來英文,中文,日文,俄文,法文都沒問題,但是德文卻總有些字符顯示亂碼。
我試了其他的一些軟件,qq和vc6都顯示不正確,但是ie,msn,vs.net,office等都可以正確顯示。
我想是我接收到字符串後沒有做正確的轉換,但是不明白該如何轉換,接收到的字符串是以什麼格式存儲的。
希望有過類似經驗的能指點一下,不勝感激。

我接收的代碼大致如下:
BOOL CTmp3View::OnDrop(COleDataObject *pDataObject, DROPEFFECT dropEffect, CPoint point)
{
STGMEDIUM stgm;
FORMATETC fm = {CF_TEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
char* cpData = NULL;
DWORD dwSize = 0;

//得到數據和數據的字節數
pDataObject->GetData(CF_TEXT, &stgm, &fm);
cpData = (char*)GlobalLock(stgm.hGlobal);
dwSize = GlobalSize(stgm.hGlobal);

//處理數據並顯示
... ---->> //我想這裏應該對cpData有所處理

return CView::OnDrop(pDataObject, dropEffect, point);
}


CF_UNICODETEXT


vc6+ado+access刪除表內所有記錄時, 如何復位自動增加的整型字型至0? (VC/MFC 基礎類)



也就是說, 再次增加記錄時, 自動增加的整型字段從1開始計數, 而非緊接原序號.


需要重構數據庫。參見http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odeopg/html/deovrencryptingdatabase.asp


Access數據庫函數問題(C++ Builder 數據庫及相關技術 )


使用Access數據庫,用MS Access建一個查詢Table1_View,SQL語句如下:
SELECT MyName, StrReverse(MyName) AS ReMyName FROM Table1 ORDER BY StrReverse(MyName)

在MS Access中運行正常,可以打開Table1_View記錄集,但要在C Builder中打開這個記錄集時,返回錯誤信息:表達式中‘StrReverse’函數未定義。

請問是什麼原因?如何解決?


Access中不支持從外部直接訪問這個函數。參考http://support.microsoft.com/?kbid=210439


於OCX調用方面的問題(.NET技術 VB.NET)


我現在有一個用DELPHI做的OCX控件,用VB.net開發一個網站,需要使用它顯示特定圖形,圖的數據是從服務器中的某個目錄中獲取的,應當如何做?
我通過工具欄增加OCX後,其Runat屬性是灰的,服務器腳本中不能使用;我通過項目引用後使用CREATOBJECT的方法能創建,但又無法與頁網中放置的控件聯繫起來,這是爲啥呀????
OCX是不是不能做爲服務器端組件運行?如果不能的話,那要實現我的想法的話有何高招??


在客戶端顯示圖形的OCX爲什麼要在server上運行?
自己寫個user control封裝一下<Object>代碼就可以了


如何獲得網頁中的元素位置信息 (VC/MFC HTML/XML )


打開一個網頁,瀏覽器知道圖片對應的位置,知道一個表的對應位置,現在我要在程序中解析一個頁面中的每個元素的座標信息,應該用那個組件啊,


http://blog.csdn.net/jiangsheng/archive/2003/11/09/3795.aspx

You can also determine the location, width, and height of an object by using a combination of the IHTMLElement::offsetLeft, IHTMLElement::offsetTop, IHTMLElement::offsetHeight, and IHTMLElement::offsetWidth properties. These numeric properties specify the physical coordinates and dimensions of the object relative to the object's offset parent.

For more information about how to access the dimension and location of objects on the page through the Dynamic HTML (DHTML) Document Object Model (DOM), see Measuring Element Dimension and Location.

http://msdn.microsoft.com/workshop/author/om/measuring.asp


IPicture中get_Width得到的OLE_XSIZE_HIMETRIC到底是什麼含義(VC/MFC 圖形處理/算法 )


MSDN裏解釋如下:
OLE_XSIZE_HIMETRIC (long) The width of the picture

照片的寬度?
我使用一幅640*480的圖片,得到的width、height分別爲16933、12700。
請問這個數值有什麼實際的含義?


phisical size of the picture converted into HIMETRIC
reference:
http://msdn.microsoft.com/msdnmag/issues/01/10/c/
http://msdn.microsoft.com/library/en-us/gdi/cordspac_3qsz.asp


使用CListCtrl顯示大批量縮略圖(VC/MFC 界面 )

不想刪除ClistCtrl的自定義數據,該怎麼辦?



由於工作需要大批量顯示SolidWorks文件的縮略圖(一萬個左右),我現在使用的是虛CListCtrl既style = LVS_ICON|LVS_ALIGNTOP|LVS_OWNERDATA|WS_VISIBLE|WS_BORDER|WS_CHILD|LVS_SINGLESEL,對於SolidWorks文件可以讀成bitmap,由於文件太多內存存不下,我現在想利用文件緩存,來緩存我生成的這些bitmap,有沒有這樣的方法,最好有例子.


我看了vcmute(橫秋)有關這方面的解釋提道了IExtractImage,不知道能解決我的問提嗎?
http://community.csdn.net/Expert/topic/4134/4134216.xm8l?temp=.4045069
提供的連接沒打開.


既然用了虛擬列表,一次顯示的縮略圖也不會超過幾百個吧,這樣對內存的需求就減少了很多。至於緩存,不需要加載所有的縮略圖,使用後馬上釋放掉就可以了,利用雙緩衝,繪製到一個內存DC上,刷新的時候再調取需要的縮略圖。

我用LV_ITEM Item的方式insert到一個list,其中new了一個自己的在doc中定義的數據結構,這個結構由於在其他地方還要用到,所以當clistctrl有更新時不能刪除,但要更新一個ClistCtrl必須先調用clistctrl::deleteallitem,在ClistCtrl::OnDeleteitem中就要刪除條目才能將新增加的item給加進去,現在我只想更新條目,由想留住自己的在doc中定義的數據結構供下次調用,請問ClistCtrl有沒有什麼函數只清空顯示區域,而不刪除我的數據結構?

難道我只得定義兩個結構嗎?一個用於list顯示,一個用於list歷史數據得保存?


http://blog.csdn.net/jiangsheng/archive/2003/11/20/3796.aspx

虛列表沒有自己的數據,你需要自己把數據排好之後通知虛列表更新顯示。文件大小可以用用IShellFolder2::GetDetailsEx獲得

對於你需要的排序,你可以用CRT的qsort函數。使用IShellFolder::EnumObjects的原因是性能。用Win32的FindAPI的話,在函數返回之前會搜索完整個目錄,但是用虛列表的話,可以只獲取正在顯示的文件的信息(當然,在我的代碼中還緩存了文件列表的開頭和末尾,這是用戶經常查看的位置)。


這個示例沒有在空閒時釋放緩存,你可以自己決定緩存的大小上限,然後改寫PrepCache函數。

你也可以使用資源管理起來顯示圖片http://www.codeproject.com/shell/thumbextract.asp


請問在 VBscript 中如何調用 windows API ?有現成的ActiveX封裝嗎?(VC/MFC ATL/ActiveX/COM )


我想使用腳本語言做一些自動操作其他應用程序界面的東西,有點類似 rational robot
首先想到了 wsh 和 vbs, 但是好像 vbs 中不能直接調用 PostMessageA 之類的 API 函數,
借貴寶地問一下:
1. 是否有現成的 ActiveX 封裝了 windows API ?
2. 除了使用robot之類的商業軟件,您是否有更好的方法建議我?


try host implementation instead
see http://blog.csdn.net/jiangsheng/archive/2003/11/09/3795.aspx
That is basically imposing scripting support to an MDI version of MFCIE.


DLL中的DoDataExchange (VC/MFC 基礎類 )


我程序中加載了兩個DLL,都封裝了窗口類,並且都影射了控件變量
只加載其中的一個沒問題,可是兩個都加上之後,在DoDataExchange的時候就會出錯
通過GetDlgItem也找不到該控件,這是爲什麼?


sounds like resource conflict.
Reference:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;150121


ActiveX和DLL利用回調通訊,如何在回調中產生事件(VC/MFC ATL/ActiveX/COM)


我要調用一個DLL進行一些工作,調用和返回不在一個線程中。所以我使用回調函數的方法返回數據。聯繫DLL的是一個ActiveX控件,因爲我使用了回調函數,所以我必須向DLL提供一個靜態函數地址。而我要在這個回調函數中產生一個事件,ATL的事件是在類中生成的,我無法在靜態函數中調用。


You can use an IDispatch parameter instead of a callback function (in other words, event handler), and call IDispatch::Invoke to call the function (in other words, fire the event), which calls your function indirectly in its implementation. A typical example is AJAX (Asynchronous JavaScript and XML).


COM 支持連接點對象的啊,功能類似回調函數。
繼承 IDISPATCH 做一個出接口就行了,很方便的


用wininet做個多線程的瀏覽器。線程少的時候正常,多至30的時候鎖死(VC/MFC 進程/線程/DLL )


主線程瀏覽網頁,根據網頁裏的圖片聯機,產生子線程,下載玩就自動清除。
當多至30的時候就都擠死在chttpfile::sendrequest了。對底層網絡訪問控制是由ntdll完成的。


INFO: WinInet Limits Connections Per Server
http://support.microsoft.com/kb/q183110/


如何在VC,BC環境下獲取按鍵(C/C++ C語言 )


我有TC版的一個五子棋遊戲,現在必須要在VC環境或BC環境下編譯。
但是TC下有bios.h,和很多相關的函數,比如bioskey來獲得按鍵內容。
而這個頭文件在VC,BC上是沒有的。請問在VC環境,BC環境下有相應功能的替代函數麼?
或者告訴我,如果要獲得上,下,左,右,enter,space按鍵,在VC環境,BC環境怎麼做?

注:我這裏的VC,BC並不是MFC等等,只是一個C++編譯環境。


這些都是Borland的庫函數。你可以自己實現這些函數。舉例來說,你可以用getch來獲取按鍵,或者處理WM_KEYDOWN消息。沒有gotoxy的話,不過你可以自己寫一個:

#include <windows.h>
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
 

windows 下面,你想取得按鍵信息。處理 WM_KEYDOWN 消息就行了。例如:
case WM_KEYDOWN:
switch(wParam):
{
case VK_RETURN://回車
.........
}
上下左右鍵分別是VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT
Enter, Space鍵分別是VK_RETURN,VK_SPACE

只要處理這些消息就可以了。



怎麼獲得iframe中的內容?(VC/MFC HTML/XML)


當一個頁面中的iframe內容來自另外一個網站的時候,通過IHTMLFramesCollection2。item獲得IHTMLWindow2指針,然後調用IHTMLWindow2::get_document獲得的總是空指針。同樣的情況出現在遨遊瀏覽器的viewPage插件裏。在這種情況下,viewpage得不到ifram中的鏈接。
同過得到ifram內容的url,再navigate(url)似乎可以,但是有沒有不用再次連接的方法呢?


基於IE的安全性設定,跨框架的DHTML訪問可能被拒絕。參見Internet Explorer的安全設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章