如題,我創建了一個繼承至CStatic類的控制元件做畫布,在父對話框的onctlcolor函式中將其設定為了透明,但在子類的訊息回應函式中進行invalidate()和updatewindow()重繪視窗的時候卻無法實作了
這是設定透明背景的函式

這是設定畫布背景透明之前:

這是把畫布背景設定為透明之后(下面還有一個灰色的圖片所以顯示的顏色是灰色):

以下是控制元件子類函式中onmousemove的訊息回應函式:

抱歉分不多,把能拿的都拿出來了
uj5u.com熱心網友回復:
自己頂一下,順便說明下面這個灰顏色的是顯示圖片用的,我希望在他顯示東西的時候能夠在上面畫各種形狀,所以目前的思路是創建一個透明背景的畫布覆寫在上面,然后在透明畫布上回應滑鼠的各種訊息實作繪圖uj5u.com熱心網友回復:
實作對話框在位圖作為背景時的控制元件透明uj5u.com熱心網友回復:
TRANSPARENT 不是 視窗 透明!uj5u.com熱心網友回復:
感謝回復,我現在已經可以實作透明控制元件了,但是問題是透明后的控制元件重繪問題,我看了一下您的博客講的是如何把位圖貼到對話框上并且使得控制元件背景都透明,但是沒有涉及透明背景的控制元件重繪問題啊uj5u.com熱心網友回復:
沒太明白,能否詳細說一下,我現在設定透明是沒問題的,主要是設定透明后靜態控制元件無法實作用invalidate()和updatewindow()重繪視窗了,導致滑鼠移動時會不停地畫矩形uj5u.com熱心網友回復:
導致滑鼠移動時?滑鼠在 static 視窗內 移動 為什么 要 重繪 ?
TRANSPARENT 是 該視窗 在 最后 繪制
uj5u.com熱心網友回復:
移動時重繪是為了將上一次滑鼠移動訊息所畫的矩形抹掉,這樣就可以實作一個動態畫矩形框的效果,類似于windows桌面上點擊滑鼠左鍵拖動會出現一個實時變化的矩形uj5u.com熱心網友回復:
代碼不要用 圖片!上詳細代碼
uj5u.com熱心網友回復:
每次繪制前需要你自己做清屏的操作,TRANSPARENT設定之后,父視窗不再負責子控制元件背景繪制,你用背景色來FillRect一下再Rectangleuj5u.com熱心網友回復:
我現在希望的是背景色是透明的,所以回傳的慷訓刷,但是這樣的問題就是視窗不再重繪了,如果填充背景色的話直接把話刷設定為有顏色的就可以了,但是這樣每次滑鼠移動的時候背景色就會顯示出來,我希望的是背景始終不要顯示(也就是透明的)uj5u.com熱心網友回復:
MFC中簡單繪圖的實作轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/18523.html
標籤:界面
