VC控制項的一些原理

2021-04-07 06:05:59 字數 2735 閱讀 7204

記得

vb中是怎麼處理控制項的吧,

so easy

了。先在視窗上畫出乙個控制項,然後給他起個名字

name

,然後**中所有的對於該控制項的操作都通過這個

name

來引用。例如,你要改變這個控制項的某些屬性,那麼通過這個

name

呼叫它的屬性,並相應的給屬性賦上你期望的值,那麼一切搞定。再如,你要條用該控制項的乙個方法,同樣

name.***

,完事。就這樣。 然而

vc呢?也這麼簡單麼?錯了,完全錯了,這裡的東西都變得難於理解(當然是指在你剛剛學習的時候,任何新的東西都是難於接受的,在你的原有的固執的思維模式的淫威之下)。

vc中的控制項可以描述成五個部分:

id,控制項實體,控制項變數,屬性函式,訊息函式。

這裡最重要的不再是

name

了,而是

id,系統通過各個控制項的

id來識別他們。控制項實體跟

vb中的沒有兩樣,都是在窗體上畫出來的(至少表面上是這樣子的)。控制項變數就比較隱晦了,

vb中我們通過

name

來引用控制項,但是

vc中沒有了

name

這麼個東西,相對等重要的是

id,然而

id能直接用麼,不能!這個東西是

ms專門設計出來個他們的系統用的(

****

,就像乙個國家的管理者往往通過自己的喜好來決定整個國家的命運樣,這都罷了——按照馬哲的觀念,國家最終是要消亡的——,問題在於他們偏偏還能通過對整個國家的控制來改變整個民族,乃至民族中每個人。這就不可忍受了!可又能怎樣?),系統通過這個

id來排程與空間相關的所有東西。究竟該怎麼引用?那就是這個控制項變數的事了,這個時候的控制項變數就相當於

vb中的

name

了。我們在

vb中通過

name

來引用控制項的時候,用的最多的就是

name.propority

,這樣可以方便的設定和更改控制項的屬性。

vc中這樣做可以麼?

vc中不同了,為了所謂的保護成員資料,這裡的屬性值基本上都不允許

name.propority

,而改用了屬性函式——

name.setpropority()

和name.getpropority()

——來設定和取得控制項相應的屬性。這也就是控制項屬性函式的作用了。還有要命的訊息函式。在

vb中控制項都給我們提供了許多事件函式,比如

click,dblclick etc

。這些函式幫我們完成了響應單擊和雙擊等事件的操作,看起來很是簡捷,可是你不曉得其中的道理。

vc則試圖讓你明白這些道理,他給出了訊息函式和訊息影射表這兩個東西。訊息函式用來處理訊息,如

click

等,訊息影射表則用來標示訊息(

afxmsg

)從**(

id)來,以及該用什麼函式(

afxmsg fun

)來處理。

上面是

vc控制項的基本原理,也是整個

mfc框架很小的一部分,其中的技術細節浩如煙海,許多人窮經皓首,經年累月的在學習(

ms還不讓人家來學,狗屎,守著一堆**發財的傢伙。雖然我很是推崇

ms的技術,那裡面往往是最先進的理念,畢竟

ms匯集了全球那麼多聰明的高手

),但也未必學完過。我只是剛剛開始,雖然追隨技術,但不狂熱,下面是對「這五部分怎樣關聯」的更進一步理解。

控制項實物:

object

屬性函式:

setpropority()getpropority() 控制項

id:

myid

控制項變數:

objname

訊息:

ws_click

訊息函式:

onclick()

object

首先關聯

myid

——這在建立控制項的時候完成。當你畫出控制項實體之後,你會看到他的屬性視窗中已經建立了該控制項的id。

屬性函式關聯

objname

——這個是在宣告變數的時候完成的。宣告乙個什麼型別的變數,那麼該變數就具有了什麼樣的屬性函式,這都由

mfc框架類庫來決定。

myid

與objname

的關聯——這個時候需要乙個函式來完成,該函式由

mfc提供,實際上是實現了控制項與變數間的資料交換。

void

class

::dodataexchange(cdataexchange* pdx)}afx_data_map

}ws_click

關聯onclick

和myid

——訊息影射表來了。這個表看起來的確像張表,它把訊息,

id,訊息函式一排列了出來。我們也就能看到這些,簡單的這麼一排肯定是搞不定的,到底怎麼管用的,

ms最為清楚,可人家不得給你說。你當然可以自己找些反彙編工具慢慢研究了(多可憐),不過有很多書好像能告訴你一部分真相。

begin_message_map(

class

, cdialog)

//}afx_msg_map

end_message_map()

這個表關聯的是訊息,

id,訊息函式,好像並沒有與控間實體相關。其實,由於

id已經與

object

以及objname

關聯過了,那麼整個關聯表就已經建立好了。

VC中一些控制項的小技巧

1.讓list control有check box 用setextendedstyle方法可以設定,看 clistctrl m listctrl dword dwstyle m listctrl.getstyle dwstyle lvs ex checkboxes m listctrl.setext...

vc對話方塊控制項一些操作

隱藏對話方塊,顯示 cdailog pdailog if pdailog pdailog showwindow sw hide pdailog showwindow sw show 字串操作 constchar getpartnametotree int index,const char partn...

VC的一些理解

vc維就是乙個係數,這個係數就是為了度量一組函式集的容量 capacity 注意這裡的 函式 是廣義的,線性函式 多項式函式當然都是函式 對於乙個多層的神經網路,權值大小不知道 訓練神經元網路就是為了確定權值 每組權值就可以認為對應乙個函式。而容量就反映了一組函式集對樣本的區分能力,容量越大,對應的...