为什么mfc中statictext工具中的变量未定义

Why the variable in statictext tool in mfc is undefined

我在mfc对话框中创建了一个静态文本,然后我把这个静态文本的变量改成CString类型,成员名是一个m_process。 然后,我将使用此静态文本来显示时间过程,但未定义标识符。

int64 tm1 = cv::getTickCount();
int64 tm2 = cv::getTickCount();
double sec = (tm2-tm1)/cv::getTickFrequency();
teks.Format(_T("%g"),sec);
m_process.SetWindowTextW(teks);

这就是错误

Error 9 error C2065: 'm_process' : undeclared identifier d:\kuliah\smt 8\bismillah ta\bismillah_dialog\bismillah_dialog\bismillah_dialogdlg.cpp 391 1 Bismillah_Dialog

Error 4 error C2228: left of '.SetWindowTextW' must have class/struct/union d:\kuliah\smt 8\bismillah ta\bismillah_dialog\bismillah_dialog\bismillah_dialogdlg.cpp 268 1 Bismillah_Dialog

这是这个静态文本的声明。 在 Dlg.cpp

CBismillah_DialogDlg::CBismillah_DialogDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CBismillah_DialogDlg::IDD, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    modeTampil = 0;
    openProcess = 0;
    modeAuto = 0;
    m_area = _T("");
    m_process = _T("");
}

void CBismillah_DialogDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    //  DDX_Control(pDX, IDC_EDIT1, m_area);
    //  DDX_Control(pDX, IDC_EDIT2, m_process);
    DDX_Control(pDX, IDC_BUTTON2, m_play);
    DDX_Control(pDX, IDC_BUTTON1, m_open);
    //  DDX_Control(pDX, ID_STATIC, m_pic);
    DDX_Control(pDX, ID_STATIC, m_pic);
    DDX_Control(pDX, IDC_MFCEDITBROWSE1, m_name);
    //  DDX_Control(pDX, IDC_EDIT3, m_coba);
    //  DDX_Control(pDX, IDC_EDIT1, m_area);
    DDX_Text(pDX, IDC_EDIT1, m_area);
    DDX_Text(pDX, IDC_EDIT2, m_process);
}

并在头文件中。

public:
CWinThread* thread;

afx_msg void OnEnChangeMfceditbrowse1();
int modeTampil;
int openProcess;
int modeAuto;
static DWORD ThreadPro(LPVOID *x);
afx_msg void threadProcess();


//  CStatic m_area;
//  CStatic m_process;
    CButton m_play;
    CButton m_open;
//  CStatic m_pic;
    CStatic m_pic;
    afx_msg void OnBnClickedButton1();
    CMFCEditBrowseCtrl m_name;
//  CEdit m_coba;
//  CStatic m_area;
    CString m_area;
    CString m_process;
};

系统已经声明了静态文本,但是在我构建这个程序时没有检测到。 我不知道如何解决它。我很困惑,而且是这个 MFC 的新手。我非常非常需要帮助。谢谢:))

鉴于您提供的代码,UI 控件映射到 CString 而不是 映射到 CEdit

因此,您不能使用SetWindowTextW,因为CString不是控制对象。

在你可以使用:

m_process.Format(_T("%g"),sec);
UpdateData(FALSE);

我并不是说这是最有效的方法。但它适用于您声明的代码。还有其他方法可以将控件内容传递给变量(例如:SetDlgItemText),但我就是这样做的。毫无疑问,还有更多的方法。