Deutsch

Воспоминание Embedded ч2 27.11.2024

718  
uscheswoi_82 коренной житель27.11.24 19:22
uscheswoi_82
NEW 27.11.24 19:22 

Всем привет!

Тут писал про Embedded см. https://groups.germany.ru/12994140000001/f/41025455.html?C...

Но сначало оффтоп. Вчера, сегодня я ел и пил вот это:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#1 
uscheswoi_82 коренной житель27.11.24 19:24
uscheswoi_82
NEW 27.11.24 19:24 
в ответ uscheswoi_82 27.11.24 19:22

Завтра будет это:


Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#2 
uscheswoi_82 коренной житель27.11.24 21:26
uscheswoi_82
NEW 27.11.24 21:26 
в ответ uscheswoi_82 27.11.24 19:24

Сегодня пойдёт речь о Microsoft Smartphone 2002.

Короче был прототип такой у Microsoft, назывался Stinger:



Вот так выглядел смартфон 2003 версии:









Вот так выглядет Microsoft eMbedded Visual C++ 3.0:

1. Нажмём File->New.., и выберем во вкладке Projects, выберем масте WCE Smartphone 2002 Application:



2. Появится диалоговое окно "WCE Smartphone 2002 Application", выберим "A typical "Hello World" application":



Создастся такой код test_sp2002.cpp:

#include <windows.h>
#include <aygshell.h>
#include "resource.h"

HINSTANCE g_hInst = NULL;
HWND hwndMain = NULL;

TCHAR szAppName[] = TEXT("Smartphone 2002 Application");
TCHAR szTitle[]   = TEXT("Smartphone 2002");
TCHAR szMessage[] = TEXT("Hello Smartphone 2002!");

//FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//PURPOSE:  Processes messages for the main window.
//WM_COMMAND - process the application menu
//WM_PAINT   - Paint the main window
//WM_DESTROY - post a quit message and return
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
  LRESULT lResult = TRUE;
  HDC hdc;
  PAINTSTRUCT ps;
  RECT rect;
  switch(msg) {
    case WM_CREATE:
      SHMENUBARINFO mbi;
      ZeroMemory(&mbi, sizeof(SHMENUBARINFO));
      mbi.cbSize = sizeof(SHMENUBARINFO);
      mbi.hwndParent = hwnd;
      mbi.nToolBarId = IDR_HELLO_MENUBAR;
      mbi.hInstRes = g_hInst;

      if(!SHCreateMenuBar(&mbi)) {
        PostQuitMessage(0);
      }
    break;
    case WM_COMMAND:
      switch(wp) {
        case IDOK:
          SendMessage(hwnd, WM_CLOSE, 0, 0);
        break;
        default:
          return DefWindowProc(hwnd, msg, wp, lp);
      }
    break;
    case WM_PAINT: 
      hdc = BeginPaint(hwnd, &ps);
      GetClientRect(hwnd, &rect);
      DrawText(hdc, szMessage, -1, &rect, DT_SINGLELINE | 
      DT_CENTER | DT_VCENTER);
      EndPaint(hwnd, &ps);
    break;
    case WM_CLOSE:
      DestroyWindow(hwnd);
    break;
    case WM_DESTROY:
      PostQuitMessage(0);
    break;
    default:
      lResult = DefWindowProc(hwnd, msg, wp, lp);
    break;
  }
  return(lResult);
}

//FUNCTION: InitInstance(HANDLE, int)
//PURPOSE: Saves instance handle and creates main window
//COMMENTS:
//  In this function, we save the instance handle in a global variable and
//  create and display the main program window.
BOOL InitInstance(HINSTANCE hInstance, int CmdShow) {
  g_hInst = hInstance;
  hwndMain = CreateWindow(szAppName,                        
  szTitle,
  WS_VISIBLE,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  NULL, 
  NULL, 
  hInstance, 
  NULL);
  if(!hwndMain) {
    return FALSE;
  }
  ShowWindow(hwndMain, CmdShow);
  UpdateWindow(hwndMain);
  return TRUE;
}

//FUNCTION: InitApplication(HANDLE)
//PURPOSE: Sets the properties for our window.
BOOL InitApplication(HINSTANCE hInstance) {
  WNDCLASS wc;
  BOOL f;
  wc.style = CS_HREDRAW | CS_VREDRAW;
  wc.lpfnWndProc = (WNDPROC)WndProc;
  wc.cbClsExtra = 0;
  wc.cbWndExtra = 0;
  wc.hIcon = NULL;
  wc.hInstance = hInstance;
  wc.hCursor = NULL;
  wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  wc.lpszMenuName = NULL;
  wc.lpszClassName = szAppName;
  f = (RegisterClass(&wc));
  return f;
}

