الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعدة في Dialogs في VC++ 6.0

مغلق
بدأه مجلـد جديـد في 15 مايو 2007 · 2 رد · 496 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اريد ان اعمل برنامج يتعامل مع Singly Linked List بشكل مبسط جداً باستخدام ال Dialogs فقط .

رسمت زر لانشاء List جديدة وزر آخر لاضافة عنصر Add First .

المشكلة الآن هي اين اضع الكود الخاص بانشاء قائمة جديدة ( يعني object من نوع class Singly ) وايضاً اين اضع الكود الخاص باضافة عنصر جديد ؟

للتوضيح ، هذه هي الواجهة :

single01.gif

و هذه هي ال Workspace :

single02.gif

الملفات التي عدلت عليها هي كتالي :

1) ملف single.cpp

// single.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "single.h"
#include "singleDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSingleApp

BEGIN_MESSAGE_MAP(CSingleApp, CWinApp)
	//{{AFX_MSG_MAP(CSingleApp)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//	DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG
	ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSingleApp construction

CSingleApp::CSingleApp()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CSingleApp object

CSingleApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CSingleApp initialization

BOOL CSingleApp::InitInstance()
{
	AfxEnableControlContainer();

	// Standard initialization
	// If you are not using these features and wish to reduce the size
	//  of your final executable, you should remove from the following
	//  the specific initialization routines you do not need.

#ifdef _AFXDLL
	Enable3dControls();			// Call this when using MFC in a shared DLL
#else
	Enable3dControlsStatic();	// Call this when linking to MFC statically
#endif

	CSingleDlg dlg;
	m_pMainWnd = &dlg;
	int nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with OK
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with Cancel
	}

	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}



Node::Node( int nd )
{
	data = nd;
	next = NULL;
}



Singly::Singly()
{
	firstPtr = NULL;
}

void Singly::addFirst( int nd )
{
	Node* newNode = new Node( nd );
	if ( firstPtr != NULL )
		{
		newNode -> next = firstPtr;
		firstPtr = newNode;
		}
	else
		firstPtr = newNode;
}

2) ملف single.h

// single.h : main header file for the SINGLE application
//

#if !defined(AFX_SINGLE_H__70FD0719_13BC_4585_AAE8_F60EF8B7476E__INCLUDED_)
#define AFX_SINGLE_H__70FD0719_13BC_4585_AAE8_F60EF8B7476E__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__
	#error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h"		// main symbols

/////////////////////////////////////////////////////////////////////////////
// CSingleApp:
// See single.cpp for the implementation of this class
//

class CSingleApp : public CWinApp
{
public:
	CSingleApp();

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CSingleApp)
	public:
	virtual BOOL InitInstance();
	//}}AFX_VIRTUAL

// Implementation

	//{{AFX_MSG(CSingleApp)
		// NOTE - the ClassWizard will add and remove member functions here.
		//	DO NOT EDIT what you see in these blocks of generated code !
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

class Node
{
public:
	Node( int );

	Node* next;
	int data;
};

class Singly
{
public:
	Singly();

	void addFirst( int );

Node* firstPtr;
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SINGLE_H__70FD0719_13BC_4585_AAE8_F60EF8B7476E__INCLUDED_)

3) ملف singleDlg.cpp

// singleDlg.cpp : implementation file
//

#include "stdafx.h"
#include "single.h"
#include "singleDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSingleDlg dialog

CSingleDlg::CSingleDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSingleDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSingleDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSingleDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSingleDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSingleDlg, CDialog)
	//{{AFX_MSG_MAP(CSingleDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_SLL, OnSll)
	ON_BN_CLICKED(IDC_ADD_FIRST, OnAddFirst)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSingleDlg message handlers

BOOL CSingleDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// TODO: Add extra initialization here

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CSingleDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CSingleDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CSingleDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CSingleDlg::OnOK() 
{
	// TODO: Add extra validation here

	CDialog::OnOK();
}

void CSingleDlg::OnCancel() 
{
	// TODO: Add extra cleanup here

	CDialog::OnCancel();
}

void CSingleDlg::OnSll() 
{
	Singly my1;
}

void CSingleDlg::OnAddFirst() 
{
	Singly::addFirst( 1 );

}

طبعا هناك خطأ في الدالة Add First بسبب الربط بينه وبين class singly .. وايضاً ادخال القيمة ال data لم أقم بعمله حتى الآن ، لكن المطلوب شرحه هو كيف أقوم بدمج الكود ؟ وماهي الطريقة الصحيحة ؟

#2

اعتذر عن عدم ظهور اللون الأحمر على التعديل ، لكن تلاحظ وجود كود اللون قبل كل تعديل ( )

#3

وين اضع الكود الخاص بالقائمة Singly Linked List ؟ هي يكون في single.h ؟

هذا الموضوع مغلق.

مواضيع مشابهة