Win32_GDI_绘制文字路径透明窗口


效果图:

 前面字体是个透明窗口

后面是桌面背景

代码实现:

void MyMainDialog::TextPathWindow(LPCTSTR lpShowText)
{
    HDC hdc = GetDC(m_hWnd);

    // 创建字体,并选入当前DC中
    HFONT hfont = CreateFont(TEXT("华文行楷"), -80,0,900);
    HGDIOBJ hOldFont = SelectObject(hdc, hfont);
    
    // 路径的开始
    BeginPath(hdc);

    SetBkMode(hdc,TRANSPARENT);    // 设置背景透明
    TextOut(hdc,18, 18, m_szShowText,lstrlen(m_szShowText));    // 输出文本

    EndPath(hdc);    //路径的结束

    HRGN hrgn;
    hrgn = PathToRegion(hdc);    // 根据路径创建HRNG    
    SetWindowRgn(m_hWnd, hrgn, TRUE);    // 设置窗口的HRNG

    // 删除字体对象
    DeleteObject(SelectObject(hdc, hOldFont));
}


// 在WM_INITDIALOG消息中加入

LRESULT MyMainDialog::OnInitDialog(LPARAM lParam)
{
    // 添加消息响应代码

    SetTimer(m_hWnd, 9999, 500, nullptr);

    m_szShowText = new TCHAR[100];
    lstrcpy(m_szShowText, TEXT("正在回到原点"));
    TextPathWindow(m_szShowText);

    return 0;
}

// 在WM_TIMER消息中添加

LRESULT MyMainDialog::OnTimer(WPARAM wParam)
{
    // 添加消息响应代码
    lstrcat(m_szShowText, TEXT("."));
    if (lstrlen(m_szShowText) > 10)
        lstrcpy(m_szShowText, TEXT("正在回到原点"));

    TextPathWindow(m_szShowText);

    return 0;
}