方法一:
在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...