Установка правильной позиции z дочернего окна - PullRequest
0 голосов
/ 02 июля 2018

У меня есть приложение, которое имеет главное окно. Я пишу DLL, который используется этим приложением. Я могу получить hwnd этого главного окна. То, что я хочу сделать, это добавить дочернее окно, которое будет вести себя как дочерний элемент главного окна - в основном быть прикрепленным к его верхнему углу. Я создал это дочернее окно, как эта форма в моей DLL:

WNDCLASSEX wc;
wc.hInstance = NULL;
wc.lpszClassName = "InjectedDLLWindowClass";
wc.lpfnWndProc = DLLWindowProc;
wc.style = CS_DBLCLKS;
wc.cbSize = sizeof(WNDCLASSEX);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.lpszMenuName = NULL;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
if (!RegisterClassEx(&wc))
    return 0;

gHwnd = CreateWindowEx(WS_EX_WINDOWEDGE , "InjectedDLLWindowClass", "InjectedDLLWindowClass", NULL, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, widgetHWND, NULL, NULL, NULL);
SetWindowLong(gHwnd, GWL_STYLE, 0); // to remove all borders

Я хотел получить сообщения WM_SIZING и WM_MOVING в моей дочерней функции DLLWindowProc и использовать функцию SetWindowPos, чтобы установить правильный размер и позицию для моего дочернего окна. Но так как его родительское окно, которое делает перемещение и изменение размера, никаких сообщений не прибыло. Я попытался установить периодический таймер, который будет обновлять размер моего дочернего окна, положение и порядок окон, но это только приводило к тому, что мое окно постоянно становилось активным и захватывало управление. Поэтому мой вопрос - как мне прикрепить дочернее окно к родительскому окну без доступа к родительскому окну WinProc?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...