c++ - How to draw a opaque image on the Aero glass window? -


i have used dwm api create aero glass window calling dwmextendframeintoclientarea.

void cmainframe::onactivate(uint nstate,cwnd* pwndother,bool bminimized ) {     cframewnd::onactivate(nstate,pwndother,bminimized);     bool fdwmenabled = false;     if (succeeded(dwmiscompositionenabled(&fdwmenabled)))     {         if(nstate == wa_active )         {             margins margins ={-1};             hresult hr = dwmextendframeintoclientarea(m_hwnd, &margins);             if (!succeeded(hr))                trace0("failed dwmextendframeintoclientarea\n");         }     } } 

and then, draw bitmap image on window (i have tried call drawthemeicon , cimagelist::draw draw image).

void cmainframe::displaybitmap( cbitmap *p, cdc *pdc) {     cdc dcmemory;     bitmap bm;     dcmemory.createcompatibledc(pdc);     dcmemory.selectobject(p);     p->getbitmap(&bm);     pdc->bitblt(100,100,bm.bmwidth,bm.bmheight,&dcmemory,0,0,srccopy); }  void cmainframe::onncpaint(){     cframewnd::onncpaint();     cdc* dc = getwindowdc();     crect rct;     getwindowrect(&rct);     dc->fillsolidrect(0, 0, rct.right - rct.left, rct.bottom - rct.top, rgb(0, 0, 0));     displaybitmap(&bmpbtn,dc);     releasedc(dc); } 

i found out image ugly , translucency. how draw opaque image on aero glass window? result

update: still need can provide solution without using gdi+ library me. thanks!

solution 1:

cmainframe::cmainframe() {     gdiplusstartupinput gdiplusstartupinput;     ulong_ptr           gdiplustoken;     //initialize gdi+.     gdiplusstartup(&gdiplustoken, &gdiplusstartupinput, null);     m_pimage = m_pimage->fromfile (_t("lena.bmp")); }  void cmainframe::onncpaint(){     cframewnd::onncpaint();     cdc* dc = getwindowdc();     crect rct;     getwindowrect(&rct);     dc->fillsolidrect(0, 0, rct.right - rct.left, rct.bottom - rct.top, rgb(0, 0, 0));     cpaintdc gdc(this);     graphics g(gdc);     //i don't why image disappear when move window.     g.drawimage ( m_pimage, 0, 0 );     releasedc(dc);  } 

the result: enter image description here


Comments

Popular posts from this blog

how to insert data php javascript mysql with multiple array session 2 -

multithreading - Exception in Application constructor -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -