在网上看到
//加入WS_EX_LAYERED扩展属性
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)fun(this->GetSafeHwnd(),0,128,2);
FreeLibrary(hInst);
}
不过这个只是针对于对话框的。有没有针对于static 、button的呢?我试过将这段代码加入static 、button的重绘类中,都没有达到想要的效果。
//加入WS_EX_LAYERED扩展属性
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)fun(this->GetSafeHwnd(),0,128,2);
FreeLibrary(hInst);
}
不过这个只是针对于对话框的。有没有针对于static 、button的呢?我试过将这段代码加入static 、button的重绘类中,都没有达到想要的效果。
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
这里的句柄改为控件的句柄试试,通过this获取的句柄是对话框的不行
二是自绘控件在具体的控件中使用上面的代码做主要是控件也是窗体,应该可以的
可能是我实现的地方不对吧。static 、button我都试过了。
第一种方法比较麻烦,因为这个控件我想嵌入到另外一个Button或是static里面使用。通过鼠标移动,位置是可以变化的。
如果不行,有没有利用pdc绘制半透明区域的方法?
无论是create onpain 里面都不行。
基本上,想实现LZ的要求,只能自己画。
自绘的工作在提问的时候就已经作完了,但是不知道用什么方法来实现某个区域半透明。
或者用AlphaBlend这个函数