singlepost

MFC EditBox caption << На главную или назад  

Кинул на форму edit box
В нем нужно изменить значение по вызову функции, вызов функции находиться в функторе:
Вод код:

// 7prDlg.cpp : implementation file
//

#include "stdafx.h"
#include "7pr.h"
#include "7prDlg.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <time.h>
const short n = 10;

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
enum { IDD = IDD_ABOUTBOX };

protected:
virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support

// Implementation
protected:
DECLARE_MESSAGE_MAP()
};

/* вырезано за ненадобностью*/

using namespace std;

class MyFunctor
{
private:
int sum, sum2;
int count, count2;
int maxi, mini;
int val1, val2;

public:
MyFunctor():sum(0), sum2(0), count(0), count2(0), maxi(0), mini(0){};

void operator() (int val)
{
/* вырезано за ненадобностью*/
}

double get_MyFunctor()
{
CMy7prDlg::edit2_caption=" ";//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

/* вырезано за ненадобностью*/

return 0;
}

};

//global value
MyFunctor func;
vector<int> vec;

void CMy7prDlg::OnBnClickedOk2()
{

/* вырезано за ненадобностью*/
}

void CMy7prDlg::OnBnClickedOk3()
{

double average = (for_each(vec.begin(), vec.end(), MyFunctor())).get_MyFunctor();

// TODO: Add your control notification handler code here
}

Строка помеченная воскл. знаками вина: при такой реализации выдает ошибку:
illegal reference to non-static member 'CMy7prDlg::edit2_caption'
если в .h прописать что static edit2_caption то:
error C2438: 'edit2_caption' : cannot initialize static class data via constructor

как же всетаки обратиться к этому editBox?

8 ответов в теме “MFC EditBox caption”

  1. 5
    Cyber Max ответил:

    Как я понимаю edit2_caption это переменная типа CString ?
    тогда UpdateData нужен!

  2. 4
    Дмитрий Шихнабиев ответил:

    аааа ну тогда так
    CMy7prDlg* someDialog = new CMy7prDlg();

    double MyFunctor::get_MyFunctor()
    {
    someDialog->edit2_caption = "TEXT";
    }

  3. 3
    Cyber Max ответил:

    э… кто так делает?
    CMy7prDlg::edit2_caption

    Тебе же правильно сказали… обращайся к переменной экземпляра класса… а не к Просто переменной этого класса. Компилятор просто не понимает что ты хочешь сделать. Передай указатель на экземпляр класса и меняй…
    и не забудь вызвать вызвать UpdateData если edit2_caption не контрол-типа.

  4. 2
    Никита Миклушов ответил:

    edit_caption- это переменная связанная с текстом находяшимсяв editbox

  5. 1
    Дмитрий Шихнабиев ответил:

    нужно обращаться не к класу, а к объекту. например:
    CMy7prDlg* someDialog = new CMy7prDlg();

    double MyFunctor::get_MyFunctor()
    {
    HWND edit_box = getDlgItem(someDialog, edit2_caption);
    setWindowText(edit_box, "TEXT");
    // или
    // sendMessage(edit_box, WM_SETTEXT, (WPARAM)0, (LPARAM)"TEXT");
    }

    ну это, конечно, если у тя edit2_caption – ID editbox'a

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.