Deutsch

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

182  
uscheswoi_82 коренной житель3 дня назад, 19:22
uscheswoi_82
3 дня назад, 19:22 

Всем привет!

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

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



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

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


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

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

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

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


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

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

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

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

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



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#7 
uscheswoi_82 коренной житель2 дня назад, 22:14
uscheswoi_82
NEW 2 дня назад, 22:14 
в ответ uscheswoi_82 2 дня назад, 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 коренной житель2 дня назад, 22:19
uscheswoi_82
NEW 2 дня назад, 22:19 
в ответ uscheswoi_82 2 дня назад, 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 коренной житель2 дня назад, 22:22
uscheswoi_82
NEW 2 дня назад, 22:22 
в ответ uscheswoi_82 2 дня назад, 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