не могу изменить порядок элементов управления mfc

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

Я попытался изменить управление вкладкой с помощью Ctrl + d, но это ничего не изменило. Я также пытался использовать SetWindowPos для перемещения вверх или вниз, но это ничего не изменило.

Я заметил, что если я нажму на кнопку, она появится на переднем плане, как я хочу. Есть ли способ «щелкнуть» все элементы управления в начале? я что-то пропустил, чтобы вывести управление наверх?


person David    schedule 12.06.2013    source источник
comment
Вы уверены, что справились с правильным порядком с помощью Ctrl-D? Вы можете напрямую отредактировать файл .rc, чтобы надоедливый элемент управления был первым в списке.   -  person Balog Pal    schedule 12.06.2013
comment
Я пробовал много вариантов с помощью Ctrl + D, но ничего не изменилось.   -  person David    schedule 12.06.2013
comment
Я попытался отредактировать файл rc напрямую, и это сработало!!! Текс :-)   -  person David    schedule 13.06.2013


Ответы (2)


Если вам нужно изменить цвет фона диалогового окна, вам нужно обработать сообщение WM_CTLCOLORDLG и вернуть дескриптор кисти (если кисть не является стандартным объектом, убедитесь, что вы удалили кисть после закрытия диалогового окна) -- или , вы можете обработать сообщение WM_ERASEBKGND и сотрите фон самостоятельно.

person Edward Clements    schedule 12.06.2013
comment
Я уже попробовал 2 метода, и ничего не произошло. Я предпочитаю понимать, как изменить порядок элементов управления - person David; 12.06.2013
comment
Если вы хотите изменить порядок элементов управления, я бы порекомендовал то, что Балог Пал сказал выше: отредактируйте файл .rc напрямую и переместите элемент управления изображением в качестве первого элемента управления диалога. Однако я попытался обработать сообщение WM_CTLCOLORDLG в простом диалоговом окне «О программе», и оно работает! CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { m_hbrBackground = CreateSolidBrush(RGB(255, 0, 0)); } CAboutDlg::~CAboutDlg() { DeleteObject(m_hbrBackground); } в WindowProc: if (message == WM_CTLCOLORDLG) return (LRESULT) m_hbrBackground; - person Edward Clements; 12.06.2013
comment
Статья MSDN об изменении порядка табуляции элементов управления - person Edward Clements; 12.06.2013
comment
Я знаю, как изменить порядок табуляции. Мне нужно изменить порядок z элементов управления. Я пытался изменить порядок табуляции, потому что я читал, что таким образом я также меняю порядок z - person David; 12.06.2013

Я попытался изменить управление вкладкой с помощью Ctrl + D, но это ничего не изменило. Я также пытался использовать SetWindowPos для перемещения вверх или вниз, но это ничего не изменило.

Ctrl+D переводит вас в режим изменения порядка, однако есть более надежный способ проверки. Шаблон диалога находится в текстовом виде в файле .RC, где вы можете просмотреть порядок управления с помощью текстового редактора и вручную отсортировать строки так, как вам удобно. Это будет порядок создания элемента управления и порядок табуляции. Иногда даже проще изменить порядок элементов управления таким образом.

Более того, когда ваше приложение запущено, инструмент Spy++ SDK может перечислять окна и снова дает вам порядок окон для проверки.

SetWindowPos с правильными аргументами также изменяет Z-порядок элементов управления во время выполнения.

person Roman R.    schedule 12.07.2013