2 sunnyli3166 sunnyli3166 于 2014.12.02 09:34 提问

MFC view窗口透明设置

基于MFC单文档程序,设置2个工具按钮,一个使画图背景为默认模式,另一个使view窗口透明直接在桌面作图。。。默认启动时只显示工具栏

我的做法是开始设置 view Precreatewindow cs

cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW |CS_VREDRAW);// view背景透明 只显示工具栏。这个功能Ok。

onbutton1: 加载一个类似默认背景白色的图片。。这个功能也ok。

Onbutton2: 要怎么去实现透明,实现桌面画图呢。??

运行后要在button1 button2切换时窗口也切换。。

各位大侠指导下啊,,我是新手。。。万分感激!!!

1个回答

save4me
save4me   Ds   Rxr 2014.12.02 10:43
已采纳

试一下MFC屏幕标记之透明窗体(一)
//点击按钮实现窗口透明函数
void CScreenMarkerDlg::OnButtonTransparent()
{
HINSTANCE hInst = GetModuleHandle("User32.dll");
if (hInst)
{
//获取模块里的函数
BOOL (WINAPI SetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD)=
(BOOL (WINAPI
) (HWND,COLORREF,BYTE,DWORD))GetProcAddress(hInst,"SetLayeredWindowAttributes");
//函数指针正确获取
if(SetLayeredWindowAttributes)
{
//让窗口具透明的特性
::SetWindowLong(m_hWnd,GWL_EXSTYLE, GetWindowLong(m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);

//设置窗口透明。第4参数为1时,第二个参数是被透明的颜色
SetLayeredWindowAttributes(m_hWnd,GetSysColor(COLOR_3DFACE),0,0x1);
}
FreeLibrary(hInst); //释放调模块句柄
}
}


sunnyli3166
sunnyli3166 我用etWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000); HINSTANCE hins=LoadLibrary("User32.dll"); if(hins) { typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD); MYFUNC fun =NULL; //眔SetLayeredWindowAttributeㄧ?? fun=(MYFUNC)GetProcAddress(hins,"SetLayeredWindowAttributes"); if(fun) fun(this->GetSafeHwnd(),0,128,2);//材???ぃ璶眔び0碞ぃЧ硓 FreeLibrary(hins); }这样写,之后效果跟我开始的一样,就是点了button1 后,点Button1实现不了透明效果啊
大约 3 年之前 回复
sunnyli3166
sunnyli3166 回复
大约 3 年之前 回复
sunnyli3166
sunnyli3166 谢谢你的回复啊 ,感激,但是加进去报错啊。。是BOOL 哪里,,error C2143: syntax error : missing ')' before '__stdcall'
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!