資源描述:
《vc界面編程經(jīng)典實(shí)例1》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、ADragandDropListControl程序運(yùn)行效果截圖:這篇文章包含一個(gè)demoproject,一個(gè)繼承于CListCtrl的類和一個(gè)快速查看這個(gè)類功能的release。我不想讓這個(gè)類十全十美,但對(duì)于我當(dāng)前的項(xiàng)目來(lái)講,它的功能已經(jīng)足夠了。當(dāng)然了,它還有更進(jìn)一步完善的地方,歡迎指正!左圖是程序演示的示例圖片。類CDragDropListCtrl具有以下的功能和特性:1、支持單選和復(fù)選的任意托拽2、所選擇的托拽目標(biāo)跟隨這鼠標(biāo)突現(xiàn)式的移動(dòng)3、當(dāng)把目標(biāo)托出上下邊界的時(shí)候,ListControl會(huì)自動(dòng)滾動(dòng)4、以LVS_EX_FULLROWSE
2、LECT風(fēng)格的開關(guān)方式運(yùn)行、5、保存所托拽目標(biāo)的狀態(tài)6、所有的代碼都封裝在control當(dāng)中-無(wú)需修改父類本類源自WayneBerthin以前寫過(guò)的一篇文章,但我重寫了大部分代碼,并且又增加了很多。CreateDragImageEx方法跟FrankKobs所給出的大致相同,但修復(fù)了一個(gè)小的bug以便于程序能更好的運(yùn)行。要使用這個(gè)類,首先要把DragDropListCtrl.cpp和DragDropListCtrl.h兩個(gè)文件添加到你的工程當(dāng)中,然后在你的對(duì)話框資源中增加一個(gè)ListControl,并設(shè)置View方式為Report,用Clas
3、sWizard為這個(gè)ListControl添加一個(gè)變量,變量的類別為Control,變量類型為CDragDropListCtrl,最后,把下面一行加到你的對(duì)話框頭文件的頂部:#include"DragDropListCtrl.h"這樣就大功告成了!MFC窗口位置管理詳細(xì)分析及實(shí)例在一般用MFC編寫的程序的窗口客戶區(qū)中,可能有好幾個(gè)子窗口(具有WM_CHILD風(fēng)格的窗口)。上邊是工具欄,中間是視圖窗口,下邊是狀態(tài)欄。三個(gè)窗口在框架的客戶區(qū)里和平共處,互不重疊。主框架窗口的尺寸改變了,別的子窗口都能及時(shí)調(diào)整自己的尺寸以便保持相互位置關(guān)系不變,例
4、如狀態(tài)條窗口總能保持在主框架客戶區(qū)底部,并且其寬度總能和主框架客戶區(qū)寬度一致。工具欄窗口總能??吭谥骺蚣艿哪骋贿叢蛔?,其寬度或高度總能和主框架客戶區(qū)的寬度或高度一致,視圖窗口總能填滿主框架客戶區(qū)的剩余空間。假如我們自己從CWnd類派生一個(gè)窗口類并生成一個(gè)窗口,在它的客戶區(qū)里要生成若干個(gè)子窗口,我們想使這些子窗口排列得規(guī)規(guī)矩矩,互不重疊,當(dāng)父窗口的尺寸變了時(shí)各個(gè)子窗口能適時(shí)調(diào)整自己的尺寸和位置,使各個(gè)子窗口之間的位置大小比例關(guān)系不變。當(dāng)移動(dòng)其中一個(gè)或幾個(gè)子窗口時(shí),別的子窗口能及時(shí)為這個(gè)移動(dòng)了的子窗口讓位。當(dāng)然我們可以利用api函數(shù)里管理窗口的
5、函數(shù)來(lái)編寫自己的管理子窗口的方法。可是如果在父窗口的客戶區(qū)里有了工具欄,狀態(tài)條等等子窗口時(shí),你自己加進(jìn)來(lái)的子窗口還能和這些mfc提供的子窗口融洽相處嗎?你如何保證你的子窗口不會(huì)覆蓋了能夠四處??康墓ぞ邫冢慨?dāng)工具欄和狀態(tài)條消失后你的子窗口如何才能知道,以便及時(shí)調(diào)整自己的大小從而覆蓋工具欄和狀態(tài)條騰出的空間?基于文檔視圖構(gòu)架的窗口的客戶區(qū)內(nèi)還有個(gè)視圖,你自己硬加上的子窗口能不和視圖窗口爭(zhēng)地盤嗎?所以必須了解mfc的窗口管理它的客戶區(qū)的方法。其實(shí),mfc的窗口管理它的客戶區(qū)的方法是非常簡(jiǎn)單的:父窗口調(diào)用一個(gè)函數(shù),子窗口響應(yīng)一個(gè)消息,就這么多。CW
6、nd::RepositionBars函數(shù)和WM_SIZEPARENT消息先簡(jiǎn)述一下mfc的窗口為子窗口分配客戶區(qū)空間的過(guò)程:這一過(guò)程是父窗口與子窗口共同協(xié)調(diào)完成的。父窗口先提供它的客戶區(qū)內(nèi)的一塊區(qū)域,叫做起始可用區(qū)域。然后調(diào)用一個(gè)函數(shù),在這個(gè)函數(shù)里,父窗口把這片區(qū)域通過(guò)一個(gè)消息提交給它的第一個(gè)子窗口,該子窗口決定自己要占用多大一塊,然后在可用區(qū)域里把它將占據(jù)的部分劃出去,這樣可用區(qū)域就被切去了一塊。父窗口再把這塊剩下的可用區(qū)域通過(guò)同樣的消息提交給第二個(gè)子窗口,第二個(gè)子窗口再根據(jù)自己的需要切掉一塊。如此這般,每個(gè)子窗口都切去自己所需的一塊。最
7、后剩下的可用區(qū)域就給最后的子窗口使用??梢钥闯?,除了最后一個(gè)子窗口外,其它子窗口都得在消息響應(yīng)函數(shù)里有自己的算法來(lái)決定自己將在可用區(qū)域里占據(jù)多大一塊,最后一個(gè)子窗口由于別無(wú)選擇,所以不需要這樣的算法。當(dāng)然,初始的可用區(qū)域是一個(gè)矩形,每次被切割后剩下的可用區(qū)域還是一個(gè)矩形,不可能是別的形狀的。舉例說(shuō)來(lái),在一個(gè)典型單文檔程序中,父窗口就是從CFrameWnd派生的主框架窗口,最后一個(gè)子窗口就是視圖窗口,如果用了CSplitterWnd生成分隔條的話,最后一個(gè)子窗口就是擁有分隔條的那個(gè)窗口。其它子窗口就是工具欄窗口和狀態(tài)條窗口,以及可能有的別的控
8、件窗口。在典型多文檔界面程序中,父窗口就是主框架窗口,最后一個(gè)子窗口就是覆蓋在主窗口客戶區(qū),背景為黑灰色,擁有包含文檔的子框架窗口的那個(gè)窗口,這是個(gè)預(yù)定義了窗口類的窗口,它的窗口