天天看點

Jiangsheng的CSDN Digest (Jan 1 2006)

CSDN 讨論總結系列:

  • Jiangsheng的CSDN Digest (Dec 2005)(http://blog.csdn.net/jiangsheng/archive/2005/12/24/561501.aspx)
  • Jiangsheng的CSDN Digest (Oct 2005)(http://blog.csdn.net/jiangsheng/archive/2005/12/27/563274.aspx)
  • Win32 & .Net Q&A 200509 (http://blog.csdn.net/jiangsheng/archive/2005/09/13/480540.aspx)
  • Win32 & .Net Q&A (http://blog.csdn.net/jiangsheng/archive/2005/02/28/304654.aspx)
  • VC/MFC Q&A 200407 (http://blog.csdn.net/jiangsheng/archive/2004/07/13/40771.aspx)

MSXML4.DLL中成功發送,MSXML.DLL中接收失敗 (VC/MFC ATL/ActiveX/COM )

MSXML4.DLL和MSXML.DLL都有IXMLHTTPRequest,為了讓我的控件更具有移植性,我最終覺得使用MSXML.DLL。在改寫程式中挺困難,我将要發送的資料儲存在一個流中,讓後通過IXMLHTTPRequest的SEND方法發送這個流,在我使用MSXML4.DLL時很順利,但是現在伺服器接收到的流位元組為零。

為了友善大家幫我糾錯,我把問題簡單化了

#include <windows.h>

#include <atlbase.h>

#include <iostream>

using std::cout;

using std::endl;

#import "msxml.dll"

int main()

{

::CoInitialize(0);

CComPtr<IStorage> spStr;

CComPtr<IStream> spStm;

HRESULT hr= S_OK;

try {

DWORD STG_FLAG= STGM_TRANSACTED | STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_DELETEONRELEASE;

if(FAILED(hr = ::StgCreateDocfile(NULL, STG_FLAG, 0, &spStr))) {

throwhr;

}

STG_FLAG= STGM_DIRECT | STGM_READWRITE | STGM_SHARE_EXCLUSIVE;

if(FAILED(hr = spStr->CreateStream(L"SendRequest", STG_FLAG, 0, 0, &spStm))) {

throwhr;

}

USES_CONVERSION;

LPSTR lpszVer= OLE2A(L"你好伺服器,我是用戶端TestHttp2!");

int cblen= lstrlenA(lpszVer);

char buf[10];memset(buf, 0, 10);

itoa(cblen, buf, 10);

spStm->Write(lpszVer, cblen, NULL);

spStm->Commit(STGC_DEFAULT);

CComPtr<MSXML::IXMLHttpRequest> spHttp;

hr= spHttp.CoCreateInstance(__uuidof(MSXML::XMLHTTPRequest), NULL, CLSCTX_INPROC_SERVER);

hr= spHttp->open("POST", L"http://localhost:8080/root/serverAction.do?send=yes", false);

spHttp->setRequestHeader("Content-Length", buf);

spHttp->send(spStm.p);

} catch(HRESULT err) {

cout<< err << endl;

}

::CoUninitialize();

return0;

}

Commit之後沒有seek到開頭,讀寫共用一個流光标的

一個畫圖的ActiveX,但是隻要一有滾動條,ActiveX控件裡面就閃爍,怎麼去掉這個閃爍(Web 開發 JavaScript )

VC6.0寫的MFC ActiveX控件.

盡量用javascript方法解決.不改動ActiveX源代碼.謝謝

參考資料

http://support.microsoft.com/kb/233391

如果你的控件包含多個視窗,建立控件的時候加上WS_CLIPCHILDREN風格。

如果控件的繪制過程是自畫,那麼嘗試使用記憶體DC作為緩沖,以及捕獲WM_ERASEBKGND并且直接傳回,繞過預設的擦除過程。

參見

http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q310384

MFX做OCX,要求通過集合性質的屬性提供參數給使用者

在CToolBar上面建立一個IE作為廣告。使用CHtmlView但是退出的時候總是提示記憶體出錯(VC/MFC 界面)

我想在CToolBar上面建立一個IE作為廣告。

使用CHtmlView但是退出的時候總是提示記憶體出錯?

請問如何在CToolBar上面添加一個View類呢?我是直接new 的派生類

重載PostNCDestroy,不調用基類的處理。參見http://msdn.microsoft.com/msdnmag/issues/03/08/CQA/

在DLL中使用GDI+時GdiplusStartup和ShutDown在什麼地方調用好(VC/MFC 界面)

在DLLMain裡面調用可以嗎?

DLLMain裡面調用這兩個函數會造成死鎖。因為這兩個函數會加載和解除安裝gdiplus.dll,而這又會調用DLLMain。參考http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/dllmain.asp

你可以導出調用這兩個函數的函數,然後在外部調用導出的函數。

文本框的問題(VC/MFC 基礎類 )

為什麼CTRL+C CTRL+V 在文本框中不能用

程式是基于FORMVIEW 的

好象在程式中添加下列代碼就可以了

但我不知道為什麼會這樣?

void CRecieve::OnEditCut()

{

// TODO: Add your command handler code here

m_ctrlReceiveData.Cut();

}

去掉Accelerator加速鍵表的相關内容就可以了,因為Accelerator優先截取了你的輸入

Accelerator——IDR_MAINFRAME——ID_EDIT_COPY, ID_EDIT_CUT之類。參見http://msdn.microsoft.com/msdnmag/issues/02/05/c/

如何使用mschart這個控件(VC/MFC ATL/ActiveX/COM )

我用vc編寫程式,用到了這個控件顯示圖表。然後我将程式打包成setup以後,在一台空白機子上安裝運作,發現控件不能建立。我的安裝包裡面有mschrt20.ocx這個控件,而且也是自動注冊的,可是就是不行。

當mschrt20.ocx這個控件存在系統中,而且是注冊過的,如果沒有裝vc,我的問題就出現了,如果裝了vc,我的問題就不出現了,好暈!

還有我說明一下:我的mschart這個控件不是直接添加到對話框上的,而是以對象的形勢建立生成的。如果是在對話框上添加這個控件,隻要系統有mschrt20.ocx這個注冊的控件,那麼程式就會正常顯示,但是如果我以對象的形式create一個控件,就不行

有的控件建立的時候需要證書。一般情況下在對話框上添加控件時會自動生成運作時證書,但是手動建立時需要在代碼中手動添加證書。你可以單步跟蹤MFC的對話框建立代碼來檢視證書内容。

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q151771

另外一種方法是手動修改系統資料庫。參見http://www.2okok.com/Article/Print.asp?ArticleID=39494

在控件中調用IsDialogMessage出錯(VC/MFC ATL/ActiveX/COM)

我在控件中開啟了一個無模式對話框作為控件的界面,我在控件的PreTranslateMessage函數中寫了如下代碼:

return pMainWnd->IsDialogMessage(pMsg) || COleControl::PreTranslateMessage(pMsg);

結果是,當在IE中打開控件後,最小化IE,再還原,此時随便按一下鍵盤上的某一個鍵,則程式進入死循環,

CPU占百分之百,經過我的調試,發現是IsDialogMessage函數出錯,證據如下:

Beep(1500, 100);

Sleep(200);

BOOL re = pMainWnd->IsDialogMessage(pMsg);

MessageBeep(0);

Sleep(200);

if (!re)

re = COleControl::PreTranslateMessage(pMsg);

return re;

當Beep(1500, 100);和MessageBeep(0);不成對出現的時候,證明IsDialogMessage進入了死循環。

注:在一對話框上使用這個控件完全沒有上面的問題。

http://www.mvps.org/vcfaq/mfc/18.htm

http://support.microsoft.com/kb/q168777/

對操縱輸入法的詞庫熟悉的朋友請進來(VC/MFC 基礎類)

想對Microsoft (Simplified)- pinyin IME 3.0輸入法的詞庫進行操縱----增加詞組,删除詞組,備份,不知道如何去做,請大家給點思路,先謝過!

我查到幾個用來實作功能的API,但沒有例子,不會用啊,

分别是:ImmGetRegisterWordStyle

ImmRegisterWord

ImmUnregisterWord

用LoadLibrary加載IME檔案(那實際上是DLL),之後調用ImmRegisterWord函數。

在我的計算機上的微軟拼音輸入法 2003(v6.0.0.2527)的檔案名是IMSC40A.IME。和其他回調一樣,寫一個

UINT CALLBACK 函數名(

LPCTSTR lpszReading,

DWORD dwStyle,

LPCTSTR lpszString,

LPVOID lpData

);

這樣的函數,然後把函數位址作為EnumRegisterWordProc的參數。

VC++ 中哪些類具有排序功能(VC/MFC 基礎類 )

我看CArray 類沒有排序函數...

How to use the quick-sort function to sort MFC CArray-derived classes on the MFC and Visual C++ run-time library

http://support.microsoft.com/kb/216858

可以讓TWebBrowser隻下載下傳代碼而不執行嗎(Delphi 網絡通信/分布式開發)

用WebBrowser.Navigate打開一個網頁後可否隻讓其下載下傳網頁的代碼,而不執行并顯示出來啊,要保證能用(WebBrowser.Document as IHTMLDocument2)調用網頁的元素。隻是想要網頁的源代碼,網頁的顯示和執行都不要,當然,還有别的辦法可以獲得網頁的源代碼,但小弟做的這個動作非要用TWebBrower不可

隻需要下載下傳檔案的話可以用URLDownloadToFile

隻需要分析的話可以參考http://www.euromind.com/iedelphi/uilessparser.htm

也可以內建一個浏覽器控件,在容器中處理DISPID_AMBIENT_DLCONTROL調用,傳回DLCTL_DOWNLOADONLY标志,參考http://www.euromind.com/iedelphi/embeddedwb.htm。

VS2005中将自定義控件加入工具箱的問題(.NET技術 VB.NET )

按網上的資料在寫了下列宏代碼, 将一個自己寫的控件加入工具箱:

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

Imports System

Imports EnvDTE

Imports EnvDTE80

Imports System.Diagnostics

Public Module Module1

Public Sub main()

Dim toolbox As ToolBox = Application.DTE.Windows.Item(EnvDTE.Constants.vsWindowKindToolbox).Object

Dim tooltab As ToolBoxTab = toolbox.ToolBoxTabs.Add("My Controls")

DTE.ExecuteCommand("View.PropertiesWindow")

tooltab.Activate()

tooltab.ToolBoxItems.Item(1).Select()

tooltab.ToolBoxItems.Add("MyControl", "d:/Mycontrol.dll", vsToolBoxItemFormat.vsToolBoxItemFormatDotNETComponent)

End Sub

End Module

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

該代碼在VS2003中能通過,并順利将控件加入工具箱, 而在VS2005中隻能建立新的Tab, 卻不能加入控件, 但是如果先打開一下"Choose ToolBox Items"對話框, 然後關閉, 則上述代碼能夠通過.

曾試着在代碼裡添加:DTE.ExecuteCommand("Tools.AddRemoveToolboxItems") 來打開"Choose ToolBox Items"對話框, 但卻不知如果将其自動關閉.

http://blogs.msdn.com/chetanc/archive/2005/10.aspx

參考http://www2.cnblogs.com/haozidong/default.html?page=2

繼續閱讀