• 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

0 głosów
64 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 (175,160 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 (175,160 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 36 wizyt
0 głosów
1 odpowiedź 110 wizyt
0 głosów
2 odpowiedzi 153 wizyt
pytanie zadane 1 września 2017 w C i C++ przez wojtekd09 Początkujący (260 p.)

88,381 zapytań

136,985 odpowiedzi

305,727 komentarzy

58,643 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...