读书人

把这个对话框加载到png图片的窗口下 是

发布时间: 2013-02-18 10:50:49 作者: rapoo

把这个对话框加载到png图片的窗口上 是层粉色。。。。。。。//怎么回事
把这个对话框加载到png图片的窗口下 是层粉色。//咋回事


//加载Png图片的窗口。
m_Blend.BlendOp=0; //theonlyBlendOpdefinedinWindows2000
m_Blend.BlendFlags=0; //nothingelseisspecial...
m_Blend.AlphaFormat=1; //...
m_Blend.SourceConstantAlpha=255;//AC_SRC_ALPHA

//窗体样式为x80000为层级窗体
DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE);
SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000);

//绘制内存位图
HDC hdcTemp=GetDC()->m_hDC;
m_hdcMemory=CreateCompatibleDC(hdcTemp);
HBITMAP hBitMap=CreateCompatibleBitmap(hdcTemp,500,500);
SelectObject(m_hdcMemory,hBitMap);

//使用GDI+载入PNG图片
HDC hdcScreen=::GetDC (m_hWnd);
RECT rct;
GetWindowRect(&rct);
POINT ptWinPos={rct.left,rct.top};
Graphics graph(m_hdcMemory);//GDI+中的类
Image image(L"bk.png",TRUE);//GDI+中的类
graph.DrawImage(&image,0,0,267,154);//后面两个参数要设置成跟图片一样大小,否则会失真

//使用UpdateLayerWindow进行窗口透明处理
HMODULE hFuncInst=LoadLibrary("User32.DLL");
typedef BOOL (WINAPI *MYFUNC)(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);
MYFUNC UpdateLayeredWindow;
UpdateLayeredWindow=(MYFUNC)GetProcAddress(hFuncInst,"UpdateLayeredWindow");
SIZE sizeWindow={267,154};
POINT ptSrc={0,0};
UpdateLayeredWindow( m_hWnd,hdcScreen,&ptWinPos,&sizeWindow,m_hdcMemory,&ptSrc,0,&m_Blend,2);


//把这个对话框加载到png图片的窗口上 是层粉色。。。。。。。//怎么回事

m_brush.CreateSolidBrush(RGB(255,0,255));//背景设置为粉红色

//SetWindowsLong将窗体设置为层级窗体
DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE);
SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle|0x80000);

//用SetLayeredWindowAttributes设置透明色为,它比UpdateLayeredWindow的使用要简单些
HMODULE hInst=LoadLibrary("User32.DLL");
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC SetLayeredWindowAttributes = NULL;
SetLayeredWindowAttributes=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
SetLayeredWindowAttributes(this->GetSafeHwnd(),0xff00ff,0,1);
FreeLibrary(hInst);

[解决办法]
SetLayeredWindowAttributes(this->GetSafeHwnd(),0xff00ff,0,1);

0xff00ff 是粉色
lz

读书人网 >VC/MFC

热点推荐