0

我想使用 c# 或 vc++ 使任何应用程序窗口而不是其内容透明。例如,如果我打开我的计算机,那么它会使该窗口对我的应用程序而不是文件夹透明。

4

2 回答 2

1

设置表单属性

this.BackColor = System.Drawing.Color.Lime;
this.TransparencyKey = System.Drawing.Color.Lime;
于 2012-07-06T13:31:47.097 回答
0

对谷歌:

http://www.intowindows.com/make-windows-7-transparent-with-system-transparency-tool/

您可以在 Windows 7 中轻松完成此操作,无需代码。对于 Win 200/XP,再次到 Google 机器:

http://www.codeproject.com/Articles/4473/Making-any-application-transparent-in-Windows-2000

布尔 m_b 跟踪;// 当鼠标被跟踪时为真 HWND m_hCurrWnd; // 处理 // 鼠标最后出现的窗口 HCURSOR m_hCursor; // 魔杖光标

// 全局定义 typedef BOOL (WINAPI *lpfn) (HWND hWnd, COLORREF cr, BYTE bAlpha, DWORD dwFlags); lpfn g_pSetLayeredWindowAttributes;

BOOL CWinTransDlg::OnInitDialog() { .... // 获取 SetLayeredWindowAttributes 的函数指针 // 在 User32.dll HMODULE hUser32 = GetModuleHandle(_T("USER32.DLL")); g_pSetLayeredWindowAttributes = (lpfn)GetProcAddress(hUser32, "SetLayeredWindowAttributes"); if (g_pSetLayeredWindowAttributes == NULL) AfxMessageBox ("这个版本的 Windows 不支持分层", MB_ICONEXCLAMATION);

//  Load the wand cursor
HINSTANCE hInstResource = AfxFindResourceHandle(
     MAKEINTRESOURCE(IDC_WAND), RT_GROUP_CURSOR);
m_hCursor = ::LoadCursor( hInstResource, MAKEINTRESOURCE(IDC_WAND) );
... }

void CWinTransDlg::OnLButtonDown(UINT nFlags, CPoint point) { ... SetCapture(); // 使鼠标移动事件 // 被定向到这个窗口 m_hCurrWnd = NULL; // 目前没有要透明的窗口 m_bTracking = true; // 设置跟踪标志 ::SetCursor(m_hCursor); // 将鼠标指针变成魔杖光标 ... }

void CWinTransDlg::OnMouseMove(UINT nFlags, CPoint point) { ... if (m_bTracking) { ... // 将鼠标坐标转换为屏幕 ClientToScreen(&point); ... // 获取鼠标坐标处的窗口 m_hCurrWnd = ::WindowFromPoint(point); ... // 显示窗口的详细信息,如类、标题等 ... } ... }

void CWinTransDlg::OnLButtonUp(UINT nFlags, CPoint point) { ... // 停止跟踪鼠标 ReleaseCapture(); m_bTracking = 假;

//  If the window under the mouse is not of this 
//  application we toggle its
//  layer style flag and apply the alpha as set by the slider control
if (g_pSetLayeredWindowAttributes && m_hCurrWnd != m_hWnd)
{
    ::SetWindowLong(m_hCurrWnd, GWL_EXSTYLE,
                    GetWindowLong(m_hCurrWnd, 
                    GWL_EXSTYLE) ^ WS_EX_LAYERED);
    g_pSetLayeredWindowAttributes(m_hCurrWnd, 0,
                    (BYTE)m_slider.GetPos(), LWA_ALPHA);

    ::RedrawWindow(m_hCurrWnd, NULL, NULL,
                   RDW_ERASE | RDW_INVALIDATE | 
                   RDW_FRAME | RDW_ALLCHILDREN);
}
... }
于 2012-07-06T13:30:18.790 回答