日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

[翻译]VC++中创建并使用自定义控件

發(fā)布時(shí)間:2023/12/18 c/c++ 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [翻译]VC++中创建并使用自定义控件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文地址

介紹

您好!這是我在CodeProject上的第四篇文章。遷移到VC++,我第一個(gè)關(guān)注的是通過VC++幫助能夠創(chuàng)建自定義控件,因?yàn)檫@是一個(gè)非常用有的特性,當(dāng)你要修改任意控件的內(nèi)容或創(chuàng)建新的控件的時(shí)候。所以我決定寫這篇文章,這樣新的開發(fā)者或第一次開發(fā)控件的人就能夠從中得到幫助。
這就是所有的介紹,現(xiàn)在轉(zhuǎn)到最初的觀點(diǎn):怎么創(chuàng)建自定義控件,為什么要?jiǎng)?chuàng)建自定義控件。我對(duì)在Win32 API下開發(fā)應(yīng)用程序很感興趣,因?yàn)樗∏刹⒛塥?dú)立運(yùn)行,我從沒用VC++開發(fā)過,但它是非常強(qiáng)大的語言,并且它強(qiáng)大的特性已經(jīng)吸引我轉(zhuǎn)向了它。自定義控件就是其中之一。CodeProjet上有很多使用自定義控件的文章。但是第一次閱讀它們的時(shí)候,我不明白在簡單的Windows應(yīng)用程序中怎樣去創(chuàng)建、獲取和處理消息。自定義控件給開發(fā)者帶來了一種方便的方式去創(chuàng)建控件并使其和其它常規(guī)控件一樣可視化。(因?yàn)槲沂荲C++的初學(xué)者,所以文章中如果有錯(cuò)請(qǐng)告知我)。

它在哪里

現(xiàn)在的問題是,自定義控件在哪里?答案就在下面。下圖顯示了自定義控件,它躺在控件欄中。


這個(gè)圖顯示了這個(gè)自定義控件的位置。你可以選擇它,并能在你的窗體資源中直接繪制。這里最主要的問題是當(dāng)你把這個(gè)控件放到你的窗體在,然后你編譯并執(zhí)行程序,你會(huì)看不到效果,因?yàn)槟氵€沒有為這個(gè)控件選擇一個(gè)類,所以這個(gè)問題在后面的章節(jié)討論。

創(chuàng)建一個(gè)類

現(xiàn)在,下圖顯示了自定義控件在窗體中繪制。現(xiàn)在,你在自定義控件上面右擊并在彈出的菜單上選擇“類向?qū)А?#xff08;ClassWizard)。

選擇一個(gè)類

在你點(diǎn)擊“類向?qū)А敝?#xff0c;下面這個(gè)對(duì)話框就會(huì)在屏幕上顯示。在它上面,選擇“添加類”(Add Class)然后選“New...”

現(xiàn)在,當(dāng)你點(diǎn)擊New按鈕后,給自定義控件選擇基類的對(duì)話框就會(huì)出現(xiàn)如下面所示。在此,對(duì)于基類你有多個(gè)選擇。意思就是你可以自定義基礎(chǔ)控件,比如給靜態(tài)控件或者編輯控件添加新特性,或者你可以創(chuàng)建一個(gè)全新的控件。我決定創(chuàng)建一個(gè)全新的控件,像便箋本那樣,所以,我選擇基礎(chǔ)類CWnd作為基類。


最后,你已經(jīng)給你的控件創(chuàng)建了類。現(xiàn)在,重要部分開始了……

因?yàn)橹皠?chuàng)建的類使用CWnd作為基類,我們要注冊(cè)這個(gè)類因?yàn)檫@是一個(gè)自定義的類。所以,我們必須寫函數(shù)RegisterWndClass去注冊(cè)它。函數(shù)的代碼可能像下面這樣……

View Code

用這種方式,我們已經(jīng)注冊(cè)了這個(gè)新的窗口類。現(xiàn)在,你要像下面這樣添加這個(gè)函數(shù)到類的默認(rèn)構(gòu)造函數(shù)中:

