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? 
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); } 
Comments
Post a Comment