2012-08-07 13 views
0

我有一个C++类MyDialog,源自CDialog,其中我删除了Windows框架,从而删除了Windows生成的影子。如何将CS_DROPSHADOW应用于CDialog的子类

我想重新添加阴影,而不添加框架。我发现有一种可以应用的课程风格CS_DROPSHADOW。但我找不到如何应用它。

我发现了一种方法ModifyStyle,但它只修改WS_...样式,而不是CS_...样式。

我该如何运用班级风格CS_DROPSHADOW

回答

1

我的同事帮我带班风格像这样注册类:

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

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

+0

我试着在'OnNcCalcSize'方法中操作'NCCALCSIZE_PARAMS'。但是如果我膨胀矩形('lpncsp-> rgrc'),客户端可能会变小,如果减少,或者只是在增加时得到一个白色框架。阴影不变。我应该怎么做呢? – JOG 2012-08-08 14:03:59

+0

@JOG,抱歉,这是我现在唯一的想法。我从来没有试过这样做,但我知道试图实现微软从未想到的事情总是很困难。对不起,它没有解决。 – 2012-08-08 14:28:21

相关问题