2012-08-07 81 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

相關問題