2017-08-13 2 views
0

créer un texte statique dans une boîte de dialogue de la SFM, je change variable de ce texte statique dans le type CString et nom de membre est un m_process. Ensuite, je vais utiliser ce texte statique pour montrer le processus de temps, mais l'identifiant n'est pas défini.Pourquoi la variable dans l'outil StaticText dans mfc est indéfini

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

et ceci est l'erreur

Erreur 9 erreur C2065: 'm_process': identificateur non déclaré d: \ kuliah \ smt 8 \ bismillah ta \ bismillah_dialog \ bismillah_dialog \ bismillah_dialogdlg.cpp 391 1 Bismillah_Dialog

erreur 4 erreur C2228: à gauche de '.SetWindowTextW' doit avoir classe/struct/union d: \ kuliah \ smt 8 \ bismillah ta \ bismillah_dialog \ bismillah_dialog \ bismillah_dialogdlg.cpp 268 1 bismillah_Dialog

c'est la déclaration de ce texte statique. dans 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); 
} 

et dans le fichier d'en-tête.

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; 
}; 

Le système a déjà déclaré le texte statique, mais il n'est pas détecté lorsque je compile ce programme. Je ne sais pas comment le résoudre. Je suis très confus, et débutant à ce MFC. J'ai très très besoin d'aide. merci :))

+0

S'il vous plaît nous montrer les lignes de code, qui signale l'erreur ... – xMRi

+0

Vous essayez d'utiliser 'm_process' de l'extérieur de la classe de dialogue. Vous ne pouvez y accéder qu'à partir d'une fonction membre de la classe 'CBismillah_DialogDlg'. – acraig5075

+0

@ acraig5075 Je pense que vous avez fait une supposition là-bas. De toute façon, l'affiche originale n'a pas fait de réponses avec des précisions. –

Répondre

1

Étant donné votre code fourni, le contrôle de l'interface utilisateur est mis en correspondance avec une CString et pas à un CEdit.

Par conséquent, vous ne pouvez pas utilisation SetWindowTextW comme CString est pas un objet de contrôle.

Dans votre boîte il suffit d'utiliser:

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

Je ne dis pas que c'est la façon la plus efficace. Mais cela fonctionne avec votre code déclaré. Il existe d'autres façons de transférer le contenu du contrôle des variables (par exemple: SetDlgItemText), mais voici comment je le fais. Il n'y a pas de doute qu'il y a encore plus de méthodes.

+0

Je ne suis pas d'accord avec ça. En fonction de ce que vous faites, il est beaucoup plus simple et plus rapide de définir directement les données. Supposons que vous avez 50 contrôles. Pourquoi devrais-je transférer des données de 50 contrôles à l'interface utilisateur, aussi dans ce cas, vous devez transférer les données de l'interface utilisateur pour le stockage interne d'abord, sinon vous substituez des données saisies par l'utilisateur juste. – xMRi

+1

Vous n'avez pas à le faire comme je l'ai dit. Je déclare clairement que c'est ** un chemin **, et mon chemin. J'inclus directement un moyen ** secondaire **. De toute façon, ma réponse était à ** sa ** question.Il utilise un 'CString' et il ** ne peut pas ** utiliser' SetWindowTextW' avec lui. Je sens votre vote injuste. Si ma réponse était dogmatique, alors je l'aurais prise sur le menton. Mais ce n'est pas dogmatique. –

+1

Vous avez raison ... – xMRi