加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用WinAPI创建具有透明背景的文本标签

发布时间:2020-12-16 09:36:57 所属栏目:百科 来源:网络整理
导读:是否可以仅使用WinAPI命令在窗口中创建具有透明背景的标签? 我正在尝试将图像添加到对话窗口,该窗口将用作背景图像,然后在该图像上显示文本.到目前为止,我尝试过的所有内容都在背景图像的顶部显示了文本标签,并在其周围绘制了一个灰色矩形. 这是我的代码到
是否可以仅使用WinAPI命令在窗口中创建具有透明背景的标签?

我正在尝试将图像添加到对话窗口,该窗口将用作背景图像,然后在该图像上显示文本.到目前为止,我尝试过的所有内容都在背景图像的顶部显示了文本标签,并在其周围绘制了一个灰色矩形.

这是我的代码到目前为止的一个示例(显示对话框的整个消息处理程序):

INT_PTR CALLBACK OfferWindowProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{       
    HWND hWndBackground;
    HWND hWndLabel;
    HBRUSH hLabelBackColour = NULL;
      HFONT hfFont;
      HWND hWndTitleLabel;
    HDC hdcStatic = NULL;

    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:             

        //Load the background image
        HANDLE hBitmap;
        hBitmap = LoadImage(NULL,L"C:UsersDavidHallDocumentsbg.bmp",IMAGE_BITMAP,LR_LOADFROMFILE);
        if (hBitmap != NULL)
        {
            hWndBackground = CreateWindow(L"STATIC",L"image box",WS_CHILD | WS_VISIBLE | SS_BITMAP,100,hDlg,(HMENU) 2000,NULL,NULL);          
            SendMessage(hWndBackground,STM_SETIMAGE,LPARAM(hBitmap));
        }           

        // Create the label using CreateWindowEx
        hfFont = CreateFont(20,fontWeight,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,DEFAULT_PITCH,L"Verdana");

        hWndTitleLabel = CreateWindowEx( WS_EX_TRANSPARENT,L"STATIC",L"",WS_CHILD | WS_VISIBLE | SS_LEFT | WS_SYSMENU,xPos,yPos,width,height,hwnd,(HMENU) id,hInst,NULL);           

        SendMessage(hWndTitleLabel,WM_SETTEXT,(LPARAM) labelText.c_str());

        SendMessage(hWndTitleLabel,WM_SETFONT,(WPARAM)hfFont,NULL);  

        return (INT_PTR)TRUE;   

    case WM_CLOSE:
        EndDialog(hDlg,LOWORD(wParam));    

        // Delete the brush - is that correct?
        DeleteObject(hLabelBackColour);
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg,LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    default:
        break;
    }
    return (INT_PTR)FALSE;
}

我尝试了各种组合,包括:

> SetLayeredWindowAttributes
> SetBkMode(hdc,TRANSPARENT)
>处理WM_CTLCOLORSTATIC消息

解决方法

我发现了一些似乎有效的东西,但由于我对纯WinAPI编程很陌生,这可能是非常糟糕的练习,我不知道!

我正在处理WM_CTLCOLORSTATIC消息,如下所示:

case WM_CTLCOLORSTATIC:

    hdcStatic = (HDC) wParam; 
    SetTextColor(hdcStatic,RGB(0,0));    
    SetBkMode (hdcStatic,TRANSPARENT);

    return (LRESULT)GetStockObject(NULL_BRUSH);

这样的效果就是我的标签出现在我的图像上,并带有透明背景.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读