VC 不規則窗體的實現(一)

2021-10-01 19:04:54 字數 1594 閱讀 9620

不規則窗體多用於程式啟動視窗,要實現不規則窗體,背景一般都會採用貼圖的方式,格式首先肯定是png格式了。

1、gdi+資源初始化

// 庫宣告

#include

using namespace gdiplus;

ulong_ptr gdiplustoken;

gdiplusstartupinput gdiplusstartupinput;

gdiplusstartup(&gdiplustoken, &gdiplusstartupinput, null);

2、png的載入

char szfilename = ".\\res\\bkimage.png";

int nszbufsize = strlen(szfilename) + 1;

dword nwszbufsize = multibytetowidechar(cp_acp, 0, szfilename, nszbufsize, null, 0);

wchar_t * wszfilename = new wchar_t[nwszbufsize];

wmemset(wszfilename, 0, nwszbufsize);

int nret = multibytetowidechar(cp_acp, 0, szfilename, nszbufsize, wszfilename, nwszbufsize);

gdiplus::image * pimage = gdiplus::image::fromfile(wszfilename);

if (pimage->getlaststatus() != ok)

delete pimage;

pimage = null;

delete wszfilename;

wszfilename = null;

3、窗體背景的繪製:

bool oninitdialog()

void drawbackgroundimage()

這種方法實現的效果圖(藍色背景是windows桌面背景):

窗體邊緣顯示非常圓潤,效果非常好,由於窗體將不會響應wm_paint訊息了,所以窗體內顯示的所有子控制項都無法正常顯示出來了,如果需要顯示就只有在drawbackgroundimage裡面進行自繪了。

4、gdi+資源釋放

gdiplusshutdown(gdiplustoken);

優點:窗體顯示效果好。缺點: 子控制項沒法顯示,需要自繪。

附加:無標題欄視窗的移動,只需要在on_wm_lbuttondown訊息事件裡面新增如下**即可:

postmessage(wm_nclbuttondown, htcaption, 0l); 

QT實現不規則窗體

看到網上有很多不規則窗體的實現,效果很酷.於是使用qt也實現了乙個,qt的不規則窗體實現非常簡單,只需要設定乙個mask 遮掩 這個的格式可以使用png或bmp格式,我使用了png格式,預設窗體是矩形的,使用png影象,將需要隔離在窗體之外的區域的畫素設定為白色或透明色,其他顏色的區域對應顯示出來的...

GDI 實現不規則窗體

先來看一下實現的效果,下圖中那個娃娃就是我們要實現的不規則窗體啦 使用gdi 還需要進行初始化 在應用初始化時,啟動gdi 在程式退出時,關閉gdi png是實現不規則窗體的關鍵,因為它本身就是帶透明效果的,把這種格式的作為窗體本身就是不規則的。首先我們需要載入這張,在這裡我沒有將其作為資源新增到專...

PyQt 不規則窗體的實現之一

知識點 pyqt一般實現的窗體就是當前作業系統原生窗體的樣式,ubuntu下的窗體還不錯,window下的就難看了,雖然平時應用程式關心的往往是業務和功能,但是偶爾我們也需要製作一些個性的窗體樣式,如qq 360 千千靜聽等,這種漂亮個性的窗體,很能吸引大眾的眼球。實現不規則窗體,我採用繼承qwid...