Как вы можете перенести контроль на фронт в MFC? - PullRequest
15 голосов
/ 02 октября 2008

Как изменить Z-порядок элементов управления в MFC во время разработки - т.е. я не могу использовать SetWindowPos или сделать это во время выполнения - я хочу увидеть измененный z-порядок в конструкторе ( даже если мне придется напрямую редактировать код .rc).

У меня есть диалоговое окно MFC, в которое я добавляю элементы управления. Если между краями элементов управления есть совпадение, я хочу перенести один на другой. В Windows Forms или WPF и т. Д. Я могу перевести на передний план, отправить на задний план, переслать на пересылку, отправить назад. Я не нахожу эти параметры в MFC и не могу сказать, как он определяет, что находится впереди, так как только что добавленный элемент управления часто находится за элементом управления, который был там ранее. Как я могу манипулировать Z-порядком в MFC? Даже если мне придется напрямую манипулировать кодом файла .rc (т. Е. Запускать дизайнер в конце).

Ответы [ 7 ]

18 голосов
/ 22 апреля 2009

В Visual Studio 6.0 выполните следующие действия.

Открыть диалоговое окно (в режиме конструктора)

Нажмите Ctrl + D

Порядок табуляции будет показан для каждого элемента управления

Начните нажимать элементы управления в том порядке вкладок, который вы ожидаете увидеть во время выполнения (т. Е. Для элемента управления, на котором вы щелкаете первым, порядок вкладок будет установлен на 1 и т. Д.)

15 голосов
/ 02 октября 2008

Я думаю, что передний элемент управления будет последним элементом управления в файле rc. Другими словами, редактор диалогов будет рисовать каждый элемент управления, если он встречается сверху вниз в файле rc, перекрывая их при необходимости.

Вы можете отредактировать rc-файл, чтобы изменить их порядок, или вы можете изменить порядок вкладок в редакторе, что делает то же самое, поскольку порядок вкладок также устанавливается в зависимости от порядка элементов управления в файле. Насколько мне известно, MFC не предлагает никакого другого способа наложения перекрывающихся элементов управления во время разработки.

10 голосов
/ 02 октября 2008
GetDlgItem(IDC_MYCONTROL)->SetWindowPos(HWND_TOP,
                                        0, 0, 0, 0,
                                        SWP_NOMOVE | SWP_NOSIZE);
6 голосов
/ 02 октября 2008

На самом деле, если вы хотите сделать это в редакторе ресурсов, вы можете просто вырезать элемент, а затем вставить его обратно как быстрое и грязное решение. Просто Ctrl-X, затем Ctrl-V.

Редактирование файла RC также будет работать.

1 голос
/ 05 марта 2014
GetDlgItem(IDC_CONTROL1)->SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE)
1 голос
/ 02 октября 2008

Вы можете использовать CWnd :: SetWindowPos () для управления порядком Z ваших элементов управления, не меняя их положение в родительском окне.

0 голосов
/ 02 октября 2008

В редакторе ресурсов диалога MSVC 2005 есть возможность установить порядок табуляции. В MSVC 2005 он находится в меню Формат, порядок табуляции .

Порядок табуляции, отображаемый этим параметром меню, совпадает с порядком, в котором элементы управления записываются в файл ресурсов.

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