如何将CS_DROPSHADOW应用于CDialog的子类

时间:2012-08-07 13:18:38

标签: c++ mfc dropshadow cdialog

我有一个c ++类MyDialog,派生自CDialog,我删除了Windows框架,从而删除了Windows生成的阴影。

我想再次添加阴影,而不添加框架。我发现可以应用类风格CS_DROPSHADOW。但我找不到如何应用它。

我找到了一个方法ModifyStyle,但它只修改了WS_...个样式,而不是CS_...样式。

如何应用班级样式CS_DROPSHADOW

2 个答案:

答案 0 :(得分:3)

我的同事帮我注册了一个课堂风格的课程:

    WNDCLASS wndClass;
    GetClassInfo(NULL, WC_DIALOG, &wndClass);
    wndClass.style |= CS_DROPSHADOW;
    wndClass.lpszClassName = TEXT("MyDialog");
    RegisterClass(&wndClass); 

其中WC_DIALOG是常规CDialog的类。

然后在定义对话框的资源文件中使用此类:

IDD_MYDIALOGEX 54, 22, 264, 95
STYLE DS_SETFONT | DS_CENTER | WS_POPUP
CLASS "MyDialog"
FONT 8, "Microsoft Sans Serif", 0, 0, 0x0
BEGIN
    // Contents ...
END

这增添了一个阴影,这很好。但不是我想要的航空阴影。 enter image description here

欢迎更多答案!

答案 1 :(得分:1)

您可以保留帧样式但响应WM_NCCALCSIZE以使客户端覆盖整个窗口,从而有效地使边框为零宽度。