狀態列上放進度條 紋理操作 MFC OpenGL

2022-03-24 21:23:52 字數 2556 閱讀 6806

這兩天的進展是,opengl方面:對紋理的半透明的顯示,mfc方面:在狀態列上放進度條,能根據進度對進度條進行實時更新。

從昨天到今早,做的東西還算是比較多的,下午一直在移植**,有點焦頭爛額的感覺,想著應該把節奏放放,否則做過的,遇到的問題不總結總結,只怕是下午又遇到後,就沒啥感覺了,下面一點

一點道來:

1.大致按問題的重要程度來排序吧,先是紋理的繫結,由於我的程式實現的是,靜態分割視窗,乙個doc對應兩個view,兩個view都需要opengl的渲染環境,也就是乙個dc(裝置上下文),對應兩個rc(渲染上下文),而乙個rc同一時刻只能分配到乙個rc上,也就是說,兩個rc要輪流切換著,至於有人說啥多個dc,對應多個rc,可以同時繪製,由於不大懂就作罷了,而且現在的這個比較好理解,就暫且用著。而紋理的繫結glbindtexture,是共享在當前rc下的display-list space中的(參見這裡),也就是說每次如果有切換view,並且要繫結紋理的話,必須先切換當前的rc,而紋理的繫結對紋理的顯示效率提高至關重要,在各自的view中新增乙個繫結紋理的方法,然後按照上述所說操作就可以了。有關紋理的優化,這裡,這裡講的很不錯,推薦

2.紋理的顯示沒問題後,由於左檢視中的紋理要採用半透明的效果,於是用到了glblendfunc函式,然後對混合知識補充了下,所謂混合製造透明效果,其實就是對兩類rgba顏色,進行某種線性運算後的結果,給人種透明的假想,其實還是二維的資訊。在這、這、這有了大致的了解,msdn裡講的很不錯,以後要養成看msdn的習慣,這裡提到,如果在繪製的3d的物件的話,要注意把深度測試給關閉了,否則有些地方就達不到混合的效果了。

3.昨晚弄opengl弄的有點煩了之後,就弄弄mfc方面的調解調解(晚上回去瞎翻了翻畢淑敏的書看看,調劑調劑,發現文字很吸引人啊),在狀態列上放進度條,這,這可以做參考,這篇博文**的算是比較多的了,而且內容比較完整,照著做後才發現,那是相當的暈的,要麼是比較舊的,要麼就是那人蛋疼,不過,讓我學習了下怎麼自定義訊息,訊息響應函式,還是不錯的,裡面那個onprogress函式,由於開發平台式vs2008的緣故,必須弄成返回值是lresult,帶有wparm和lparm引數(參見這裡),後兩個術語把我弄的比較蛋疼,從msdn那兒鏈到這裡,然後就豁然開朗了,w指的是word(16),l指的是long(32),由於最開始的是16位的平台,word型變數用來傳其他引數,long型變數用來傳指標,雖然現在硬體發展了,還沿用了原來的命名習慣。

4.至於狀態列中放進度條,跟工具欄中放滑動條有點類似,新建乙個變數繼承自cstatusbar,新增成員變數cprogressctrl,通過它的creat方法來新建,至於訊息響應的話,在mainframe下新增訊息響應函式afx_msg void onprogress(),然後和之前設好的訊息id通過on_message(mywm_progress, onprogress)進行繫結,id設成(wm_user+100),這裡+100為了防止和系統id或是其他的id衝突,這些都準備好後,在需要呼叫該響應函式的地方,傳送訊息就可以了,用sendmessage,可以注意到mainframe是cprogressctrl的父容器的父容器,一般都是放在父容器的,我覺得其中乙個原因可能是,如果是父容器的話,操作比較簡單,就是直接對成員變數操作。這些完了之後,就是選擇進度條放在哪了,mainfrm.cpp中有indicator陣列,放的就是狀態列中具體劃分的塊數,可以參加這裡,id_separator指的是佔位符,然後可以通過cstatusbar::setpaneinfo,來設定在狀態列中的樣式,包括是不是3d狀的,這些搞定後,然後就是同上面的一些操作類似,會有些亂七八糟的業務,一一搞定就可以了,debug了蠻久的。

ps.稍微總結下,實現的初期效果比較滿意,圖就不上了,但也有不少的疑問,如加了進度條後,載入一張vase1.png從原先的9s到現在的12s,設定進度條狀態有那麼耗時嗎,在使用者體驗上,還有很多需要做的,也有些心得,對物件導向程式設計,有點理解,因為我沒怎麼物件導向,然後**就越來越複雜了,亂七八糟的,調來調去的,然後我就會主動的去想,怎麼把具有功能的**放在一起寫成乙個函式放到相應的物件下,這樣別人要用的時候,直接呼叫就可以了。接下來,先把最核心的功能處實現下,隨著實現,又發現了不少需要做的,為了使用者的操作方便。有一點有進展的是,對於時耗的瓶頸處,頻繁修改的乙個三角形集合的顯示,起初用顯示列表沒能搞定,效果比較差,並且在csdn上發帖尋求幫助,今天開啟發現有人提出了很好的建議(至今有1個月了,囧),我可以嘗試一下。插一句,今天下午移植**的時候,發現還寫了不少的,雖然有點後怕,但想起來比前些天有了些許進步而且看到了進展,心裡就甜滋滋的。今天是第5天,也才5天而已,繼續~

MFC在狀態列中使用進度條控制項

步驟 0.建立mfc對話方塊程式 1.增加標頭檔案,cprogressctrl需要使用 2.在類中宣告2個控制項 狀態列 進度條 進度條在資源編輯器中建立 3.進度條是資源,有 id,需要物件資料交換 4.建立 布置狀態列 在初始化對話方塊函式中 5.設定狀態列的某一分割槽為進度條父視窗 6.使用定...

在狀態列動態加進度條

一般情況下,我們可以建立非模式對話方塊並在上面顯示進度條。如果能夠利用狀態條,在狀態條中動態地新增並顯示進度條,將會更加方便直觀。下面將講述如何在delphi 5中程式設計實現在狀態條中動態地新增進度條。具體的過程如下 2 在窗體中新增乙個狀態列元件statusbar1,乙個button元件butt...

狀態列中新增進度條

將進度條新增到狀態列中不是很困難,只要幾步就可以了 1.建立乙個form工程,在窗體上新增乙個狀態列stat,新增乙個進度條progressbar1 2.為了演示進度情況,再新增乙個timer1 3.在stat的屬性中,將showpanels設為true 4.在stat的panels屬性中新增乙個s...