本节我们继续学习UpdateLayeredWindow这个API, 通过它我们来实现一个阴影效果的窗体(像Window7窗体效果).

思路:  1.  创建二个层窗体, 一个作为控件窗件,另一个做阴影效果窗体;

         2.  在第一个窗体实现各种控件创建以及相关逻辑处理,此窗体设为全透明;

         3.  将第二个窗体重叠并保持重叠第一个窗体(即大小,位置,移动或改变大小都保持一致),此窗体选入一张边沿带有阴影效果通道图(BMP, PNG)通过UpdateLayeredWindow函数年

             来实现效果;

         4.  截取第一个窗体中控件的图并与第二个窗体叠加,因为UpdateLayeredWindow之后的窗体有穿透能力这样更好触及到被完成透明的第一个窗体上;

声明: 此方法源于Codeproject上一个中国程序员的文章

一. 代码演示

     1. 在主窗体WM_NCCREATE中调用_ShadowWnd函数,  通过此函数修改主窗体的两个属性 -- 1. 替换窗体过程函数(用于截获主窗体的消息); 2.  修改主窗体为层窗体

        

LRESULT CALLBACK _DefWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{    
    static const UINT IDC_BTNEXIT        = 1002;

    switch (nMsg)
    {
        case WM_NCCREATE:
        {
            _ShadowWnd(hWnd);
            break;
        }
        ...
    }
    return ::DefWindowProc(hWnd, nMsg, wParam, lParam);
}

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-31
  • 2022-12-23
  • 2021-10-07
  • 2022-12-23
猜你喜欢
  • 2021-08-29
  • 2021-07-31
  • 2022-12-23
  • 2022-12-23
  • 2022-02-05
  • 2022-03-03
  • 2022-12-23
相关资源
相似解决方案