大家好。
我使用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引擎本身没有提供这些接口,唉,真是烦啊)。多谢各位鼎力相助

解决方案 »

  1.   

    你这个窗口是另外一个进程? 看看MSDNRes
    The SetWindowLong function fails if the window specified by the hWnd parameter does not belong to the same process as the calling thread.
      

  2.   

    windows有没有API可以将别的窗口的title栏去掉? 
    ----
    试试看ModifyStyle去掉WS_CAPTION
      

  3.   

    SetWindowLong(handle,GWL_EXSTYLE, GetWindowLong(handle,GWL_EXSTYLE) | 0x80000);
      

  4.   

    是另外一个进程。
    你说的对,msdn上说不是同一进程似乎不行。可是网上很多使用该函数,能够将其他进程的窗口透明化,而且我的程序也能将其他进程窗口透明(可偏偏就是这个panda窗口不行),不知道这个是怎么回事呢?