Transparent window and win32 text

I am trying to make a fullscreen transparent borderless window with text that perfectly displays on top of it. The text background should be transparent, but not the actual font. The problem is that I can only see TextOut if I do not do SetWindowRgn. I have no idea what I'm doing wrong :(

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, 0, 0);
   SetWindowRgn(hWnd, GGG, false);

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

   DeleteObject(GGG);

   return TRUE;
}

    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);

    SetBkMode(hdc, TRANSPARENT);
    TextOut(hdc, 50, 50, L"MY TEXT", lstrlen(L"MY TEXT"));

    EndPaint(hWnd, &ps);
+5
source share
1 answer

Solved the following:

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;
+3
source

All Articles