如果我們要重寫一個(gè)CButton取名為CMyButton,我們可以重寫CMyButton的DrawItem()函數(shù)來(lái)實(shí)現(xiàn)我們的
需求,但CMyButton::DrawItem()是在什么時(shí)候調(diào)用呢?它是在它的宿主類的On
On
宿主類可以根據(jù)nIDCtl來(lái)判定是哪個(gè)子控件。其實(shí)我們可以在On
的子控件看起來(lái)不好,所以我們應(yīng)該在子類的DrawItem對(duì)子類繪制,例如CMyButton::DrawItem。所以可以
這樣理解,On
關(guān)參數(shù),而且,你得把字控件設(shè)置成“自畫”類型,才會(huì)調(diào)用到On
在學(xué)習(xí)中還有一個(gè)消息也是由宿主類被調(diào)用的,它就是WM_CTRCOLOR。這個(gè)消息是在子控件將要繪畫時(shí),利用
反射機(jī)制發(fā)送給其宿主類。On
相關(guān)的,在這里可以設(shè)置,前景顏色,背景顏色,畫刷類型,字體等等,但不能改變?cè)氐慕缑婵蚣?,這是DrawItem
所能干的。
如果同時(shí)有DrawItem(子類),On
On
如果我們同時(shí)又相應(yīng)的子類的WM_PAINT消息,子類不會(huì)向宿主類發(fā)送WM_DRAWITEM消息,你要完成子類的
全部繪制工作,如果子類是一個(gè)列表框,就很麻煩。這事調(diào)用順序是On
在發(fā)送一個(gè)WM_PAINT消息前,總會(huì)先發(fā)送一個(gè)WM_ERASEBACK消息,我們?cè)谶@里在一個(gè)背景圖片。
對(duì)于我們平時(shí)對(duì)控件的繪制,上面介紹的差不多了,還有一個(gè)CView的問(wèn)題,也就是On
其實(shí)這個(gè)很簡(jiǎn)單,CView::On
void CView::On
從代碼中可以清楚的看出他們的關(guān)系。
聯(lián)系客服