//  FUNCTION: WinMain(HANDLE, HANDLE, LPWSTR, int)
//  PURPOSE: Entry point for the application
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int CmdShow) {
  MSG msg;
  HWND hHelloWnd = NULL; 
  hHelloWnd = FindWindow(szAppName, szTitle); 
  if(hHelloWnd) {
    SetForegroundWindow(hHelloWnd);    
    return 0;
  }

  if(!hPrevInstance) {
    if(!InitApplication(hInstance)) { 
      return(FALSE); 
    }
  }

  if(!InitInstance(hInstance, CmdShow)) {
    return(FALSE);
  }
 
  while(GetMessage(&msg, NULL, 0,0) == TRUE) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return(msg.wParam);
}



Потом test_sp2002.rc:

//Microsoft Developer Studio generated resource script.
#include "resource.h"

// Menu
IDR_HELLO_MENUBAR RCDATA
BEGIN
  0,
  1,
  I_IMAGENONE, 
  IDOK, 
  TBSTATE_ENABLED, 
  TBSTYLE_BUTTON | 
  TBSTYLE_AUTOSIZE,
  IDS_HELLO_OK, 
  0, 
  NOMENU,
END

STRINGTABLE DISCARDABLE
BEGIN
  IDS_HELLO_OK "OK"
END



И resource.h:

// Microsoft Developer Studio generated include file.
// Used by TEST_SP2002.RC
#include <windows.h>
#include <aygshell.h>
#include <tpcuser.h>

// BUGBUG
#define TPC

#define IDC_STATIC  (-1)
#define IDR_HELLO_MENUBAR  101
#define IDS_HELLO_OK  102

// Next default values for new objects
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC  1
#define _APS_NEXT_RESOURCE_VALUE  103
#define _APS_NEXT_COMMAND_VALUE  40001
#define _APS_NEXT_CONTROL_VALUE  1000
#define _APS_NEXT_SYMED_VALUE  101
#endif
#endif


Так выглядет эмулятор 2002:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#3 
uscheswoi_82 коренной житель27.11.24 21:45
uscheswoi_82
NEW 27.11.24 21:45 
в ответ uscheswoi_82 27.11.24 21:26

Этот пример отображает на экране телефона надпись "Hello Smartphone 2002!", и слева будет кнопка/меню OK. При нажатие на кнопку/меню OK, приложение закрывается.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#4 
uscheswoi_82 коренной житель27.11.24 21:51
uscheswoi_82
NEW 27.11.24 21:51 
в ответ uscheswoi_82 27.11.24 21:45

UI 2002 версии было имхо не очень. Так выглядет UI 2003 версии:


Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#5 
uscheswoi_82 коренной житель27.11.24 21:58
uscheswoi_82
NEW 27.11.24 21:58 
в ответ uscheswoi_82 27.11.24 21:51
UI 2002 версии было имхо не очень. Так выглядет UI 2003 версии:

Ну точнее не столь UI, просто в 2002 версии имхо было меньше возможностей, чем в 2003 версии. Но UI было сильно ограничены компоненты хоть в 2002 и хоть в 2003, допустим были только - текстовое поле, чек-боксы, combobox, полосы прокрутки, и две кнопки/меню, хотя можно было бы сделать в принципе свои компоненты. Ну допустим хотелось чтобы был календарь, в обычной Windows он имхо есть, а там нет. Там всё урезано, потому-что ОС Microsoft Smartphone 2002/2003 весила где-то 8 мбайт, по нынишним меркам это очень мало.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#6 
uscheswoi_82 коренной житель28.11.24 22:06
uscheswoi_82
NEW 28.11.24 22:06 
в ответ uscheswoi_82 27.11.24 21:58

Продолжим дальше, но уже в VS 2005, но сначало оффтоп.

Вчера я ел это:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#7 
uscheswoi_82 коренной житель28.11.24 22:14
uscheswoi_82
NEW 28.11.24 22:14 
в ответ uscheswoi_82 28.11.24 22:06

1. Запустим Microsoft Visual Studio 2005, и создадим проект Neu->Projekt...:


2. В диалоговом окне "Neues Projekt", выберем "Visual C++", и "MFC-Anwendwendung für Intelligente Geräte", назовём проект "hello_w":


3. Запустится мастер, в "Plattformen" выберем в "Ausgwählte SDKs" Smartphone 2003:


4. В Anwendungstyp выберем "Auf Dialogfeldern basierend", в Ressourcesprache Deutsch, в "Verwendung von MFC" выберем "MFC in einer statischen Bibliothek verwenden":


5. В Benutzeroberflächenfeatures в "Dialogfeldtittel" напишим "Hello World Smartphone 2003":


6. Дальше пусть будет так, нажмём на кнопку "Fertig stellen":

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#8 
uscheswoi_82 коренной житель28.11.24 22:19
uscheswoi_82
NEW 28.11.24 22:19 
в ответ uscheswoi_82 28.11.24 22:14

Теперь сделаем следующее:

1.



2.



3.



4.



5.



Вот код hello_w.cpp:

// hello_wDlg.cpp : Implementierungsdatei
#include "stdafx.h"
#include "hello_w.h"
#include "hello_wDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// Chello_wDlg-Dialogfeld
Chello_wDlg::Chello_wDlg(CWnd* pParent /*=NULL*/)
: CDialog(Chello_wDlg::IDD, pParent)
, m_Text(_T("")) {
  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void Chello_wDlg::DoDataExchange(CDataExchange* pDX) {
  CDialog::DoDataExchange(pDX);
  DDX_Text(pDX, IDC_EDIT1, m_Text);
  DDX_Control(pDX, IDC_EDIT1, m_Text2);
}

BEGIN_MESSAGE_MAP(Chello_wDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
  ON_WM_SIZE()
#endif
 //}}AFX_MSG_MAP
 ON_COMMAND(IDOK, &Chello_wDlg::OnOk)
END_MESSAGE_MAP()

// Chello_wDlg-Meldungshandler
BOOL Chello_wDlg::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 Chello_wDlg::OnSize(UINT /*nType*/, 
int /*cx*/, int /*cy*/) {
  if(AfxIsDRAEnabled()) {
    DRA::RelayoutDialog(
    AfxGetResourceHandle(), 
    this->m_hWnd, 
    DRA::GetDisplayMode() != DRA::Portrait ? 
    MAKEINTRESOURCE(IDD_HELLO_W_DIALOG_WIDE) : 
    MAKEINTRESOURCE(IDD_HELLO_W_DIALOG));
  }
}
#endif

void Chello_wDlg::OnOk() {
  // TODO: Fügen Sie hier Ihren Befehlsbehandlungscode ein.
  LPTSTR lText;
  m_Text2.GetWindowTextW(lText, m_Text2.GetWindowTextLengthW() + 1);
  AfxMessageBox(lText);
}


Вот код hello_w.rc:

// Microsoft Visual C++ generated resource script.
#include "resourcesp.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Generated from the TEXTINCLUDE 2 resource.
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Deutsch (Deutschland) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// TEXTINCLUDE
1 TEXTINCLUDE 
BEGIN
    "resourcesp.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
  "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
  "#define _AFX_NO_OLE_RESOURCES\r\n"
  "#define _AFX_NO_TRACKER_RESOURCES\r\n"
  "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
  "\r\n"
  "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)\r\n"
  "LANGUAGE 7, 1\r\n"
  "#pragma code_page(1252)\r\n"
  "#include ""res\\hello_wsp.rc2""  // Nicht mit Microsoft Visual C++ bearbeitete Ressourcen\r\n"
  "#include ""afxres.rc""     // Standardkomponenten\r\n"
  "#endif\r\n"
  "\0"
END
#endif // APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////
// Icon
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME ICON "res\\hello_w.ico"

/////////////////////////////////////////////////////////////////////////////
// Menu
IDR_MAINFRAME MENU 
BEGIN
  MENUITEM "OK", IDOK
END

/////////////////////////////////////////////////////////////////////////////
// Dialog


IDD_HELLO_W_DIALOG DIALOG  0, 0, 113, 116
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION
EXSTYLE WS_EX_APPWINDOW | 0x80000000L
CAPTION "Hello World Smartphone 2003"
FONT 8, "MS Shell Dlg"
BEGIN
  LTEXT "Vvedite Text:",IDC_STATIC,8,7,54,11
  EDITTEXT IDC_EDIT1,7,15,78,14,ES_AUTOHSCROLL
END




/////////////////////////////////////////////////////////////////////////////
// Version
//
VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "040704e4"
      BEGIN
        VALUE "CompanyName", "TODO: <Firmenname>"
        VALUE "FileDescription", "TODO: <Dateibeschreibung>"
        VALUE "FileVersion", "1.0.0.1"
        VALUE "InternalName", "hello_w.exe"
        VALUE "LegalCopyright", "TODO: (c) <Firmenname>. Alle Rechte vorbehalten."
        VALUE "OriginalFilename", "hello_w.exe"
        VALUE "ProductName", "TODO: <Produktname>"
        VALUE "ProductVersion", "1.0.0.1"
      END
    END


    BLOCK "VarFileInfo"
      BEGIN
        VALUE "Translation", 0x407, 1252
      END
END




/////////////////////////////////////////////////////////////////////////////
// DESIGNINFO


#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO 
BEGIN
  IDD_HELLO_W_DIALOG, DIALOG
  BEGIN
    LEFTMARGIN, 7
    RIGHTMARGIN, 106
    TOPMARGIN, 7
    BOTTOMMARGIN, 109
  END
END
#endif // APSTUDIO_INVOKED




/////////////////////////////////////////////////////////////////////////////
// String Table


STRINGTABLE 
BEGIN
  IDS_OK "OK"
END


#endif // Deutsch (Deutschland) resources
/////////////////////////////////////////////////////////////////////////////


#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// Generated from the TEXTINCLUDE 3 resource.
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES


#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
LANGUAGE 7, 1
#pragma code_page(1252)
#include "res\hello_wsp.rc2"  // Nicht mit Microsoft Visual C++ bearbeitete Ressourcen
#include "afxres.rc"     // Standardkomponenten
#endif


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED


Вуаля:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#9 
uscheswoi_82 коренной житель28.11.24 22:22
uscheswoi_82
NEW 28.11.24 22:22 
в ответ uscheswoi_82 28.11.24 22:19

Про MFC можете почитать тут см.:

https://programming.mybb.ru/viewtopic.php?id=131

https://programming.mybb.ru/viewtopic.php?id=141

https://programming.mybb.ru/viewtopic.php?id=142

https://programming.mybb.ru/viewtopic.php?id=152

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#10 
uscheswoi_82 коренной житель04.12.24 03:51
uscheswoi_82
NEW 04.12.24 03:51 
в ответ 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. Вуаля!


Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#11 
uscheswoi_82 коренной житель04.12.24 04:10
uscheswoi_82
NEW 04.12.24 04:10 
в ответ uscheswoi_82 04.12.24 03:51

Создастся вот-такой бинарный файл databank.bin, с данными Anton Popov, и телефонным номером 0123456:

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#12 
uscheswoi_82 коренной житель04.12.24 05:12
uscheswoi_82
NEW 04.12.24 05:12 
в ответ uscheswoi_82 04.12.24 04:10

Сохранилось в файл databank.bin A n t o n, P o p o v, 0 1 2 3 4 5 6 вместо Anton Popov 0123456 потому-что это юникод, т.е. я использовал wchar_t с английского wide char. А везде î стоит, потому-что я не иницилиазировал строку, чтобы инициализировать нужно либо использовать функцию memset см. https://cplusplus.com/reference/cstring/memset/

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#13 
uscheswoi_82 коренной житель6 дней назад, 08:49
uscheswoi_82
NEW 6 дней назад, 08:49 
в ответ uscheswoi_82 04.12.24 05:12

Доброе утро! Продолжим воспоминание. Но сегодня речь пойдёт о C#:

1. Запустим Visual Studio 2005, нажмём Datei->Neu->Projekt...:, появится диалоговое окна Neues Projekt, там выберим Visual C#->Intelligents Gerät и Geräteanwendung:


2. Нажмём на OK.

3. Сделаем так:



4. Забыл сменить заголовок, напишим Text=Say name!:


5. Вот код Form1.cs:

#region Using directives
using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Data;
#endregion
namespace DeviceApplication1 {
  /// <summary>
  /// Zusammenfassungsbeschreibung für das Formular.
  /// </summary>
  public class Form1 : System.Windows.Forms.Form {
    private MenuItem menuItem1;
    private MenuItem menuItem2;
    private Label label1;
    private TextBox textBox1;
    /// <summary>
    /// Hauptmenü des Formulars.
    /// </summary>
    private System.Windows.Forms.MainMenu mainMenu1;

    public Form1() {
      InitializeComponent();
    }

    /// <summary>
    /// Verwendete Ressourcen bereinigen.
    /// </summary>
    protected override void Dispose(bool disposing) {
      base.Dispose(disposing);
    }

    #region Vom Windows Form-Designer generierter Code
    /// <summary>
    /// Erforderliche Methode für die Designerunterstützung.
    /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    /// </summary>
    private void InitializeComponent() {
      this.mainMenu1 = new System.Windows.Forms.MainMenu();
      this.label1 = new System.Windows.Forms.Label();
      this.textBox1 = new System.Windows.Forms.TextBox();
      this.menuItem1 = new System.Windows.Forms.MenuItem();
      this.menuItem2 = new System.Windows.Forms.MenuItem();
      // 
      // mainMenu1
      // 
      this.mainMenu1.MenuItems.Add(this.menuItem1);
      this.mainMenu1.MenuItems.Add(this.menuItem2);
      // 
      // label1
      // 
      this.label1.Location = new System.Drawing.Point(4, 4);
      this.label1.Size = new System.Drawing.Size(152, 22);
      this.label1.Text = "Your name:";
      // 
      // textBox1
      // 
      this.textBox1.Location = new System.Drawing.Point(4, 30);
      this.textBox1.Size = new System.Drawing.Size(152, 24);
      // 
      // menuItem1
      // 
      this.menuItem1.Text = "OK";
      this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);
      // 
      // menuItem2
      // 
      this.menuItem2.Text = "Exit";
      this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
      // 
      // Form1
      // 
      this.ClientSize = new System.Drawing.Size(176, 180);
      this.Controls.Add(this.label1);
      this.Controls.Add(this.textBox1);
      this.Menu = this.mainMenu1;
      this.Text = "Say name!";
      this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
    }
    #endregion

    /// <summary>
    /// Der Haupteinstiegspunkt für die Anwendung.
    /// </summary>
    static void Main() {
      Application.Run(new Form1());
    }

    private void menuItem1_Click(object sender, EventArgs e) {
      MessageBox.Show("Hello " + this.textBox1.Text + "!"); // Выводим на экран Hello "имя"!
    }

    private void menuItem2_Click(object sender, EventArgs e) {
      this.Close(); // Закрываем наше приложение
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
      if((e.KeyCode == System.Windows.Forms.Keys.F1)) {
        // Bildschirmtaste 1
        // Nicht behandelt, wenn ein Menü vorhanden ist.
      }
      if((e.KeyCode == System.Windows.Forms.Keys.F2)) {
        // Bildschirmtaste 2
        // Nicht behandelt, wenn ein Menü vorhanden ist.
      }
      if((e.KeyCode == System.Windows.Forms.Keys.Up)) {
        // Nach oben 
      }
      if((e.KeyCode == System.Windows.Forms.Keys.Down)) {
        // Nach unten
      }
      if((e.KeyCode == System.Windows.Forms.Keys.Left)) {
        // Links
      }
      if((e.KeyCode == System.Windows.Forms.Keys.Right)) {
        // Rechts
      }
      if((e.KeyCode == System.Windows.Forms.Keys.Enter)) {
        // Eingabe
      }
      if((e.KeyCode == System.Windows.Forms.Keys.D1)) {
        // 1
      }
      if((e.KeyCode == System.Windows.Forms.Keys.D2)) {
        // 2
      }
      if((e.KeyCode == System.Windows.Forms.Keys.D3)) {
        // 3
      }
      if((e.KeyCode == System.Windows.Forms.Keys.D4)) {
        // 4
      }
      if((e.KeyCode == System.Windows.Forms.Keys.D5)) {
        // 5
      }
      if((e.KeyCode == System.Windows.Forms.Keys.D6)) {
        // 6
      }
      if((e.KeyCode == System.Windows.Forms.Keys.D7)) {
        // 7
      }
      if((e.KeyCode == System.Windows.Forms.Keys.D8)) {
        // 8
      }
      if((e.KeyCode == System.Windows.Forms.Keys.D9)) {
        // 9
      }
      if((e.KeyCode == System.Windows.Forms.Keys.F8)) {
        // *
      }
      if((e.KeyCode == System.Windows.Forms.Keys.D0)) {
        // 0
      }
      if((e.KeyCode == System.Windows.Forms.Keys.F9)) {
        // #
      }
    }
  }
}


6. Вуаля!:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#14 
uscheswoi_82 коренной житель4 дня назад, 06:51
uscheswoi_82
4 дня назад, 06:51 
в ответ uscheswoi_82 6 дней назад, 08:49

Продолжим воспоминания. Вот так выглядет Microsoft Smartphone 5.0:



Стало больше компонентов, чем раньше:

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#15