次のようにウィンドウクラスを登録します。
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
ですか?
誰かがそれを機能させる方法を知っていますか?
みんなありがとう