Изменение стиля диалога при создании, чтобы переопределить то, что в шаблоне .RC - PullRequest
3 голосов
/ 03 июня 2010

У меня есть небольшой диалог, который я создал с помощью Resource Editor в VS2005. Он будет использоваться как дочерний диалог другого диалога двумя способами ... либо как дочерний элемент, который находится в верхней части диалогового окна, как пользовательский элемент управления, либо как всплывающее окно, которое может выходить за границы родительского окна. , Если я изменяю один стиль в файле RC, оба они работают как положено - просто замените WS_POPUP на WS_CHILD для переключения:

IDD_WIDGET DIALOGEX 0, 0, 221, 78
STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CONTROL | WS_POPUP | WS_BORDER
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_STATICEDGE
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    PUSHBUTTON      "Pre&view",IDC_ACTION_PREVIEW,64,59,50,15
    PUSHBUTTON      "M&ore",IDC_ACTION_MORE,115,59,50,15
    PUSHBUTTON      "S&elect",IDC_ACTION_SELECT,168,59,50,15
END

Проблема в том, что я хочу иметь возможность выбрать поведение при создании дочернего диалога во время выполнения в качестве своего рода структуры типа виджета, например, переопределение стиля файла RC

Я пытался:

BOOL CMyDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    m_Widget.Create(IDD_WIDGET,this);
    DWORD oldstyle = m_Widget.GetStyle();
    m_Widget.ModifyStyle(WS_POPUP,WS_CHILD);
    DWORD newstyle = m_Widget.GetStyle();
}

Но я не вижу никакой разницы, кроме того, что результат GetStyle изменяется с 0x8400044C на 0x4400044C ... дочерний диалог виджета запускается невидимым, но когда я его показываю, он сохраняет поведение WS_POPUP. .

Что не так, и как это можно исправить?

Как предполагает Бен, мне интересно, не может ли это быть стиль, который можно изменить после , когда окно создано, но проблема в том, как перехватить структуру шаблона диалога и изменить стиль, прежде чем он будет создан. используется для создания окна?

1 Ответ

1 голос
/ 03 июня 2010

Я нашел эту статью для вас: текст ссылки

Похоже, InitDialog слишком поздно, чтобы изменить стиль. В этой ссылке есть пример того, как это сделать.

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