开发者

Changing a dialog's style at creation to override what's in the .RC template

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开发者_StackOverflow_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?


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