是否可以使用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:\\Users\\DavidHall\\Documents\\bg.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
if (hBitmap != NULL)
{
hWndBackground = CreateWindow(L"STATIC", L"image box", WS_CHILD | WS_VISIBLE | SS_BITMAP, 0, 0, 100, 100, hDlg, (HMENU) 2000, NULL, NULL);
SendMessage(hWndBackground, STM_SETIMAGE, IMAGE_BITMAP, LPARAM(hBitmap));
}
// Create the label using CreateWindowEx
hfFont = CreateFont(20, 0, 0, 0, fontWeight, FALSE, FALSE, 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, NULL, (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,因爲文件大小非常小是該項目的必備條件 - 任何與WinAPI可執行文件大小相當的GUI框架建議都是值得歡迎的! –