DirectUI技術與無控制代碼視窗應用

2021-06-08 18:57:05 字數 1723 閱讀 6849

轉乙個別人的這方面的帖子:

directui 最早見到時是拿spy++照microsoft的msn發現的,有人在論壇上抱怨說軟體的mfc自己人都不用,其中就有舉例說msn得directui結構。其實我倒覺得,各有各的長處,

directui的設計初衷是去除視窗的概念,所有的元素都是邏輯上的視窗,而不是真正意義上有控制代碼的視窗。即這些元素都是直接在"父視窗"中繪製並響應事件。這個也不是什麼新的思路,vcl中早就有這種實現,vcl的tcontrol和從tcontrol繼承的類都可以響應事件,而從tcontrol繼承的可以是無控制代碼的元件。所以看看vcl的設計,就大概知道乙個無控制代碼的directui該什麼設計了。 所有的大型網遊客戶端基本上都是directui的方式來建立的,所不同的是,普通的應用程式的directui方式介面庫中如edit,combobox,listctrl等複雜控制項還是使用win32控制項來建立的,其虛擬的只是static,button,progressbar等控制項。而一些大型的遊戲客戶端可能這些元素可能也是自己處理。 說說directui的好處,沒了控制代碼和視窗的概念,首先得乙個好處是要做一些好的介面效果變得更加容易。舉例來說在有視窗控制代碼時 要實現static,button等控制項是見麻煩的事,static還好說,win32有wm_ctrlcolor訊息支援,可以做透明,button或者別的控制項就麻煩了,需要採用發訊息給父視窗,讓父視窗在子視窗的dc上先繪製,然後子視窗再繪製自己的text。而在directui下,這種效果簡直太簡單了,子元素只繪製自己的text,那就是透明效果。這中情況下,很容易做出帶底紋的,比較炫一些的介面。另乙個好處就是一些效率問題,現在我們實際上處理的介面只有父視窗,如果我們實現**換色,換膚等效果,效率要提高許多。實際上我們處理的介面或者說dc要少了很多,這樣效率或者邏輯應該就相對簡單了,同時對系統資源的占用也少了很多。 q: 對於使用directui的視窗,如何去找到他的「子視窗」的位置和其他「屬性」(如果有的話)? a: 是這樣的,位置在directui裡肯定是乙個區分

訊息分配的重要條件,但不是唯一條件。一般實現directui的庫裡面都會採用配置檔案或者xml來描述介面,這樣程式在載入的時候實際上就已經得到了乙個所有控制項位置的表,而directui中控制項的屬性肯定是自己根據需要來定義的,比如left,top,width,height,是否透明等。還是需要有個物件如directuibutton來和這個虛擬的物件繫結的。 具體的你可以參考下現在qq的版本,qq的主窗體實現是乙個directui的方式,在**目錄下有個config.xml,還有個指令碼檔案.vbs 的vb指令碼。 這方面進來接觸了些,有時間可能會做個比較完整的出來。 主要就是分割區域然後畫了,至於他們怎麼知道位置,很簡單,裡面有物件來處理這些,比如你的滑鼠在(x,y)單擊了一下,父視窗就會向所有的子物件(內部物件,沒有handle屬性)**這個訊息,或者查詢位於這個位置的最上層物件,然後**訊息給他,這樣就可以做到那個物件響應這個訊息了(和button處理方式一樣,只是沒有控制代碼了,也不依賴以windows來分發訊息)。至於wm_paint訊息比較好處理,父視窗先將底色畫好,然後就分發這個訊息給所有子物件,子物件根據自己記錄的位置和範圍,在指定的rect中畫好自己的東西就可以了。大致就是這樣,雖然是很炫的玩意,但還是基於原來的技術的。

童鞋們,回到現在,所以說,這個東西不是什麼新技術,大家要好好滴溫習一下功課啦。有時間抽一點兒功夫學習,抽一點兒功夫總結過去,未嘗不是一件大益事。

最後,大家可以看一看蔣晟童鞋的blog,上面也有較清楚的說明。而且在網上有乙個炫彩介面的東西好象也用的這個技術,大家可以一併下對比一下。

大家一起學習,一起努力,一起向著更遠,更高的方向上前進!生命不息,努力不輟!!!

視窗控制代碼,程序ID,程序控制代碼,視窗與程序之間的關係

在windows或linux等作業系統下視窗控制代碼對應著每個視窗的鑰匙,例如,你要對某乙個視窗進行操作,你必須知道你要操作哪乙個視窗,這裡就拿windows做舉例,windows下幾乎會建立許許多多個視窗,但是我們怎麼知道我們操作的是哪個視窗?答 就是視窗控制代碼,每個視窗在被建立出來之後就會被賦...

MFC 視窗的控制代碼與指標

一 控制代碼 2 獲取控制代碼 2 獲取子視窗控制代碼 3 獲取視窗中控制項的控制代碼 二 控制代碼 指標 id的轉換 控制代碼實際上是一種指向某種資源的指標,但與指標又有所不同 指標對應著乙個資料在記憶體中的位址,得到了指標就可以自由地修改該資料。windows並不希望一般程式修改其內部資料結構,...

如何從視窗控制代碼得到與視窗關聯的檔案路徑 檔名

在windows95 98上,使用getwindowmodulefilename可以很方便地實現這個功能。uint getwindowmodulefilename hwnd hwnd,視窗控制代碼 lptstr lpszfilename,檔案路徑 uint cchfilenamemax 但是到了wi...