• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed MFC - wartosci wpisane przez uzytkownika nie zmieniają się w polach klasy

Object Storage Arubacloud
0 głosów
106 wizyt
pytanie zadane 28 maja 2018 w C i C++ przez Wilier Bywalec (2,570 p.)
zamknięte 28 maja 2018 przez Wilier

hej,

mam problem z połączeniem przycisku/editboxa ze zmienną w klasie. Chodzi o to, że wpisanie jakiejs wartosci do np. editboxa lub radio_controla nie powoduje, że zmienna o tej nazwie w klasie jest updatowana do danej wartosci.

Chce zrobic najprostsze okno dialogowe i po wpisaniu czegos do edit boxa i kliknięciu OK tekst jest wyswietlany w glownym oknie aplikacji. Sprawdziłem debuggerem, że moje wartosci po kliknięciu OK się nie zmieniają. Jest jakiś problem z połączeniem tych boxów z klasą.

Warto zauważyć, że w klasie dialogu COptionsDlg gdy w konstruktorze wpisuję wartości np. m_text("TESSSSSSKT") lub m_PosX(50)  one nie pojawiają się w okienkach aplikacji, a powinny. Czyli brakuje jakiejś interakcji pomiędzy kodem a polami w dialogu.

Kod poniżej

COptionsDlg to jest klasa okna dialogowego natomaist MFCApplication1View to głowne okno aplikacji.

#pragma once


// COptionsDlg dialog

class COptionsDlg : public CDialog
{
	DECLARE_DYNAMIC(COptionsDlg)

public:
	COptionsDlg(CWnd* pParent = nullptr);   // standard constructor
	virtual ~COptionsDlg();

// Dialog Data
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_DIALOG_OPTIONS	};
#endif

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

	DECLARE_MESSAGE_MAP()
public:
	CString m_text;
	int m_bgColor;
	int m_PosX;
	int m_PosY;
	int m_test;
};

// COptionsDlg.cpp : implementation file
//

#include "stdafx.h"
#include "MFCApplication1.h"
#include "COptionsDlg.h"
#include "afxdialogex.h"


// COptionsDlg dialog

IMPLEMENT_DYNAMIC(COptionsDlg, CDialog)

COptionsDlg::COptionsDlg(CWnd* pParent /*=nullptr*/)
	: CDialog(IDD_DIALOG_OPTIONS, pParent)
	, m_text("TESSSSSSKT")
	, m_bgColor(0)
	, m_PosX(50)
	, m_PosY(50)
{

}

COptionsDlg::~COptionsDlg()
{
}

void COptionsDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(COptionsDlg, CDialog)
END_MESSAGE_MAP()


// COptionsDlg message handlers

// MFCApplication1View.h : interface of the CMFCApplication1View class
//

#pragma once


class CMFCApplication1View : public CView
{
protected: // create from serialization only
	CMFCApplication1View();
	DECLARE_DYNCREATE(CMFCApplication1View)

// Attributes
public:
	CMFCApplication1Doc* GetDocument() const;

// Operations
public:

// Overrides
public:
	virtual void OnDraw(CDC* pDC);  // overridden to draw this view
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:

// Implementation
public:
	virtual ~CMFCApplication1View();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
	afx_msg void OnFilePrintPreview();
	afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnToolsOptions();
private:
	CString m_text{_T("Default Text")};
	int m_bgColor{1};
	int m_PosX{200};
	int m_PosY{300};
};

#ifndef _DEBUG  // debug version in MFCApplication1View.cpp
inline CMFCApplication1Doc* CMFCApplication1View::GetDocument() const
   { return reinterpret_cast<CMFCApplication1Doc*>(m_pDocument); }
#endif


// MFCApplication1View.cpp : implementation of the CMFCApplication1View class
//

#include "stdafx.h"
// SHARED_HANDLERS can be defined in an ATL project implementing preview, thumbnail
// and search filter handlers and allows sharing of document code with that project.
#ifndef SHARED_HANDLERS
#include "MFCApplication1.h"
#endif

#include "MFCApplication1Doc.h"
#include "MFCApplication1View.h"
#include "COptionsDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CMFCApplication1View

IMPLEMENT_DYNCREATE(CMFCApplication1View, CView)

