0

Hello, I'm trying to get an OOP MFC application working, so far it complies and everything but nothing happens. And I cant work out why. I would post code snippets but the simple fact is the MFC lib is far too big for that stuff. I've zipped up my project but be warned its 5 mb!

Any help would be appricated and sorry if its in the wrong forum.

http://www.bsc-coding.com/GUI.zip

2
Contributors
15
Replies
16
Views
11 Years
Discussion Span
Last Post by Acidburn
0

did you delete the debug and/or release directories before you zipped of those files? And what compiler/version did you use?

Acient this is MFC not normal C++ , the large file size i beleive is down to the inc libs and the visual forms, using .NET 2003

0

Yes, I know a lot about MFC -- the compiler creates one of two sub-directories under the directory that contains the source file(s) -- <source>/debug for debug builds and <source>/release for release builds. Both directories contain all the *.objs, *.sbrs, *.pch and several other compiler-generated files. You need to delete those directories because they are huge.

It is not necessary to add system *.lib files to the source directory.

The actual source file(s) in your project should zip up to only a few hundred K, well under one meg, unless you have a really really huge project consisting of several hundred *.cpp and *.h files.

People will be more willing to download your project if you strip it of all the unnecessary files before zipping.

0

Hello,

sorry for the quick harsh reply. I've updated the zip file and its less than 180kb. I've got the project to compile, but when you add a recording it doesnt seem to add, nor does it print correctly. Any assistance would be greatly appricated.

John

0

If you haven't already figured it out yourself, you will need to pass the array to ShowRecordingsDlg constructor so that it can have access to the information.,

// ShowRecordingsDlg.h

class CShowRecordingsDlg : public CDialog
{
	DECLARE_DYNAMIC(CShowRecordingsDlg)

public:
   CShowRecordingsDlg(CRecording* recordings,CWnd* pParent = NULL);   // standard constructor
	virtual ~CShowRecordingsDlg();

// Dialog Data
	enum { IDD = IDD_SHOWRECORDING };

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	DECLARE_MESSAGE_MAP()
	CRecording* m_recordings;
public:
	CEdit ShowArtist;
	CEdit ShowTitle;
	CEdit ShowLenght;
	int m_nIndex;
	afx_msg void Forwardbtn();

	void display();
};
// ShowRecordingsDlg.cpp

CShowRecordingsDlg::CShowRecordingsDlg(CRecording* recordings,CWnd* pParent /*=NULL*/)
	: CDialog(CShowRecordingsDlg::IDD, pParent)
{
	m_nIndex = 0;
	m_recordings = recordings;
}

Make the above and the dialog will have access to the entire array. Create an OnInitDialog() event handler and populate the dialog's controls there.

0

Hello, thanks for the reply I've implemented the changes to match your code in the red, however something nasty happend:

c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.h(12): error C2143: syntax error : missing ')' before '*'
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.h(12): error C2143: syntax error : missing ';' before '*'
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.h(12): error C2460: 'CShowRecordingsDlg::CRecording' : uses 'CShowRecordingsDlg', which is being defined
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.h(12): error C2501: 'CShowRecordingsDlg::recordings' : missing storage-class or type specifiers
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.h(12): error C2143: syntax error : missing ';' before '*'
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.h(12): error C2501: 'CShowRecordingsDlg::CWnd' : missing storage-class or type specifiers
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.h(12): error C2059: syntax error : ')'
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.h(12): error C2864: 'pParent' : only const static integral data members can be initialized inside a class or struct
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.h(12): error C2501: 'CShowRecordingsDlg::pParent' : missing storage-class or type specifiers
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.h(24): error C2143: syntax error : missing ';' before '*'
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.h(24): error C2501: 'CShowRecordingsDlg::CRecording' : missing storage-class or type specifiers
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.h(24): error C2501: 'CShowRecordingsDlg::m_recordings' : missing storage-class or type specifiers
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(15): error C2065: 'recordings' : undeclared identifier
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(15): error C2597: illegal reference to non-static member 'CShowRecordingsDlg::CRecording'
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(15): error C2065: 'pParent' : undeclared identifier
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(15): error C2275: 'CWnd' : illegal use of this type as an expression
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(16): error C2448: 'CShowRecordingsDlg::CShowRecordingsDlg' : function-style initializer appears to be a function definition
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(16): error C2143: syntax error : missing ';' before ':'
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(16): error C2143: syntax error : missing ')' before ','
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(16): error C2365: 'IDD' : redefinition; previous definition was a 'enumerator'
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(16): error C2244: 'IDD' : unable to match function definition to an existing declaration
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(16): error C2059: syntax error : ')'
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(17): error C2371: 'pParent' : redefinition; different basic types
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(17): error C2143: syntax error : missing ';' before '{'
c:\Documents and Settings\Administrator\Desktop\RecordingUI\ShowRecordingsDlg.cpp(17): error C2447: '{' : missing function header (old-style formal list?)
c:\Documents and Settings\Administrator\Desktop\RecordingUI\AddRecordingDlg.cpp(43): error C2065: 'm_nRecCount' : undeclared identifier

