@NSX

WINAPI Смена стиля с CHILD на родительский или как вынести дочернее окно за пределы родителя?

Создаем окно в главном окне.
g1_r1_des = CreateWindowEx(0, "Window1", "Окно 1",
                               WS_CHILD|WS_CLIPSIBLINGS,
                               350,
                               0,
                               1000, 650,
                               firstdes,
                               NULL,
                               hThisInstance,
                               NULL);

отображаем окно

case WM_COMMAND:
            switch (LOWORD(wparam))
            {
                case BTN_G1_R1:
                SetWindowPos(g1_r1_des, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); // задаем расположение выше всех окон, остальное по default (настройки  при создании окна)
                ShowWindow(g1_r1_des, SW_SHOWNORMAL); // показываем окно в координатах и размерах по default (настройки  при создании окна)
                UpdateWindow(g1_r1_des);
                break;


bc62c1e739d7439b9f506422ea692db3.png

Делаем смену стиля с WS_CHILD на WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN по чекбоксу

case WM_COMMAND:
        {
            BOOL checked1 = IsDlgButtonChecked(hwnd, ID_CHECKBOX1);
 
            if (LOWORD(wparam) == ID_CHECKBOX1) {
                if (checked1) {
                    CheckDlgButton(hwnd, ID_CHECKBOX1, BST_UNCHECKED);
 
                    SetWindowLong (g1_r1_des,GWL_STYLE,(LONG) WS_CHILD|WS_CLIPSIBLINGS);
                    SetWindowPos(g1_r1_des, HWND_TOP,350, 0, 1000, 650, SWP_SHOWWINDOW);
 
                    UpdateWindow(g1_r1_des);
                }
                else {
                    CheckDlgButton(hwnd, ID_CHECKBOX1, BST_CHECKED);
 
                    SetWindowLong (g1_r1_des,GWL_STYLE,(LONG) WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN);
                    ShowWindow(g1_r1_des, SW_SHOW);
                    UpdateWindow(g1_r1_des);
                }
            }
 
            break;
        }


82e597e2499d40ff9b15844fe8a92717.png

Окно не покидает пределы родительского окна. Как это исправить?
Если создать отдельное окно изначально а затем сменить стиль на CHILD то окно превратится в дочернее но не вернется в родительское а будет висеть посреди экрана вне зависимости от родительского.
  • Вопрос задан
  • 295 просмотров
Решения вопроса 1
@NSX Автор вопроса
Понял что это невозможно, тем более появилась нужда в меню.. поэтому проще создать второе окно и переназначить дескриптор дочернего, по галке второе окно HIDE or SHOW.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Sumor
Для выноса элемента за пределы родительского у него должен быть стиль WS_POPUP вместо WS_CHILD.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы