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