1. 程式人生 > >MFC中視窗重繪

MFC中視窗重繪

      系統為什麼不在呼叫Invalidate時傳送WM_PAINT訊息呢?又為什麼非要等應用訊息佇列為空時才傳送WM_PAINT訊息呢?這是因為系統把在視窗中的繪製操作當作一種低優先順序的操作,於是盡 可能地推後做。不過這樣也有利於提高繪製的效率:兩個WM_PAINT訊息之間通過InvalidateRect和InvaliateRgn使之失效的區域就會被累加起來,然後在一個WM_PAINT訊息中一次得到 更新,不僅能避免多次重複地更新同一區域,也優化了應用的更新操作。像這種通過InvalidateRect和InvalidateRgn來使視窗區域無效,依賴於系統在合適的時機發送WM_PAINT訊息的機 制實際上是一種非同步工作方式,也就是說,在無效化視窗區域和傳送WM_PAINT訊息之間是有延
遲的;有時候這種延遲並不是我們希望的,這時我們當然可以在無效化視窗區域後利用SendMessage 傳送一條WM_PAINT訊息來強制立即重畫,但不如使用Windows GDI為我們提供的更方便和強大的函式:UpdateWindow和RedrawWindow。UpdateWindow會檢查視窗的Update Region,當其不為空時才傳送WM_PAINT訊息;RedrawWindow則給我們更多的控制:是否重畫非客戶區和背景,是否總是傳送WM_PAINT訊息而不管Update Region是否為空等。

相關推薦

MFC視窗

      系統為什麼不在呼叫Invalidate時傳送WM_PAINT訊息呢?又為什麼非要等應用訊息佇列為空時才傳送WM_PAINT訊息呢?這是因為系統把在視窗中的繪製操作當作一種低優先順序的操作,於是盡 可能地推後做。不過這樣也有利於提高繪製的效率:兩個WM_PAINT訊息之間通過InvalidateRe

mfc 防止視窗

如果一個程式出現閃爍現象,會讓人覺得程式編寫人員很馬虎,缺乏對細節的足夠重視。Windows程式的任何部分都沒有任何理由出現閃爍現象。這篇文章的目的是告訴讀者如何使用相關的技術防止窗口出現閃爍效果。 什麼是閃爍閃爍可以這樣定義:當後面一幅影象以很快的速度畫在前面一幅影象上時

MFC 視窗

      系統為什麼不在呼叫Invalidate時傳送WM_PAINT訊息呢?又為什麼非要等應用訊息佇列為空時才傳送WM_PAINT訊息呢?這是因為系統把在視窗中的繪製操作當作一種低優先順序的操作,於是儘可能地推後做。不過這樣也有利於提高繪製的效率:兩個WM_PAINT訊息之間通過InvalidateRec

MFC視窗隨最小化最大化按鈕最大最小化

轉載於:https://blog.csdn.net/Bettyshasha/article/details/51603752  1.選中對話方塊,右鍵-》屬性-》訊息,新增WM_SIZE函式。 2.在對話方塊類標頭檔案.h裡面新增: void ReSize(); POINT o

關於WM_PAINT訊息無效區的問題

一直以來我都有一個疑問,那就是下面的程式碼 case WM_PAINT : hdc = BeginPaint (hwnd, &ps); ............... EndPaint (hwnd, &ps) ;

CSS和迴流

