tags:

views:

32

answers:

1

I have a little dialog I created using Resource Editor in VS2005. It's going to be used as a child dialog of another dialog, in 2 different ways... either as a child which sits on top of the dialog like a custom control, or as a popup which can move beyond the boundaries of the parent window. If I modify a single style in the RC file, both of these work as expected - simply substitute WS_POPUP for WS_CHILD to toggle:

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

The problem is, I want to be able to choose the behavior when creating the child dialog at run-time as a sort of widget type framework, e.g overriding the RC file style

I tried:

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();
}

But it makes no difference that I can see, other than that the result of GetStyle changes from 0x8400044C to 0x4400044C... the widget child-dialog starts invisible but when I show it, it retains the WS_POPUP behavior.

What's wrong, and how can it be fixed?

As Ben suggests, I wonder if this is not a style that can be changed after the window is created, but the problem then is how to intercept the dialog-template structure and modify the style before it's used to create the window?

+1  A: 

I found this article for you: link text

Looks like InitDialog is too late to change the style. There's an example of how to do it in this link.

Ben Burnett
This generates ASSERTS, and still doesn't work. Also, m_Widget.getStyle() returns 0 before Create(). I also wonder if this is not a style that can be changed after the window is created, but the problem then is perhaps how to intercept the dialog-template structure and modify the style before it's used.
John
Updated answer.
Ben Burnett
perfect, thanks!
John