Using CArray From Dialog Box
-
My small program is written on SDI. I have a CArray type data in my CProgramView.c and I would like to use it in one of my dialog box. Normally I do it within the dialog boxes but I dont understand the concept of SDI and dialog box. Can anyone give me some example coding? Thanks - VC++ newbie
-
My small program is written on SDI. I have a CArray type data in my CProgramView.c and I would like to use it in one of my dialog box. Normally I do it within the dialog boxes but I dont understand the concept of SDI and dialog box. Can anyone give me some example coding? Thanks - VC++ newbie
Try the following:
CFrameWnd* pFrame = (CFrameWnd*)AfxGetMainWnd(); CYourView* pView = (CYourView*)pFrame->GetActiveView(); pView->GetArray() ...
In case of SDI the first call returns the application frame window which contains the active document, view etc. The active view is your current view where your array is implemented. What you need to do is implement a member function GetArray which gives access to your data.;) However generaly it is not a good idea to have data in CView, use rather CDocument for your data and then access it using pFrame->GetActiveDocument() Cheers:rolleyes: -
Try the following:
CFrameWnd* pFrame = (CFrameWnd*)AfxGetMainWnd(); CYourView* pView = (CYourView*)pFrame->GetActiveView(); pView->GetArray() ...
In case of SDI the first call returns the application frame window which contains the active document, view etc. The active view is your current view where your array is implemented. What you need to do is implement a member function GetArray which gives access to your data.;) However generaly it is not a good idea to have data in CView, use rather CDocument for your data and then access it using pFrame->GetActiveDocument() Cheers:rolleyes:Thanks Abyss, But I still dont get the idea. Let me explain the task I need the program to do. I have a coordinate display in CView (I use OnDraw to draw out the x-axis and y-axis) that allows user to use mouse pointer to pick out coordinate points on CView. Each points will be collected into an array (CArray). I made a struct that contents two elements x & y to store x and y coordinates. Next, I have a dialog to list out the points. The dialog can be accessed from the menu. I am new to VC++ but I have b/ground in C. How can use MFC to ease my coding? 1) Must I use struct so store x & y in CArray? Is there another way? 2) How can I use the CArray in my listing dialog? I tried to declare public variables in CView (CArray myarray) but it doesnt allow me to declare. Thanks a million.
-
My small program is written on SDI. I have a CArray type data in my CProgramView.c and I would like to use it in one of my dialog box. Normally I do it within the dialog boxes but I dont understand the concept of SDI and dialog box. Can anyone give me some example coding? Thanks - VC++ newbie
When constructing the dialog from within one of the view's methods, pass the address of the
CArray
object. Something like:CMyDialog dlg(&array);
or
CMyDialog dlg;
dlg.m_pArray = &array;
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
-
Thanks Abyss, But I still dont get the idea. Let me explain the task I need the program to do. I have a coordinate display in CView (I use OnDraw to draw out the x-axis and y-axis) that allows user to use mouse pointer to pick out coordinate points on CView. Each points will be collected into an array (CArray). I made a struct that contents two elements x & y to store x and y coordinates. Next, I have a dialog to list out the points. The dialog can be accessed from the menu. I am new to VC++ but I have b/ground in C. How can use MFC to ease my coding? 1) Must I use struct so store x & y in CArray? Is there another way? 2) How can I use the CArray in my listing dialog? I tried to declare public variables in CView (CArray myarray) but it doesnt allow me to declare. Thanks a million.
In my opinion David (see bellow) proposed a simpler approach so in the CView member function where you construct the dialog pass the array to you dialog constructor. I recommend to use CPoint instead of your structure which stores x,y. The member function of the CView can be called via MFC message command. 1) Use CPoint in CArray to store points. 2) It is not a good idea to create public members in any class.
-
When constructing the dialog from within one of the view's methods, pass the address of the
CArray
object. Something like:CMyDialog dlg(&array);
or
CMyDialog dlg;
dlg.m_pArray = &array;
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
-
&array is the array from my view? It is from different class. Myarray is from CView however CDialog is a different class. I need to know how to use myarray in CDialog. THanks.
Depending on how you want to pass the array from the view to the dialog, you'll either need to create a new constructor for the dialog, or make one of its member variables
public
so that the view can assign a value to it directly. In either case, the dialog will have aCArray*
as a member variable. Once it has been assigned a value, it can be used as you like.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
-
Depending on how you want to pass the array from the view to the dialog, you'll either need to create a new constructor for the dialog, or make one of its member variables
public
so that the view can assign a value to it directly. In either case, the dialog will have aCArray*
as a member variable. Once it has been assigned a value, it can be used as you like.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
-
I have a struct under CDoc struct MyStruct { float x; float y; }; I use it for CArray. I dont know how to define a public variable with struct. Thanks
You need to put the struct in a
.h
file by itself. Then each of the.cpp
or.h
files that need it can simply#include
it.mystruct.h:
struct MyStruct
{
float x;
float y;
};typedef CArray<MyStruct*, MyStruct*> MyStructArray;
Now the view and the dialog can each have a
MyStructArray
member variable.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
-
You need to put the struct in a
.h
file by itself. Then each of the.cpp
or.h
files that need it can simply#include
it.mystruct.h:
struct MyStruct
{
float x;
float y;
};typedef CArray<MyStruct*, MyStruct*> MyStructArray;
Now the view and the dialog can each have a
MyStructArray
member variable.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
There are quite a number of errors: typedef CArray MyStructArray; error C2143: syntax error : missing ';' before '<' So, after I construct mystruct.h, I can add Add Member Variable (public) for Variable Type (MyStructArray)? Besides, I always get error on CDoc* GetDocument(); in my CView.h.
-
There are quite a number of errors: typedef CArray MyStructArray; error C2143: syntax error : missing ';' before '<' So, after I construct mystruct.h, I can add Add Member Variable (public) for Variable Type (MyStructArray)? Besides, I always get error on CDoc* GetDocument(); in my CView.h.
jw81 wrote: typedef CArray MyStructArray; error C2143: syntax error : missing ';' before '<'
CArray
requiresafxtempl.h
to be included. I would suggest doing so in the project'sstdafx.h
file.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
-
jw81 wrote: typedef CArray MyStructArray; error C2143: syntax error : missing ';' before '<'
CArray
requiresafxtempl.h
to be included. I would suggest doing so in the project'sstdafx.h
file.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
-
Hi The CDoc* GetDocument(); error is not solved yet. It only happens when I included my CView.h into the cpp. Thanks
What file are you including
CView.h
in? I would hazard a guess that you also need to include theCDoc.h
file right above that statement.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
-
What file are you including
CView.h
in? I would hazard a guess that you also need to include theCDoc.h
file right above that statement.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
-
jw81 wrote: typedef CArray MyStructArray; error C2143: syntax error : missing ';' before '<'
CArray
requiresafxtempl.h
to be included. I would suggest doing so in the project'sstdafx.h
file.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow