Winapi 透明的win32窗口和文本

Winapi 透明的win32窗口和文本,winapi,text,transparent,Winapi,Text,Transparent,我试图使全屏透明无边框窗口的文本显示完美的顶部。文本背景应该是透明的,但不是实际的字体。问题是,当我不设置WindowRGN时,我只能看到TextOut显示。我不知道我做错了什么:( 这样解决这个问题: BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; DWORD Flags1 = WS_EX_COMPOSITED | WS_EX_LAYERED | WS_

我试图使全屏透明无边框窗口的文本显示完美的顶部。文本背景应该是透明的,但不是实际的字体。问题是,当我不设置WindowRGN时,我只能看到TextOut显示。我不知道我做错了什么:(

这样解决这个问题:

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
   hInst = hInstance;

   DWORD Flags1 = WS_EX_COMPOSITED | WS_EX_LAYERED | WS_EX_NOACTIVATE | WS_EX_TOPMOST | WS_EX_TRANSPARENT;
   DWORD Flags2 = WS_POPUP;

   hWnd = CreateWindowEx(Flags1, szWindowClass, szTitle, Flags2, 0, 0, 1920, 1200, 0, 0, hInstance, 0);

   if(!hWnd)return FALSE;

   HRGN GGG = CreateRectRgn(0, 0, 1920, 1200);
   InvertRgn(GetDC(hWnd), GGG);
   SetWindowRgn(hWnd, GGG, false);

   COLORREF RRR = RGB(255, 0, 255);
   SetLayeredWindowAttributes(hWnd, RRR, (BYTE)0, LWA_COLORKEY);

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   DeleteObject(GGG);

   return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    RECT rect;

    switch (message)
    {
    case WM_ERASEBKGND:

        GetClientRect(hWnd, &rect);
        FillRect((HDC)wParam, &rect, CreateSolidBrush(RGB(255, 0, 255)));

        break;

是的,确实很难看到一个0 x 0像素的窗口。将sane值传递给CreateRectRgn()。我尝试了0、0、1920、1200,但现在没有任何东西是不可见的,我希望整个屏幕不可见:(@user1040769你能在Github上添加一个带边框的透明窗口(这样我们可以看到窗口的透明位置)吗和一个子窗口(如按钮)谢谢?这样我们就可以了解您是如何完成这项任务的。请提供链接。非常感谢!因为
SetWindowRgn
函数说:成功调用SetWindowRgn后,系统拥有由区域句柄hRgn指定的区域。系统不复制该区域。因此,您不应使用该区域句柄进行任何进一步的函数调用。特别是,不要删除该区域句柄。当不再需要该区域句柄时,系统将删除该区域句柄。“你违反了合同。
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
   hInst = hInstance;

   DWORD Flags1 = WS_EX_COMPOSITED | WS_EX_LAYERED | WS_EX_NOACTIVATE | WS_EX_TOPMOST | WS_EX_TRANSPARENT;
   DWORD Flags2 = WS_POPUP;

   hWnd = CreateWindowEx(Flags1, szWindowClass, szTitle, Flags2, 0, 0, 1920, 1200, 0, 0, hInstance, 0);

   if(!hWnd)return FALSE;

   HRGN GGG = CreateRectRgn(0, 0, 1920, 1200);
   InvertRgn(GetDC(hWnd), GGG);
   SetWindowRgn(hWnd, GGG, false);

   COLORREF RRR = RGB(255, 0, 255);
   SetLayeredWindowAttributes(hWnd, RRR, (BYTE)0, LWA_COLORKEY);

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   DeleteObject(GGG);

   return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    RECT rect;

    switch (message)
    {
    case WM_ERASEBKGND:

        GetClientRect(hWnd, &rect);
        FillRect((HDC)wParam, &rect, CreateSolidBrush(RGB(255, 0, 255)));

        break;