BEGIN_MESSAGE_MAP(CMFCApplication1View, CView)
	ON_WM_CONTEXTMENU()
	ON_WM_RBUTTONUP()
	ON_COMMAND(ID_TOOLS_OPTIONS, &CMFCApplication1View::OnToolsOptions)
END_MESSAGE_MAP()

// CMFCApplication1View construction/destruction

CMFCApplication1View::CMFCApplication1View()
{
	// TODO: add construction code here

}

CMFCApplication1View::~CMFCApplication1View()
{
}

BOOL CMFCApplication1View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

// CMFCApplication1View drawing

void CMFCApplication1View::OnDraw(CDC* pDC)
{
	CMFCApplication1Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO: add draw code for native data here
	CRect clientRect;
	GetClientRect(clientRect);
	if(m_bgColor == 0)
		pDC->FillSolidRect(clientRect, RGB(255, 0, 0));
	else if(m_bgColor == 1)
		pDC->FillSolidRect(clientRect, RGB(0, 0, 255));
	pDC->TextOutW(m_PosX, m_PosY, m_text);
}

void CMFCApplication1View::OnRButtonUp(UINT /* nFlags */, CPoint point)
{
	ClientToScreen(&point);
	OnContextMenu(this, point);
}

void CMFCApplication1View::OnContextMenu(CWnd* /* pWnd */, CPoint point)
{
#ifndef SHARED_HANDLERS
	theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);
#endif
}


// CMFCApplication1View diagnostics

#ifdef _DEBUG
void CMFCApplication1View::AssertValid() const
{
	CView::AssertValid();
}

void CMFCApplication1View::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CMFCApplication1Doc* CMFCApplication1View::GetDocument() const // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFCApplication1Doc)));
	return (CMFCApplication1Doc*)m_pDocument;
}
#endif //_DEBUG


// CMFCApplication1View message handlers

void CMFCApplication1View::OnToolsOptions()
{
	COptionsDlg dlgOptions;

	if (dlgOptions.DoModal() == IDOK)
	{
		m_text = dlgOptions.m_text;
		m_bgColor = dlgOptions.m_bgColor;
		m_PosX = dlgOptions.m_PosX;
		m_PosY = dlgOptions.m_PosY;
	}
	Invalidate();
	UpdateWindow();
}

pozdrawiam

komentarz zamknięcia: bug w Visualu 2017

1 odpowiedź

0 głosów
odpowiedź 28 maja 2018 przez j23 Mędrzec (194,920 p.)

Sprawdziłem debuggerem, że moje wartosci po kliknięciu OK się nie zmieniają.

Ale jak to zrozumieć? Wykonywana jest linia m_text = dlgOptions.m_text;?

 

PS. dlaczego MFC?

komentarz 28 maja 2018 przez Wilier Bywalec (2,570 p.)
Tak wykonywana jest ta linia i wartośc się nie zmienia.

Czemu MFC? Nie pytaj... Projekt na uczelnię i 60 letni prowadzący
komentarz 28 maja 2018 przez j23 Mędrzec (194,920 p.)

Nie zmienia się w sensie, że nie wyświetla tekstu TESSSSSSKT na oknie, czy w też podglądając w debuggerze CMFCApplication1View::m_text pozostaje bez zmian?

 

Szczerze mówiąc mało prawdopodobne jest, żeby to przypisanie nie działało.

komentarz 28 maja 2018 przez Wilier Bywalec (2,570 p.)
Już działa.

Tłumaczę w czym błąd.

Otóż Visual 2017 ma buga. Znalazłem na ich stronie post z marca, w ktorym jest napisane ze pracują nad tym. Chodzi o to ze przy dodawaniu zmiennej np. edit controla albo innych nie ma do wyboru czy to ma byc zmienna typu Value czy Control, a w Visualu 2015 jest takie coś. Odpalilem w 2015 pozmianialem i hula.

Podobne pytania

0 głosów
0 odpowiedzi 72 wizyt
0 głosów
1 odpowiedź 177 wizyt
0 głosów
2 odpowiedzi 200 wizyt
pytanie zadane 1 września 2017 w C i C++ przez wojtekd09 Początkujący (260 p.)

92,539 zapytań

141,382 odpowiedzi

319,480 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...