现在很多播放器都有这个功能 这个是如何实现的呢?

解决方案 »

  1.   

    直接在桌面窗口TEXT输出歌词,VC里可以直接获取桌面窗口的句柄
      

  2.   

    那就是个dialog。半透明的而已。
      

  3.   

    应该不是直接在桌面窗口TEXT输出歌词,最新的千千静听我用着呢,那个效果用这种方法感觉不太好。
    因为如果只是简单输出到桌面DC,那么其它程序在刷新时,可能会破坏这种输出,除非不断的高速刷新来掩盖。一般采用半透明窗口或异形窗口,然后加上鼠标透过效果,也就是鼠标消息直接透过该歌词窗口,被下面所接收。我曾玩过这,不过现在忘的差不多了。
      

  4.   

    要用到gdi+ 的半透明窗口
    gdi 只能透明 边缘锯齿会很明显
      

  5.   

    http://topic.csdn.net/u/20100113/19/132ca784-c929-4111-b4ed-9fee84eac0fc.html?seed=1246269624&r=62703821#r_62703821
      

  6.   

    1. 放一个半透明的窗口
    2 将窗口钉在桌面上将窗口定在桌面上的方法DWORD dwStyle        = 0;
        HWND hDesktop        = NULL;
        CWnd* pWndDesktop    = NULL;
            
        // hWnd 半透明对话框的句柄
            dwStyle = GetWindowLong( hWnd, GWL_STYLE);        hDesktop = ::FindWindow( _T("Progman"), NULL);            ::SetParent( hWnd, hDesktop);        
      

  7.   

    用spy++ 看一下不就知道他们的实现方法了, 具体实现的话2种方法都可以,直接TextOut需要Hook一些gdi函数,用透明窗口需要处理一些鼠标和窗口置顶操作
      

  8.   

    spy++:class:DeskLrcCtrlClass
    caption:"DeskLrcCtrl"会不会是用置顶透明窗口写的窗体 sdk 函数输出歌词。。没用TEXT。。呵呵 猜测而已。。
      

  9.   

    SetLayeredWindowAttributes 去谷歌查一下吧。。 
      

  10.   

    http://download.csdn.net/source/1998796
      

  11.   


    1.使用UpdateLayeredWindow实现半透明效果,这个网上很多,不多说2.将窗口置顶,这个更简单3.还可以添加鼠标透过,鼠标透过的技术网上我没找到资源,不过我自己原来乱编写实现过。给你点提示,就是把消息和窗口绘制分开,即让你现在的窗口即能存在,还能像正常不断绘制,本身却不接收消息,系统直接当它不存在。
    (这个方法是我自己想的,效果完全没问题,我原来编写的是一块半透明玻璃笼罩在桌面上,所有的窗口都在玻璃下显示,每个窗口都能正常的接收所有消息。但不知道正宗的鼠标透过技术是啥,有知道的发表一下啊)