• ProgressBar 进度条


    SHIT--

    Usage:

    NSTS::CProgressBar g_pb;
    NSTS::CProgressBar g_pb2;


    WM_INITDIALOG:
    RECT rcpb = { 0, 0, 100, 20 };

    assert (g_pb.Init (hInst, hwndDlg, &rcpb));
    assert (g_pb2.Attach (GetDlgItem (hwndDlg, IDC_PROGRESS1)));
    assert (g_pb2.SetStep (5));

    // 背景颜色
    assert (g_pb2.SetBkColor (RGB (128, 128, 255)));
    // 进度条颜色
    assert (g_pb2.SetIndicatorColor (RGB (255, 0, 0)));

    ---
    assert (g_pb.StepIt ());
    assert (g_pb2.StepIt ());

    PS:

    这只是封装微软的进度条,当然自己实现比较好,可以做美化,以及实现百分比显示。

    #ifndef    progressbarH
    #define progressbarH

    namespace NSTS {

    #include <Windows.h>
    #include <commctrl.h>

    class CProgressBar {
    public:
    CProgressBar (void) {
    m_hSelf = NULL;
    m_hParent = NULL;
    m_iStep = 10;
    m_hInst = NULL;
    };
    ~CProgressBar (void) {
    Destroy ();
    };

    bool Init (HINSTANCE hInst, HWND hParent, const RECT* prc, bool fSmooth = false, bool fHorizon = true) {
    Destroy ();
    if (hInst == NULL || !IsWindow (hParent) || prc == NULL) {
    return false;
    }

    InitCommonControls ();

    m_hSelf = CreateWindowEx (0,
    PROGRESS_CLASS,
    NULL,
    WS_CHILD | WS_VISIBLE | (fSmooth ? PBS_SMOOTH : 0) | (fHorizon ? 0 : PBS_VERTICAL),
    prc->left,
    prc->top,
    prc->right - prc->left,
    prc->bottom - prc->top,
    hParent,
    NULL,
    hInst,
    NULL);
    if (m_hSelf == NULL) {
    return false;
    }

    m_hParent = hParent;
    m_hInst = hInst;

    return true;
    };
    void Destroy (void) {
    if (IsWindow (m_hSelf)) {
    DestroyWindow (m_hSelf);
    }

    m_hSelf = NULL;
    m_hParent = NULL;

    m_iStep = 10;
    m_hInst = NULL;
    };
    bool Attach (HWND hPB) {
    if (IsWindow (hPB)) {
    m_hParent = GetParent (hPB);
    m_hSelf = hPB;

    return true;
    }

    return false;
    };

    bool StepIt (void) {
    if (IsWindow (m_hSelf)) {
    SendMessage (m_hSelf, PBM_STEPIT, (WPARAM)0, (LPARAM)0);

    return true;
    }

    return false;
    };

    bool SetStep (int iStep) {
    if (IsWindow (m_hSelf) && iStep > 0) {
    SendMessage (m_hSelf, PBM_SETSTEP, (WPARAM)iStep, (LPARAM)0);
    m_iStep = iStep;

    return true;
    }

    return false;
    };

    bool SetPos (int iPos) {
    if (IsWindow (m_hSelf) && iPos > 0) {
    SendMessage (m_hSelf, PBM_SETPOS, (WPARAM)iPos, (LPARAM)0);

    return true;
    }

    return false;
    };

    bool SetLength (int iLength) {
    if (IsWindow (m_hSelf) && iLength > 0) {
    SendMessage (m_hSelf, PBM_SETRANGE32, (WPARAM)0, (LPARAM)iLength);
    return true;
    }

    return false;
    };


    int GetCurrentPos (void) const {
    if (IsWindow (m_hSelf)) {
    return ((int)SendMessage (m_hSelf, PBM_GETPOS, (WPARAM)0, (LPARAM)0));
    }

    return -1;
    };

    int GetLength (void) const {
    if (IsWindow (m_hSelf)) {
    return ((int)SendMessage (m_hSelf, PBM_GETRANGE, (WPARAM)FALSE, (LPARAM)NULL));
    }

    return -1;
    };

    int GetStep (void) const {
    if (IsWindow (m_hSelf)) {
    return m_iStep;
    }

    return -1;
    };


    bool SetBkColor (COLORREF clrBk) {
    if (IsWindow (m_hSelf)) {
    SendMessage (m_hSelf, PBM_SETBKCOLOR, (WPARAM)0, (LPARAM)clrBk);
    return true;
    }

    return false;
    };

    bool SetIndicatorColor (COLORREF clrIndicator) {
    if (IsWindow (m_hSelf)) {
    SendMessage (m_hSelf, PBM_SETBARCOLOR, (WPARAM)0, (LPARAM)clrIndicator);
    return true;
    }

    return false;
    };


    HWND GetHwnd (void) const { return m_hSelf; };
    HWND GetParent (void) const { return m_hParent; };
    private:
    HWND m_hSelf;
    HWND m_hParent;
    HINSTANCE m_hInst;

    int m_iStep;
    };

    }

    #endif // progressbarH




  • 相关阅读:
    samba
    sed用法
    Jenkins流水线项目发布流程
    Jenkins
    CI/CD
    tomcat
    gitlab
    rsync
    HAPROXY
    基于LVS的web集群部署(http)
  • 原文地址:https://www.cnblogs.com/lin1270/p/2330324.html
Copyright © 2020-2023  润新知