2017-08-13 134 views
0

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

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

,这是错误

错误9错误C2065:m_process':未声明的标识符d:\ kuliah \ SMT 8 \真主た\ bismillah_dialog \ bismillah_dialog \ bismillah_dialogdlg.cpp 391 1 Bismillah_Dialog

错误4错误C2228:左 '.SetWindowTextW' 必须具有类/结构/联合d:\ kuliah \ SMT 8 \真主た\ 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新手。我非常需要帮助。谢谢:))

+0

请向我们展示代码行,报告错误... – xMRi

+0

您正尝试从对话框类的外部使用'm_process'。您只能从'CBismillah_DialogDlg'类的成员函数中访问它。 – acraig5075

+0

@ acraig5075我认为你在那里做了一个假设。无论哪种方式,原始海报都没有做出任何澄清答复。 –

回答

1

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

因此,您不能使用SetWindowTextWCString控制对象。

在你可以只使用:

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

我不是说这是最有效的方式。但它适用于你陈述的代码。还有其他方法可将控制内容传输到变量(例如:SetDlgItemText),但这是我如何做到的。毫无疑问,还有更多的方法。

+0

我不同意这一点。根据您的操作,直接设置数据要简单快捷得多。假设你有50个控件。为什么我应该将数据从50个控件传输到UI,在这种情况下,您必须先将数据从UI传输到内部存储器,否则您会覆盖用户刚输入的数据。 – xMRi

+1

你不必按照我所说的方式去做。我清楚地说明它是**一种方式**和我的方式。我也直接包括**中学**的方式。无论哪种方式,我的答案是**他的**问题。他正在使用'CString',他**不能**使用'SetWindowTextW'。我觉得你的投票不公平。如果我的回答是教条式的,那么我会把它放在下巴上。但这不是教条。 –

+1

你是对的... – xMRi

相关问题