大家好。
我使用panda3d引擎(一个3维引擎)做了一个窗口在windows上(窗口中只有一个小人在活动,背景是红色),我用VC写了一个程序,试图使得红色背景全不透明,只显示那个小人,可是失败了。
代码如下:
CWnd *pWnd = CWnd::FindWindow(NULL, _T("Panda"));
HWND handle = pWnd->GetSafeHwnd(); SetWindowLong(handle,GWL_EXSTYLE, GetWindowLong(handle,GWL_EXSTYLE)^0x80000);
DWORD err = GetLastError(); 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(handle, RGB(255,0,0), 0, 1); //LWA_ALPHA(2) LWA_COLORKEY(1) RGB(204,232,207)
err = GetLastError();
FreeLibrary(hInst);
}
通过GetLastError检查,也没有错误,可是那个panda的窗口还是原来的样子,并没有红色透明,请问各位大侠,有可能是什么原因呢?
另外,windows有没有API可以将别的窗口的title栏去掉? 我还想将panda窗口没有标题栏(panda引擎本身没有提供这些接口,唉,真是烦啊)。多谢各位鼎力相助
我使用panda3d引擎(一个3维引擎)做了一个窗口在windows上(窗口中只有一个小人在活动,背景是红色),我用VC写了一个程序,试图使得红色背景全不透明,只显示那个小人,可是失败了。
代码如下:
CWnd *pWnd = CWnd::FindWindow(NULL, _T("Panda"));
HWND handle = pWnd->GetSafeHwnd(); SetWindowLong(handle,GWL_EXSTYLE, GetWindowLong(handle,GWL_EXSTYLE)^0x80000);
DWORD err = GetLastError(); 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(handle, RGB(255,0,0), 0, 1); //LWA_ALPHA(2) LWA_COLORKEY(1) RGB(204,232,207)
err = GetLastError();
FreeLibrary(hInst);
}
通过GetLastError检查,也没有错误,可是那个panda的窗口还是原来的样子,并没有红色透明,请问各位大侠,有可能是什么原因呢?
另外,windows有没有API可以将别的窗口的title栏去掉? 我还想将panda窗口没有标题栏(panda引擎本身没有提供这些接口,唉,真是烦啊)。多谢各位鼎力相助
The SetWindowLong function fails if the window specified by the hWnd parameter does not belong to the same process as the calling thread.
----
试试看ModifyStyle去掉WS_CAPTION
你说的对,msdn上说不是同一进程似乎不行。可是网上很多使用该函数,能够将其他进程的窗口透明化,而且我的程序也能将其他进程窗口透明(可偏偏就是这个panda窗口不行),不知道这个是怎么回事呢?