首先,需要在对话框资源中添加一个编辑框和一个按钮控件。在控件的属性中分别设置ID为IDC_EDIT和IDC_BUTTON。

然后,在对话框类的头文件中添加以下成员变量和消息处理函数:

class CMyDlg : public CDialogEx
{
public:
    CMyDlg(CWnd* pParent = nullptr);

    enum { IDD = IDD_MY_DIALOG };

protected:
    virtual void DoDataExchange(CDataExchange* pDX);

protected:
    HICON m_hIcon;
    CEdit m_edit;
    CButton m_button;
    volatile bool m_bRunning;
    CString m_strLog;

    afx_msg void OnBtnStart();
    afx_msg void OnBtnStop();

    DECLARE_MESSAGE_MAP()
};

其中,m_edit和m_button分别表示编辑框和按钮控件,m_bRunning表示程序是否正在运行,m_strLog用于保存输出的日志信息。

接下来,在对话框类的实现文件中添加以下代码:

void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_EDIT, m_edit);
    DDX_Control(pDX, IDC_BUTTON, m_button);
}

BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON, &CMyDlg::OnBtnStart)
    ON_BN_CLICKED(IDCANCEL, &CMyDlg::OnBtnStop)
END_MESSAGE_MAP()

void CMyDlg::OnBtnStart()
{
    if (m_bRunning) {
        return;
    }

    CString strValue;
    m_edit.GetWindowText(strValue);
    int nValue = _ttoi(strValue);

    m_bRunning = true;
    m_button.SetWindowText(_T("停止"));
    m_strLog.Empty();

    while (m_bRunning) {
        // 升源操作
        // ...

        CString strLog;
        strLog.Format(_T("已升源到%dV\n"), nValue);
        m_strLog += strLog;
        m_edit.SetWindowText(m_strLog);

        Sleep(1000);
    }

    m_button.SetWindowText(_T("开始"));
}

void CMyDlg::OnBtnStop()
{
    m_bRunning = false;
}

在OnBtnStart函数中,首先获取编辑框中输入的数值,并将m_bRunning设置为true,表示程序正在运行。然后,进入一个循环中,不断进行升源操作,并将升源结果输出到m_strLog中,同时更新编辑框的内容。循环中使用Sleep函数暂停1秒,以便观察输出结果。当m_bRunning被设置为false时,循环结束,将按钮文本设置为“开始”。在OnBtnStop函数中,将m_bRunning设置为false,以停止循环。

最后,在OnInitDialog函数中,将m_bRunning和m_strLog初始化为空,并将按钮文本设置为“开始”。

BOOL CMyDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    SetIcon(m_hIcon, TRUE);
    SetIcon(m_hIcon, FALSE);

    m_bRunning = false;
    m_strLog.Empty();

    m_button.SetWindowText(_T("开始"));

    return TRUE;
}
``

原文地址: https://www.cveoy.top/t/topic/enwC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录