为什么用别人的方法不行啊!!!
不管了,反正我也能实现。思路还是不是很清晰。
1.制作png图片。注意边界,多试几次会明白我的意思的
2.m_image为CImage类,在OnInitDialog()里加上:
ModifyStyleEx(0,WS_EX_LAYERED); m_image.Load(_T("res\\test1.png")); DrawUI();
void CdirectUITest2Dlg::DrawUI() { HDC hDC=::GetDC(m_hWnd); HDC hMemDC=::CreateCompatibleDC(hDC); BITMAPINFO bitmapinfo; bitmapinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bitmapinfo.bmiHeader.biBitCount = 32; bitmapinfo.bmiHeader.biHeight =500; bitmapinfo.bmiHeader.biWidth = 500; bitmapinfo.bmiHeader.biPlanes = 1; bitmapinfo.bmiHeader.biCompression=BI_RGB; bitmapinfo.bmiHeader.biXPelsPerMeter=0; bitmapinfo.bmiHeader.biYPelsPerMeter=0; bitmapinfo.bmiHeader.biClrUsed=0; bitmapinfo.bmiHeader.biClrImportant=0; bitmapinfo.bmiHeader.biSizeImage = bitmapinfo.bmiHeader.biWidth * bitmapinfo.bmiHeader.biHeight * bitmapinfo.bmiHeader.biBitCount / 8; HBITMAP hBitmap=::CreateDIBSection (hMemDC,&bitmapinfo, 0,NULL, 0, 0); HBITMAP hOldBitmap = (HBITMAP)::SelectObject (hMemDC,hBitmap); //画出各个界面元素---------------------- m_image.Draw( hMemDC,0,0 ); //设置透明窗口------------------------------------------------- CPoint DestPt(0,0); CSize psize(500,500); BLENDFUNCTION blendFunc32bpp; blendFunc32bpp.AlphaFormat = AC_SRC_ALPHA; blendFunc32bpp.BlendFlags = 0; blendFunc32bpp.BlendOp = AC_SRC_OVER; blendFunc32bpp.SourceConstantAlpha = 255; ::UpdateLayeredWindow(m_hWnd,hDC,NULL,&psize,hMemDC,&DestPt,0,&blendFunc32bpp,ULW_ALPHA); //释放资源------------------------------------------------- ::SelectObject (hMemDC,hOldBitmap); ::DeleteObject(hBitmap); ::DeleteDC(hMemDC); ::ReleaseDC(m_hWnd,hDC); }3.加上鼠标拖动
void CdirectUITest2Dlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 ReleaseCapture (); SendMessage (WM_NCLBUTTONDOWN, HTCAPTION, 0); CDialogEx::OnLButtonDown(nFlags, point); }