想实现类似QQ宠物那种,一个应用程序只有一个小企鹅 请问具体思路和代码是怎样的?

解决方案 »

  1.   

    透明可以使用 AlphaBlend API
    整个窗体也可以使用 SetLayeredWindowAttributes  API
    不过,这个API是2000以后的,98等不能使用
      

  2.   

    创建一个对话框,border样式改为none
    再SetWindowRgn设置对话框的外型,最后贴图
      

  3.   

    SetWindowRgn这个不是mfc的么,我试了下,好像不能用于普通的windows程序我在render函数中这样写,窗口看上去好像透明了,但是却使劲的闪,请问如何解决窗口闪呢? DWORD BACK_COLOR = RGB( 255,255,0 );
    g_DDraw.FillColor( g_DDraw.GetBackSurface(), BACK_COLOR, NULL ); HWND hWnd = NULL;
    hWnd = g_App.GetWindow(); SetWindowLong(hWnd,GWL_EXSTYLE,
    GetWindowLong(hWnd,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(hWnd,BACK_COLOR,0,2); 
    FreeLibrary(hInst);
    } g_DDraw.Flip( &g_App.GetWinRect() );
      

  4.   

    render里先FillColor然后再画图,这不找闪呢么。
      

  5.   

    额,试了网上说的好多法方,都不能,哪位大侠能给我分完整的可以运行的代码啊,谢了
    [email protected]
      

  6.   

    我每次画图时都先fillcolor,再显示,这样的话,我每次显示的东西都一样,中间没有显示空白,为啥会闪能说的具体点嘛?
      

  7.   

    其实就是以图片形状显示窗口.在Initdialog中:
    CDC* pDC;
    CDC memDC;
    CBitmap cBitmap;
    COLORREF col;
    CRect rect;
    int x,y;
    CRgn Rgn,rgn;
    pDC = GetDC();
    GetWindowRect(&rect);
    cBitmap.LoadBitmap(IDB_BITMAP1);
    memDC.CreateCompatibleDC(pDC);
    memDC.SelectObject(&cBitmap);
    Rgn.CreateRectRgn(0,0,rect.Width(),rect.Height());
    for(x=0;x<rect.Width();x++)
    {
    for(y=0;y<rect.Height();y++)
    {
    col=memDC.GetPixel(x,y);
    if(col==RGB(255,255,255))
    {
    rgn.CreateRectRgn(x,y,x+1,y+1);
    Rgn.CombineRgn(&Rgn,&rgn,RGN_XOR);
    rgn.DeleteObject();
    }
    }
    }
    SetWindowRgn((HRGN)Rgn,true);
    ReleaseDC(pDC);IDB_BITMAP1是不规则的图形.