一.瀏覽器的渲染過程: 1.渲染圖: 2.瀏覽器渲染過程: (1)解析HTML,生成DOM樹,解析CSS,生成CSSOM樹 (2)將DOM樹和CSSOM樹結合,生成渲染樹(Render Tree) (3)Layout(迴流):根據生成的渲染樹,進行迴流(Layout

MFC視窗控制代碼和控制元件控制代碼的獲取

1. 程式主視窗控制代碼的獲得     CWnd* p = AfxGetMainWnd();//函式AfxGetMainWnd()獲得主對話方塊的指標p     HWND h = p->m_hW

Qt制窗口方法:

get spa style () time color ack == brush 1 void CircleWidget::paintEvent(QPaintEvent * event) 2 { 3 QPainter painter(this); 4

MFC獲取各個視窗之間的控制代碼或者指標物件的方法

轉載:https://www.cnblogs.com/gavanwanggw/p/6743774.html MFC中獲取各個視窗之間的控制代碼或者指標物件的方法 MFC在非常多的對話方塊操作中,我們常常要用到在一個對話方塊中呼叫還有一個對話方塊的函式或變數.能夠用例如以下方法來解決.

ListCtrl增加子控制元件Edit是,在父控制元件失去焦點時,子控制元件不進行隱藏

問題:現在有一個listctrl控制元件,需要在某一列上新增一個子控制元件edit。當點選子控制元件(edit)時,子控制元件顯示出來,父控制元件(ListCtrl)已經失去焦點了。此時,要是滑鼠點選的位置不在該控制元件內,edit處於顯示狀態,父控制元件(ListCtrl)是失去焦點狀態。

MFC按鍵

上次我們學習瞭如何美化對話方塊的介面,這次我們為上次的對話方塊新增兩個按鈕,一個是關閉按鈕,另一個是最小化按鈕,好,現在我們先看一下效果: 是不是很難看,因為我們的對話方塊美化了,所以我們的按鈕也要美化,因為採用貼圖的方式來美化,所以,我先給出這兩個按鈕的PNG格式的圖片,該圖片支援透明色,

關於MFC標題欄和其他設定位置的解決方案

背景:對話方塊無邊框,需要在固定的位置進行重繪。 落實步驟: 1、自定義重繪類; 2、呼叫重繪類; 3、獲取並處理需要重繪的區域。 重繪類的程式碼如下: 宣告 CBackgroundU

OpenCV視窗繫結到MFC用以顯示視訊或圖片資料

當使用MFC和OpenCV顯示圖片資料時,很多采用將Mat型別的圖片資料轉成CvvImage型別,然後在MFC的視窗中進行顯示,但是將面臨需要額外的標頭檔案CvvImage的問題。而將OpenCV的視窗與MFC中的圖片顯示控制元件進行繫結後就不需要CvvImage這個類了,同

在WPF窗體

原文: 在WPF窗體中重繪   寫這篇主要是為了驗證任何元素自身都具備繪圖功能. 在預設Window中重寫OnRender方法 protected override void OnRender(DrawingContext drawingContext) { drawingCon

MFCCWnd類及其派生類對話方塊、訊息處理、視窗操作

CWnd類 我們在螢幕上看到的所有物件都和視窗有關,它們或者派生於CWnd,屬繼承關係,如對話方塊、工具欄、狀態列、子控制元件;或者被CWnd合成,屬服務員與服務物件關係,如圖示、選單、顯示裝置。 CWnd類封裝的視窗操作主要包含視窗的建立和銷燬、操作視窗風格、操作視窗狀態

利用MFC建立視窗、訊息對映、window的位元組

利用MFC建立視窗: 1、mfc的標頭檔案:afxwin.h 2、自定義類,繼承於CWinApp,應用程式類(app應用程式物件,有且僅有一個) 3、程式入口:Initinstance 4、在程式入口中建立視窗 5、視窗類繼承於CFrameWind 6、視窗中構造Create(NULL,標題名稱)

解決winform的panel閃爍問題

利用winform開發時,可能都會遇到一個問題,就是在panel中不停的重繪圖形時,圖形會不停的閃爍。要解決這個辦法只需要開啟雙緩衝即可,由於初學c#,理解的不是很深,所以不多做解釋。以下程式碼親測可以解決這個問題:首先建立一個自己的panel類: using System

MFC 的幾個

一:什麼時候才會發生重繪視窗的訊息?       當需要更新或重新繪製視窗的外觀時,應用程式就會發送WM_PAINT訊息。對視窗進行重新繪製。 二:Invalidate() -- RedrawWindow() -- UpdateWindow()三個函式有什麼異同?    

關於MFC視窗與子視窗視窗與子視窗之間的資訊傳遞及控制

因為專案的需要,某子視窗B的設定變動,經常需要聯動其他子視窗C,或者父視窗A控制元件的名稱更新,資料更新等等問題。再網上查了許久,不得解 ,特拋磚引玉,提供幾種思路。      以下都以A為父視窗,A1為A中的Tab控制元件, B和C為子視窗被非模態創建於A1上,所以之間的

MFC視窗工作列顯示圖示和主視窗最小化在系統托盤顯示圖示

MFC子視窗工作列顯示圖示很簡單, 只需要在子視窗的初期化函式OnInitDialog()中新增ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW); 主視窗在系統托盤中顯示圖示以及恢復視窗是參考某位大神的程式碼 (一)  原理