我在 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 行为。出了什么问题,如何解决?
正如 Ben 建议的那样,我想知道这是否不是在创建窗口后可以更改的样式,但问题是如何在用于创建窗口之前拦截对话框模板结构并修改样式?
最佳答案
我为你找到了这篇文章:link text
看起来 InitDialog 来改变风格已经来不及了。在此链接中有一个如何执行此操作的示例。
关于mfc - 在创建时更改对话框的样式以覆盖 .RC 模板中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2966777/