Когда внешнее окно перерисовывается, нарисованный вами прямоугольник исчезнет. Если вы хотите, чтобы прямоугольник не исчезал при обновлении окна, следуйте предложению @ llspectable.
Вы можете добавить стиль WS_EX_LAYERED , чтобы сделать окно многоуровневым.
Если если вы хотите сделать что-то за многослойным окном, вы можете добавить WS_EX_TRANSPARENT
для прозрачности.
Вот код, на который вы можете ссылаться.
#include <Windows.h>
#include <stdio.h>
#include <iostream>
using namespace std;
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
RECT rect;
switch (message)
{
case WM_PAINT:
{
hdc = BeginPaint(hwnd, &ps);
RECT rect = { 0, 0, 200, 200 };
HBRUSH blueBrush = CreateSolidBrush(RGB(0, 0, 255));
FillRect(hdc, &rect, blueBrush);
EndPaint(hwnd, &ps);
}
break;
case WM_SIZE:
{
HWND notepad = (HWND)0x00060BA6; //Test window
GetWindowRect(notepad, &rect);
float m = (200.0 / 1920.0);
float n = (200.0 / 1040.0);
int wh = (rect.right - rect.left) * m;
int ht = (rect.bottom - rect.top) * n;
int x = 100 * m;
int y = 100 * n;
SetWindowPos(hwnd, HWND_TOPMOST, x+rect.left, y+rect.top, wh, ht, SWP_SHOWWINDOW);
}
break;
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hwnd, message, wParam, lParam);
};
HINSTANCE hinst;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevinstance, PSTR szCmdLine, int iCmdShow) {
HWND hwnd;
hinst = GetModuleHandle(NULL);
// create a window class:
WNDCLASS wc = {};
wc.lpfnWndProc = WndProc;
wc.hInstance = hinst;
wc.lpszClassName = L"win32";
// register class with operating system:
RegisterClass(&wc);
// create and show window:
hwnd = CreateWindowEx(WS_EX_LAYERED| WS_EX_TRANSPARENT, L"win32", L"My program", WS_POPUP &~WS_BORDER, 0, 0, 0, 0, NULL, NULL, hinst, NULL);
SetLayeredWindowAttributes(hwnd, NULL, 255, LWA_ALPHA);
if (hwnd == NULL) {
return 0;
}
ShowWindow(hwnd, SW_SHOW);
MSG msg = {};
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Примечание: если вы хотите, чтобы многоуровневое окно вместе следовало определенному c внешнему окну, то вам необходимо обрабатывать сообщение WM_SIZE
отдельно. Если у вас есть другие вопросы, дайте мне знать.