Estoy con un libro de Visual C++ , en donde hay un ejercicio simple, que es dibujar un círculo empelando ,entre otras, la clase CRect. En este ejercicio se dice crear un objeto de dicha clase y un tipo entero, en el archivo de cabecera "EX04AView.h". cabe decir que el tipo de proyecto es
MFC/Single Document/ok a las demas opcionesSiguiendo los diferentes pasos consigo dicho circulo.
//EX04AView.h: interfaz de la clase CEX04AView
//(...)
//////// agregadas
private:
int m_nColor;
CRect m_rectEllipse;
//(...)
// EX04AView.cpp: implementación de la clase CEX04AView
#include "stdafx.h"
#include "EX04A.h"
#include "EX04ADoc.h"
#include "EX04AView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//(...)
// Controladores de mensaje de CEX04AView
//////////////////
////////////////// este código sale al hacer Class View/Menu Sub ->Propierties/Meesage
///////////////// Es del tipo MENSAJE. Tipo mensaje es cuando responden a un EVENTO del teclado, mouse...
void CEX04AView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_rectEllipse.PtInRect(point)){ //m_rectEllipse-> Objeto creado en .h de clase CRect.
if (m_nColor==GRAY_BRUSH){ // si en m_rectEllipse hay un punto en el rectángulo ( que se puede dibujar dentro
m_nColor=WHITE_BRUSH; // de la elipse para modificar tamaño), es TRUE.
}
else {
m_nColor=GRAY_BRUSH;
}
InvalidateRect(m_rectEllipse); // esta funcion provoca el redibujo de la Vista
}
//CView::OnLButtonDown(nFlags, point);
}
esto lo que me hace es en mi clase EX04 crear un círculo de ese modo.
Pues bien, para ver si lo he entendido ( copiar es muy fácil) he ido siguiendo los pasos, y viendo que es lo que hago, pero con un proyecto que tenia abierto anteriormente, y dibujar un círculo en uno de los frames. ¿ Qué hay distinto? Pues que esta vez el tipo de proyecto no es MFC, sinó he usado
CLR/MFC Aplicattion y el proyecto se llama "nb"
He ido al form donde quiero hacer ese dibujo ( no me importa, de momento, si el círculo sobreescribe cualquier cosa) y he agregado dichas variables en la clase View. Aqui viene el problema. La variable entera la permite, pero la variable , o objeto mejor dicho "CRect m_rectEllipse;" no lo reconoce. Y aqui viene el...bueno... pero viene de un Form no???
En el proyecto del libro, no se incluye ningún namespace, lo que si pasa es que se crea la clase ahi del modo :
class CEX04AView : public CView
{
o sea, que CEX04View tiene todas las propiedades de la clase padre CView.
Entonces veo como se hace la clase en el proyecto "nb" y es así :
#pragma once
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
namespace nb {
/// <summary>
/// Summary for CMyView ///
/// WARNING: If you change the name of this class, you will need to change the
/// 'Resource File Name' property for the managed resource compiler tool
/// associated with all .resx files this class depends on. Otherwise,
/// the designers will not be able to interact properly with localized
/// resources associated with this form.
/// </summary>
public ref class CMyView : public System::Windows::Forms::Form //[color=#0000FF]Este tipo"View"no proviene de CView??[/color]
{
public:
CMyView(void)
Bueno en azúl esta mas bien la pregunta a todo...¿ Por qué esta clase no proviene de CView como la del proyecto EX04A? Una respuesta que es posible, supongo que me diriais..es que está encapsulada. Y el que tenga esos namespaces hace ques e usen variables, funciones y demas de esos namespaces.
Lo que intenté hacer, dentro del código, es darle propiedades a esta clase CMyView de CView, en la declaración de la clase, algo asi como añadir ::CView ( lo que seria, haciendo el paralelismo en Java, si mal no recuerdo, un extends). Y claro... no me ha compilado asi que por ahi no va la cosa...
¿ Cómo puedo meter ese objeto "CRect m_rectEllipse;" en este proyecto "nb" para que funciones como en el proyecto "EX04A"?