65.9K
CodeProject 正在变化。 阅读更多。
Home

一个带阴影边框的炫酷皮肤 GUI

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.13/5 (13投票s)

2008年4月17日

CPOL

2分钟阅读

viewsIcon

62957

downloadIcon

8550

带有阴影边框的炫酷皮肤 GUI;在对话框、按钮、列表框上显示图像(支持多种格式)。

vietdoor_cool_skin_dialog.PNG

图 1:可定制皮肤的对话框 - 可以在列表框上显示图像

引言

这是一个编写优秀 GUI 的代码。我们可以将图像加载到组合框、按钮或对话框中。它使用 CxImage 库 加载图像,因此它可以支持所有图像格式。

在此代码中,我们还为对话框使用阴影边框,这是我从 这里 获取的。您还可以在对话框显示时制作特殊效果,这是我从 这里 获取的。

使用代码

如何在对话框上显示背景图像

首先,包含 FXDialog.h/.cpp。然后,创建一个类似于 CFXGUIDlg 的对话框并继承 CFXDialog。您必须进入对话框的资源,并设置对话框的属性:边框 = 无,这样此对话框将移除标题栏,并且您必须实现代码来执行此操作;请参阅 通过鼠标移动对话框

添加如下代码

OnInitDialog 
{
    ....

    SetImage(PATH_IMAGE_GALLERY_MEDIA_MAIN_BG); // Set background image
    SetSizeFollowImage(this); // Update size

    ...
}

BOOL CFXGUIDlg::OnEraseBkgnd(CDC* pDC)
{
    CFXDialog::OnEraseBkgnd(pDC);
    return TRUE;          
}

要创建任意形状的对话框,请如下设置对话框的区域。您必须创建一个模板图像,该图像具有两种颜色,例如黑色和白色(黑色是对话框的透明部分,白色是可见部分)。此 SetRgn 函数将在模板图像的背景颜色区域内创建此透明对话框。您需要包含 region.hpp/.cpp 文件。 BitmapToRegion 函数将基于模板图像为对话框创建任意区域。

OnInitDialog 
{
    ...
    SetRgn(PATH_IMAGE_GALLERY_MEDIA_MAIN_TEMPLATE, this, false);
    // Set region of dialog 
    ...
}

通过鼠标移动对话框:

#define CY_TITLEBAR 35
void CFXGUIDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    if(point.y > CY_TITLEBAR)
        return;
    // This code to move window when press left button any where on dialog
    PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));

    CDialog::OnLButtonDown(nFlags, point);
}

为对话框创建阴影

BOOL CFXGUIApp::InitInstance()
{
    ...
    CWndShadow::Initialize(AfxGetInstanceHandle());
    ...
}

OnInitDialog 
{
    ...
    CreateShadow(GetSafeHwnd());
    ...
}

void OnShowWindow(BOOL bShow, UINT nStatus) 
{
    CDialog::OnShowWindow(bShow, nStatus);
    
    // TODO: Add your message handler code here    
    static bool bFirstTime = true;
    if (bFirstTime)
    {
        bFirstTime = false;
        AnimationWindow(m_hWnd, 1200, AW_BLEND);
        UpdateShadow();        
    }
}

要使用按钮和组合框,我们可以使用 FXButtonFXComboBox 类。您必须进入资源并检查按钮的样式是否为“所有者绘制”。

CFXGUIDlg::CFXGUIDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CFXGUIDlg::IDD, pParent)
    , CFXDialog()
    , m_cBtnClose(PATH_IMAGE_GALLERY_MEDIA_BTN_CLOSE, 
                  PATH_IMAGE_GALLERY_MEDIA_BTN_CLOSE_OVER)
    , m_cBtnBrowser(PATH_IMAGE_GALLERY_MEDIA_BTN_BROWSER_NORMAL, 
                    PATH_IMAGE_GALLERY_MEDIA_BTN_BROWSER_OVER, true)
    , m_cCmbPath(PATH_IMAGE_GALLERY_MEDIA_CMB_PATH_PULL_NORMAL)
    , m_cCmbViewStype(PATH_IMAGE_GALLERY_MEDIA_CMB_PATH_PULL_NORMAL)
{
    ...
}

要使用列表框,我们可以使用 FXListBox 类,并且我们还使用 FXExplorer 来模拟 Windows 资源管理器。将此控件集成到您的项目中以管理文件/文件夹非常酷。

历史

© . All rights reserved.