首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将 CS_DROPSHADOW 应用于 CDialog 的子类

要将 CS_DROPSHADOW 应用于 CDialog 的子类,请遵循以下步骤:

  1. 在派生类的构造函数中,使用 WS_POPUP 和 WS_VISIBLE 样式创建一个新的窗口。
  2. 在派生类的构造函数中,使用 CreateEx 方法创建一个新的窗口,并将 WS_EX_TOPMOST 和 WS_EX_TOOLWINDOW 作为扩展样式。
  3. 在派生类的构造函数中,使用 ModifyStyleEx 方法将 WS_EX_LAYERED 和 WS_EX_TRANSPARENT 添加到窗口的扩展样式。
  4. 在派生类的构造函数中,使用 SetLayeredWindowAttributes 方法设置窗口的不透明度和颜色键。
  5. 在派生类的构造函数中,使用 SetWindowPos 方法将窗口置于其他窗口的顶部。
  6. 在派生类的 OnInitDialog 方法中,使用 SetWindowPos 方法将窗口置于其他窗口的顶部。
  7. 在派生类的 OnPaint 方法中,使用 FillSolidRect 方法绘制窗口的背景。
  8. 在派生类的 OnNcPaint 方法中,使用 DrawEdge 方法绘制窗口的边框。
  9. 在派生类的 OnNcActivate 方法中,使用 DefWindowProc 方法处理 WM_NCACTIVATE 消息。
  10. 在派生类的 OnNcCalcSize 方法中,使用 DefWindowProc 方法处理 WM_NCCALCSIZE 消息。
  11. 在派生类的 OnNcHitTest 方法中,使用 DefWindowProc 方法处理 WM_NCHITTEST 消息。
  12. 在派生类的 OnNcMouseMove 方法中,使用 DefWindowProc 方法处理 WM_NCMOUSEMOVE 消息。
  13. 在派生类的 OnNcLButtonDown 方法中,使用 DefWindowProc 方法处理 WM_NCLBUTTONDOWN 消息。
  14. 在派生类的 OnNcLButtonUp 方法中,使用 DefWindowProc 方法处理 WM_NCLBUTTONUP 消息。
  15. 在派生类的 OnNcRButtonDown 方法中,使用 DefWindowProc 方法处理 WM_NCRBUTTONDOWN 消息。
  16. 在派生类的 OnNcRButtonUp 方法中,使用 DefWindowProc 方法处理 WM_NCRBUTTONUP 消息。
  17. 在派生类的 OnNcPaint 方法中,使用 DrawFrameControl 方法绘制窗口的控件。

以下是一个示例代码:

代码语言:cpp
复制
class CMyDialog : public CDialog
{
public:
    CMyDialog(CWnd* pParent = NULL)
        : CDialog(IDD_MYDIALOG, pParent)
    {
        Create(NULL, _T("My Dialog"));
        ModifyStyle(0, WS_POPUP | WS_VISIBLE);
        ModifyStyleEx(0, WS_EX_TOPMOST | WS_EX_TOOLWINDOW);
        ModifyStyleEx(0, WS_EX_LAYERED | WS_EX_TRANSPARENT);
        SetLayeredWindowAttributes(0, 255, LWA_ALPHA);
        SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
    }

    // ...

    afx_msg void OnPaint();
    afx_msg void OnNcPaint();
    afx_msg BOOL OnNcActivate(BOOL bActive);
    afx_msg LRESULT OnNcCalcSize(WPARAM wParam, LPARAM lParam);
    afx_msg LRESULT OnNcHitTest(CPoint point);
    afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point);
    afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
    afx_msg void OnNcLButtonUp(UINT nHitTest, CPoint point);
    afx_msg void OnNcRButtonDown(UINT nHitTest, CPoint point);
    afx_msg void OnNcRButtonUp(UINT nHitTest, CPoint point);

    DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
    ON_WM_PAINT()
    ON_WM_NCPAINT()
    ON_WM_NCACTIVATE()
    ON_WM_NCCALCSIZE()
    ON_WM_NCHITTEST()
    ON_WM_NCMOUSEMOVE()
    ON_WM_NCLBUTTONDOWN()
    ON_WM_NCLBUTTONUP()
    ON_WM_NCRBUTTONDOWN()
    ON_WM_NCRBUTTONUP()
END_MESSAGE_MAP()

void CMyDialog::OnPaint()
{
    CPaintDC dc(this);
    CRect rect;
    GetClientRect(rect);
    dc.FillSolidRect(rect, RGB(255, 255, 255));
}

void CMyDialog::OnNcPaint()
{
    CWindowDC dc(this);
    CRect rect;
    GetWindowRect(rect);
    rect.OffsetRect(-rect.left, -rect.top);
    dc.DrawEdge(rect, EDGE_RAISED, BF_RECT);
}

BOOL CMyDialog::OnNcActivate(BOOL bActive)
{
    return TRUE;
}

LRESULT CMyDialog::OnNcCalcSize(WPARAM wParam, LPARAM lParam)
{
    return 0;
}

LRESULT CMyDialog::OnNcHitTest(CPoint point)
{
    return HTCLIENT;
}

void CMyDialog::OnNcMouseMove(UINT nHitTest, CPoint point)
{
}

void CMyDialog::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
}

void CMyDialog::OnNcLButtonUp(UINT nHitTest, CPoint point)
{
}

void CMyDialog::OnNcRButtonDown(UINT nHitTest, CPoint point)
{
}

void CMyDialog::OnNcRButtonUp(UINT nHitTest, CPoint point)
{
}

这个示例代码将创建一个具有阴影效果的窗口,并且可以通过绘制窗口的控件来自定义窗口的外观。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

duilib基本框架

最近我一个同学在项目中使用到了duilib框架,但是之前并没有接触过,他与我讨论这方面的内容,看着官方给出的精美的例子,我对这个库有了很大的兴趣,我自己也是初学这个东东,我在网上花了不少时间来找相关的资料,但是找到的不多,官方给的文档又不全面,但是我还是找到了一些博主贡献的优秀的博文,现在我是通过博文上的讲解加上自己查看源代码的一些心得,正在艰难的前行。现在正在看的是博主Alberl在博客园中的duilib基础教程中的内容,下面的代码都是在他博客中给出代码的基础上做了一点小小的修改。点击这里跳转到对应的博客,以及博主夜雨無聲的博客,博客地址

01
领券