none
Win8, 10下嵌入桌面窗口的所有文字透明而显示不清,怎样能使文字不透明? RRS feed

  • 问题

  • 我们开发的一个在Windows PC 上运行的软件,需在Windows系统桌面签入一些窗口(类似桌面便签),即点击‘显示桌面’时也能和桌面图标一样不隐藏。

    这个功能在 windows xp ,windows 7上运行正常,但在windows8,10上,嵌入桌面的窗口上文字会透明,无法看清如下图:

    图片请看:http://img.ask.csdn.net/upload/201601/27/1453888821_964037.png

    使用了这样的方法嵌入:

    public void SetDeskWindow(IntPtr hWin)
    {
        //win7 下是查找 Progman 窗口
        IntPtr hDeskTop = FindWindow("Progman", null);
        IntPtr hShellDll = IntPtr.Zero;
        hShellDll = FindWindowEx(hDeskTop, IntPtr.Zero, "SHELLDLL_DefVIew", null);
        // win8,10 需寻找 workerw 窗口,因有多个,需查找其下有 shelldll_defView 的if (hShellDll == IntPtr.Zero)
       if (hShellDll == IntPtr.Zero)
       {
          hDeskTop = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "WorkerW", null);
          while (hDeskTop != IntPtr.Zero)
         {
            hShellDll = FindWindowEx(hDeskTop, IntPtr.Zero, "SHELLDLL_DefView", null);
            if (hShellDll != IntPtr.Zero) break;
           hDeskTop = FindWindowEx(IntPtr.Zero, hDeskTop, "WorkerW", null);
          }
       }

       hDeskTop = FindWindowEx(hShellDll, IntPtr.Zero, "SysListView32", null);
       SetParent(hWin, hDeskTop);
    }

    在 win8,10 下,窗口时嵌入到“WorkerW”的子窗口‘SysListView32’下的,这样的窗口透明度很大,窗口、控件上的文字全透明。如果桌面背景颜色相近,基本无法看清。

    尝试过在控件、窗口上使用图片背景,图片不会透明,文字还是透明的。

    还尝试了使用 Graphics.DrawString() 绘制字符,但在DataGridView控件中,绘制的英文不透明,中文还是透明,在窗体绘制的中文倒也是不透明。而且像编辑、选中状态的单元格,textBox 中的字符,还是透明不清的。

    有没有什么好办法,可以在Win8、10的桌面上嵌入这样的窗口(点击显示桌面时也不隐藏),而使窗口中的文字不要透明?

    请指教,谢谢。

    2016年2月24日 16:15