在對話方塊中設定背景的三種方法

2021-09-06 05:17:22 字數 2254 閱讀 1338

方法一:

在onpaint中stretchblt

具體是:注釋掉cdialog::onpaint()或放到結尾(原因何在呢?),並加入貼圖**

[cpp]view plain

copy

print?

void cqqqqqdlg::onpaint()  

else

}  void cqqqqqdlg::onpaint() else }

執行效果截圖如下:

方法二:

在onerasebkgnd中stretchblt

具體是:注釋掉return cdialog::onerasebkgnd(pdc);直接返回true(為什麼不能返回這個要返回true呢?),**如下:

[cpp]view plain

copy

print?

bool cqqqqqdlg::onerasebkgnd(cdc* pdc)    

bool cqqqqqdlg::onerasebkgnd(cdc* pdc)

效果與方法一相同,就不貼了,參見上圖。

而且這裡還有乙個很有意思的現象,若在onerasebkgnd貼圖,在onpaint()函式中不呼叫基類的onpaint,即注釋掉cdialog::onpaint(),則將介面隱藏後再顯示出來則控制項全沒了,只有對話方塊以及背景。如下圖:

原因見《在onpaint中必須呼叫一次beginpaint和endpaint,且也只能呼叫一次。》

方法三:

在onctlcolor中返回帶有背景點陣圖的畫刷

具體是:

1、在標頭檔案中定乙個背景刷

[cpp]view plain

copy

print?

public:  

cbrush   m_brushbk;  

public: cbrush m_brushbk;

2、在oninitdialog中加入以下句

[cpp]view plain

copy

print?

// todo: add extra initialization here

cbitmap bmp;  

bmp.loadbitmap(idb_bitmap_tempbk);   

m_brushbk.createpatternbrush(&bmp);   

//m_brushbk.createsolidbrush(rgb(0,255,0)); //用純色作為背景

bmp.deleteobject();      

// todo: add extra initialization here cbitmap bmp; bmp.loadbitmap(idb_bitmap_tempbk); m_brushbk.createpatternbrush(&bmp); //m_brushbk.createsolidbrush(rgb(0,255,0)); //用純色作為背景 bmp.deleteobject();

3、在onctlcolor函式中返回背景畫刷

[cpp]view plain

copy

print?

hbrush c***xxdlg::onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor)  

return hbr;  

}  

hbrush c***xxdlg::onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor) return hbr; }

效果如下圖所示:

注意這個函式裡面的if判斷,這個pwnd引數很關鍵。

我們看看,如果沒有這個if判斷,直接返回m_brushbk;會是什麼結果呢,**如下:

[cpp]view plain

copy

print?

hbrush cqqqqqdlg::onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor)    

hbrush cqqqqqdlg::onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor)

截圖如下:

看圖說話,不解釋,***。

這種方法的缺點是不具備stretchblt函式的自動適應對話方塊(目標矩形)大小的功能。

在對話方塊中設定背景的三種方法

方法一 在onpaint中stretchblt 具體是 注釋掉cdialog onpaint 或放到結尾 原因何在呢?並加入貼圖 cpp view plain copy print?void cqqqqqdlg onpaint else 執行效果截圖如下 方法二 在onerasebkgnd中stre...

三種 對話方塊

對話方塊有三種 1 alert 只是提醒,不能對指令碼產生任何改變 2 confirm 一般用於確認,返回 true 或者 false 所以可以輕鬆用於 if.else.判斷 下面我們分別演示 對話方塊有三種 2 一般用於確認,返回 true 或者 false 所以可以輕鬆用於 ifelse判斷 下...

Qt設定對話方塊三種模式

qdialog dlg new qdialog this dlg exec do something.模態對話方塊,對話方塊顯示在最前面,處於阻塞狀態,後面的主窗體的介面不能操作,必須要關閉之後才可以操作,對話方塊的操作執行完並且關閉之後後面的 才 可以執行。qdialog dlg new qdia...