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

Google 宛:

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

bool m_bTracking; // マウスが追跡されている場合は // true 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 = false;

//  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 に答える