首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2013-02-18 
把这个对话框加载到png图片的窗口上 是层粉色。。。。。。。//怎么回事//加载Png图片的窗口。m_Blend.BlendOp0 /

把这个对话框加载到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

热点排行