我註冊窗口類是這樣的:窗口透明的客戶區
WNDCLASSEX wctt;
wctt.cbSize = sizeof(WNDCLASSEX);
wctt.style = CS_DBLCLKS;
wctt.lpfnWndProc = WndProcTooltip;
wctt.cbClsExtra = 0;
wctt.cbWndExtra = 0;
wctt.hInstance = m_hAppInstance;
wctt.hIcon = NULL;
wctt.hCursor = LoadCursor(NULL, IDC_SIZE);
wctt.hbrBackground = NULL;
wctt.lpszMenuName = NULL;
wctt.lpszClassName = _T("myWindow");
wctt.hIconSm = NULL;
RegisterClassEx(&wctt)
正如你可以看到我使用wctt.hbrBackground = NULL
;所以它將沒有背景。
窗口創建這樣的:
::CreateWindowEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW,
_T("myWindow"),
NULL,
WS_VISIBLE | WS_POPUP,
50,
50,
150,
100,
NULL,
NULL,
m_hAppInstance,
NULL);
在油漆部分,我畫圖標的窗口:
PAINTSTRUCT ps;
HDC hdc;
BITMAP bitmap;
ICONINFO iconinfo;
hdc = ::BeginPaint(hWnd, &ps);
::SetBkMode(hdc,TRANSPARENT);
::GetIconInfo(localIcon, &iconinfo);
::GetObject(iconinfo.hbmColor, sizeof(bitmap), &bitmap);
::DeleteObject(iconinfo.hbmColor);
::DeleteObject(iconinfo.hbmMask);
::DrawIconEx(hdc, 0,0, localIcon, bitmap.bmWidth, bitmap.bmHeight, 0, NULL, DI_NORMAL);
的圖標大小比窗口大小小,我上背景彈出窗口下面的窗口中的當前視圖。
但現在當我移動窗口(或最小化彈出窗口下方的窗口)時,背景不會改變。
我試圖讓一個計時器,每次做流動:再次打印功能運行
RECT rcClient;
GetClientRect(hWnd, &rcClient);
InvalidateRect(hWnd,&rcClient,TRUE);
這使得但是圖標的背景沒有改變。
我應該怎麼做WM_ERASEBKGND
?
任何人有任何想法如何使其工作?
感謝, 傢伙
請注意,如果你調用'InvalidateRect'用'NULL'爲矩形,它無效整個客戶端RECT –
是的,我知道,我想所有的客戶區無效......這不就是這樣去做吧? –
這個:'InvalidateRect(hWnd,NULL,TRUE)'相當於這個:'RECT rcClient; GetClientRect(hWnd,&rcClient); InvalidateRect(HWND,&RC客戶機,TRUE);'。沒有錯,兩者都是一樣的... –