View Code

我想有人會(huì)想MYWNDCLASS是個(gè)什么。答案是它是我們自定義控件的類名。它定義在MyCustomControl.h文件的的頂部,就像下面這樣:

View Code

?現(xiàn)在,我們就有了自己的類,名叫MyDrawPad。

附加類到自定義控件

所有這些做好之后,自定義控件我們就要?jiǎng)?chuàng)建完成了。最后剩下的事情是把自定義控件設(shè)置為我們創(chuàng)建好的窗口類。為此,在資源視圖里右擊自定義控件然后選擇它的屬性。一個(gè)對(duì)話像下面的對(duì)話框?qū)?huì)出現(xiàn)……


然后,設(shè)置類名為我們之前創(chuàng)建的MyDrawPad。這里你可以通過改變“Style”的編輯框16進(jìn)制數(shù)的值來選擇窗口樣式。我已經(jīng)試過了一些值,你們也可以試試。

實(shí)現(xiàn)數(shù)據(jù)交換

現(xiàn)在,所有的事情都做好了,但數(shù)據(jù)必須要在窗口和我們的應(yīng)用程序之間進(jìn)行交換。所以,在你的對(duì)話框類為我們的自定義控件添加變量,像下面這樣:

View Code

之后,你得添加在DoDataExchage()函數(shù)里添加下面的代碼,讓它與自定義控件進(jìn)行交互。

View Code

現(xiàn)在,你做好準(zhǔn)備動(dòng)作了嗎???好,按Ctrl+F5編譯并執(zhí)行程序。(但愿你都做對(duì)了……我想沒有錯(cuò)誤!!!)

別忘了在對(duì)話框的頭文件里寫#include "MyCustomControl.h",不然的話會(huì)生成很多錯(cuò)誤。(我想你不會(huì)怪我哈哈哈)。

添加消息處理

上面的關(guān)鍵部分成功后,你就能看到對(duì)話框里有一個(gè)白色的矩形。這就是我們的自定義控件(相信我!)。這只是個(gè)不窗口。現(xiàn)在,我們添加一些窗口消息和我們的控件相交互。請(qǐng)仔細(xì)閱讀……

為了給窗口添加Windows消息,右擊MyCustomControl類并選擇Add Windows Message Handler來添加消息,如mouse?move,click等等。

這樣子,在這么長(很長嗎?)的工作后,你已經(jīng)創(chuàng)建了你的自定義控件。現(xiàn)在放松一下,開始由你們自己寫了。請(qǐng)對(duì)我的文章進(jìn)行評(píng)論(我喜歡你們?cè)u(píng)論)。比如,我已經(jīng)用包含的源代碼寫了一個(gè)簡單的DrawPad。

現(xiàn)在我們來梳理一下這篇文件的簡短概要:

要?jiǎng)?chuàng)建自定義控件,我們要做下面這些事情:

  • 創(chuàng)建包含對(duì)話框的簡單的MFC應(yīng)用程序
  • 控件欄中選擇自定義控件。
  • 對(duì)話框資源里繪制自定義控件。
  • 右擊自定義控件選擇類向?qū)?/strong>。
  • 從Add Class菜單在添加新的類,選擇合適的基類
  • 添加代碼并注冊(cè)Custom Window class.
  • 在對(duì)話框里給基類(自定義類)添加成員變量。
  • 給已經(jīng)注冊(cè)的窗口類設(shè)置自定義控件。
  • 添加DoDataExchange代碼。
  • Ctrl+F5編譯并執(zhí)行程序。
  • 在類視圖里通過右擊自定義控件類來添加/編輯Windows消息處理函數(shù)。

如果你喜歡它,給我郵件yogmj@hotmail.com,發(fā)送你的建議或文章里的拼寫錯(cuò)誤。或者這些源代碼里的Bugs(因?yàn)?br /> 我是Bug獵手{我是這么認(rèn)為的,你認(rèn)為嗎?})

總結(jié)

以上是生活随笔為你收集整理的[翻译]VC++中创建并使用自定义控件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。