NX 进度条制作

环境:Win10, x64, VS2017, NX1907

记录日期:2020/09/17


目标:实现下图效果

NX 进度条制作_第1张图片


实现思路:

说明一下,我通常用C++开发NX,但是C++ 界面库集成到NX功能上有很多限制,比如:

1. Qt, Qt 的确很容易上手,也容易出效果,但集成到NX那就是个坑,因为兼容性太差了,

    想要使用Qt进行NX二次开发的小伙伴,用Qt单独做工具被NX调用还可以,如果只是想用Qt的界面还是算了......

2. MFC, MFC经常被吐槽难用,的确如此,但在NX集成中没有问题,最起码可以实现

3. NX UI, NX界面有个限制条件,不可能同时打开两个对话框,  其他API也没找到进度条之类的

综上,还是老实用MFC吧,补充一点,如果做NX二次开发,Windows API 和 MFC 还是要了解一下的


代码:

1. MFC 程序中加入代码:

BOOL CProcessBarDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    LPCTSTR lstrMsg = (LPCTSTR)(pCopyDataStruct->lpData);
    CString strMsg(lstrMsg);

    //转成INT 
    int percent = atoi(CT2A(strMsg));
    if (percent < 0 || percent >100)
    {
        return FALSE;
    }

    m_progressBar.SetPos(percent);

    CString percentStr;
    percentStr.Format(_T("%d"), percent);

    percentStr = percentStr + CString("%");

    m_processText.SetWindowTextW(percentStr);

    return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);
}

2. NX 程序中加入代码:

void ProgressManagerData::SetProgressPercent(int percent)
{
    if (percent < 0 || percent >100)
    {
        return;
    }

    LRESULT copyData;
    CWnd *progressWnd = CWnd::FindWindow(NULL, L"NX进度条");
    if (NULL != progressWnd)
    {
        //传入的数据
        CString percentStr;
        percentStr.Format(_T("%d"), percent);
        percentStr = percentStr + CString("%");

        //数据转换
        COPYDATASTRUCT cpd;
        cpd.dwData = 0;
        cpd.cbData = (percentStr.GetLength() + 1) * sizeof(TCHAR);
        cpd.lpData = (void*)percentStr.GetBuffer(cpd.cbData); 
        copyData = progressWnd->SendMessage(WM_COPYDATA, (WPARAM)AfxGetApp()->m_pMainWnd->GetSafeHwnd(), (LPARAM)&cpd);
        percentStr.ReleaseBuffer();
    }
}

补充:

NX 进度条不支持多进程多线程


测试项目链接:

https://download.csdn.net/download/qq_30722721/12852628

你可能感兴趣的:(NX)