Login
Воспоминание Embedded ч2 27.11.2024
2499 просмотров
Перейти к просмотру всей ветки
in Antwort uscheswoi_82 28.11.24 22:22
Продолжим. Сегодня сделает программу телефонная книга, которая записывает в файл имя, фамилию и телефон.
1. Короче интерфейс должен выглядет вот так, имя будет называться - m_firstname, фамилия - m_lastname, а номер телефона - m_phonenumber:

2. Телефонный номер должен вводить только числа, т.е. Zahl=True:
3. Меню будет пусть называться Save:
4. Вот код:
// mfc_fileDlg.cpp : Implementierungsdatei
#include "stdafx.h"
#include "mfc_file.h"
#include "mfc_fileDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// Cmfc_fileDlg-Dialogfeld
Cmfc_fileDlg::Cmfc_fileDlg(CWnd* pParent /*=NULL*/)
: CDialog(Cmfc_fileDlg::IDD, pParent) {
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void Cmfc_fileDlg::DoDataExchange(CDataExchange* pDX) {
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, m_firstname);
DDX_Control(pDX, IDC_EDIT2, m_lastname);
DDX_Control(pDX, IDC_EDIT3, m_phonenumber);
}
BEGIN_MESSAGE_MAP(Cmfc_fileDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_COMMAND(IDOK, &Cmfc_fileDlg::OnSave)
END_MESSAGE_MAP()
// Cmfc_fileDlg-Meldungshandler
BOOL Cmfc_fileDlg::OnInitDialog() {
CDialog::OnInitDialog();
// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
// wenn das Hauptfenster der Anwendung kein Dialogfeld ist
SetIcon(m_hIcon, TRUE); // Großes Symbol verwenden
SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden
if(!m_dlgCommandBar.Create(this) ||
!m_dlgCommandBar.InsertMenuBar(IDR_MAINFRAME)) {
TRACE0("Fehler beim Erstellen der Befehlsleiste.\n");
return FALSE; // Fehler beim Erstellen
}
// TODO: Hier zusätzliche Initialisierung einfügen
return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void Cmfc_fileDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/) {
if(AfxIsDRAEnabled()) {
DRA::RelayoutDialog(
AfxGetResourceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_MFC_FILE_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_MFC_FILE_DIALOG));
}
}
#endif
void Cmfc_fileDlg::OnSave() {
// TODO: Fügen Sie hier Ihren Befehlsbehandlungscode ein.
struct DATABANK {
wchar_t firstname[80];
wchar_t lastname[80];
wchar_t phone[15];
};
DATABANK db;
CFile f(_T("databank.bin"), CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
CString c;
m_firstname.GetWindowTextW(c);
wcscpy(db.firstname, c);
m_lastname.GetWindowTextW(c);
wcscpy(db.lastname, c);
m_phonenumber.GetWindowTextW(c);
wcscpy(db.phone, c);
f.Write((void *)&db, sizeof(struct DATABANK));
f.Close();
}
5. Вуаля!

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении
Meine Die Formel der Liebe
Meine Die Formel der Liebe