ActiveX控制項的MFC設計之旅 第4步

2021-04-02 09:43:17 字數 1553 閱讀 7429

那麼這回就來看一下網上說的挺多的傳遞自定義結構的問題吧,這個問題在早期不支援dcom的作業系統中是沒辦法解決的,不過就目前的流行作業系統來說,應該是不成問題的。

第乙個是微軟的msdn,應該蠻正宗的吧,http://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/en-us/automat/htm/chap12_3rcj.asp

第二個是我偶爾看到的,在csdn上,感覺蠻不錯的,中文的嘛,呵呵

其它的稀奇古怪的就不說了,各位可以自己網上搜搜,一大把的

那咱就照著這些資料開始我們自己的自定義結構的傳遞了,我們要定義的結構是rect,用來確定cell的尺寸位置,在vc中已經有了結構rect,但是vb中卻沒有,沒關係,我們自己給它定義乙個。

1.開啟litegrid.odl檔案,在icell介面的定義前面(其它位置也沒關係)加上

typedef [ uuid(6bf5ee0c-373a-4893-89eb-2c0208d3d4eb) ]

struct tagtrect

rect;

uuid用guid生成工具生成,就不多說了了,以後也不說了

這裡本來用tagrect的,結果居然提示說有重複定義,同樣也沒用rect,而用rect了。

2.為ccell新增成員變數crect m_rect;在建構函式中初始化為

3.為ccell新增get/set屬性rect,型別為variant

4.在litegrid.odl中,將該屬性的型別variant改為rect

5.get/set函式定義如下:

void ccell::setrect(const variant far& newvalue)

}variant ccell::getrect()

6.編譯通過

7.新建vb工程,新增litegrid控制項,在form_load中新增**如下:

dim rc as rect

dim rc1 as rect

dim ce as cell

set ce = litegrid1.cell(0, 0)

if not ce is nothing then

rc = ce.rect

ce.rect.left = 100

rc = ce.rect

rc.left = 10

rc.top = 29

rc.right = 12

rc.bottom = 439

ce.rect = rc

rc1 = ce.rect

end if

執行觀察一下幾次rc和rc1的值,可以發現結果完全正確

ok,搞定

但是,不知道什麼原因,從控制項除錯環境執行時,卻發現以上**除錯出錯,只保留rc = ce.rect或只保留ce.rect = rc**時卻不會出錯,不知何原因,鬱悶。

另外,對於getrect中的precordinfo,不知是否需要release,有待確定。

嘿嘿,咱不管了,懶得弄了,繼續旅程了。

ActiveX控制項的MFC設計之旅

在csdn中碰到了好幾個問使用mfc設計activex控制項的朋友,聯想到自己以前也幹過這事,突然想寫些文章,介紹介紹我所知道的一些設計技巧。無奈,千頭萬緒,不知如何著手,最後,決定乾脆設計一控制項,將在控制項中碰到的一些問題,一些方法寫出來。想一想,就設計一網格控制項吧,取名為litegrid。忘...

ActiveX控制項的MFC設計之旅 第13步

在vb的屬性檢視中,還有乙個有意思的功能是將屬性列在不同的類別,如,外觀,行為,資料等等。這種功能是怎麼來的,我自己的控制項中的自定義的屬性是不是也能列在這些類別中,我能不能建立自己的類別呢。很簡單,在你的控制項中實現乙個介面icategorizeproperties就可以了,這個介面只有兩個方法 ...

MFC中ActiveX控制項的使用

windows系的開發做的很少,也暈乎暈乎的。在mfc中新增上mapcontrol的控制項之後。手動新增乙個imapcontrol2ptr型別的變數,然後用手動新增的變數再去手動的與控制項關聯,才能進一步呼叫或者設定控制項的方法和屬性。我上一次使用mfc是什麼時候來著?貌似很久遠了。不過我依稀記得,...