0

I forget to mention that you need to add includes in the .h file(s). Attached is the project that compiles cleanly. I didn't add anything to display the array -- just to pass the array.

0

I forget to mention that you need to add includes in the .h file(s). Attached is the project that compiles cleanly. I didn't add anything to display the array -- just to pass the array.

intresting , may I ask what I can change CEdit to. I've got a box that I want to update fields from rather than get details from the user.

0

You could still use CEdit -- make it read-only and set its value in the OnInitDialog() method (or someplate else). Alternatively you could use a CStatic control. They don't have scroll bars, so if the text is too big you won't be able to see part of it. A read-only CEdit is better for large amounts of text so that the user can use the scroll bars (set them in the property)

0

Ok, well I've tried to add the following changes:

showRecordingDlg.h;

public:
	[b]CStatic ShowArtist[/b];
	CEdit ShowTitle;
	CEdit ShowLenght;
	int m_nIndex;
	afx_msg void Forwardbtn();

and have tried to pass arguemnts to it:

in the .cpp file:

void CShowRecordingsDlg::Forwardbtn()
{
	[b]ShowArtist = m_recordings->m_sArtist;[/b]
	m_nIndex++;
}

but I still get this error:

c:\Documents and Settings\Administrator\Desktop\RecordingUI1\RecordingUI\ShowRecordingsDlg.cpp(43): error C2582: 'operator =' function is unavailable in 'CStatic'

it was my unstanding that you can do this with a Cstatic control?

0

Most controls are derived from CWnd class, and all of them have SetWindowText() method. Use the control's SetWindowText method to show text

ShowArtist.SetWindowText(m_recordings->m_sArtist);
0

Hello acient, thanks for your reply. I'm learning so much. However this works but it doesnt seem to get the data from the varibles.

I've added this code:

UpdateData(true); before everything else in the function. But it still prints out default values.

0

Hello acient, thanks for your reply. I'm learning so much. However this works but it doesnt seem to get the data from the varibles.

I've added this code:

UpdateData(true); before everything else in the function. But it still prints out default values.

how did you pass recordings? The whole array as I had in my example? or just the relevent array element?

CShowRecordingsDlg dlg(m_aRec);
or
	CShowRecordingsDlg dlg(&m_aRec[m_nRecCount]);

If you did the first example, then recordings-> will only point to the first array element. You will need to use the index of the element you want to display

ShowArtist.SetWindowText(m_recordings[index]m_sArtist);
0

Hello, I've used your way and changed the folowing code to read this:

void CShowRecordingsDlg::Forwardbtn()
{	
	if (m_nIndex < 99 )
	{
	//UpdateData(true);
	//MessageBox(m_recordings[m_nIndex].m_sArtist);
	m_nIndex++;
	ShowArtist.SetWindowText(m_recordings[m_nIndex].m_sArtist);
	ShowTitle.SetWindowText(m_recordings[m_nIndex].m_sTitle);
	}
	else
		MessageBox("Can't hold anymore records", "OverFlow", MB_OK);


}

it prints the title but not the artisit :S cant work out why

[edit] ok stupid me was overriding it with 2 functions :S thats most likely why and its now been fixed yippe.. time to sort out thos radar buttons.

Thanks for your help buddy, heres a pint from me ... ... ... ok they dont do an icon :P

0

Hello guys a new problem as pop'd up:

c:\Documents and Settings\Administrator\Desktop\RecordingUI1\RecordingUI\RecordingUIDlg.cpp(168): error C2664: 'CRecording::SetMedium' : cannot convert parameter 1 from 'int' to 'MediumType'

however MediumType is an enum:

enum MediumType { CD = 0, DAT, CASSETTE } ;

Any ideas?

I'm trying to pass an int to the function which should be correct :S

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.