Воспоминание Embedded ч2 27.11.2024
Всем привет!
Тут писал про Embedded см. https://groups.germany.ru/12994140000001/f/41025455.html?C...
Но сначало оффтоп. Вчера, сегодня я ел и пил вот это:
Моя ФЛ Он и ОнаЗавтра будет это:
Моя ФЛ Он и ОнаСегодня пойдёт речь о 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:



Моя ФЛ Он и ОнаЭтот пример отображает на экране телефона надпись "Hello Smartphone 2002!", и слева будет кнопка/меню OK. При нажатие на кнопку/меню OK, приложение закрывается.
Моя ФЛ Он и ОнаUI 2002 версии было имхо не очень. Так выглядет UI 2003 версии:

Моя ФЛ Он и ОнаUI 2002 версии было имхо не очень. Так выглядет UI 2003 версии:
Ну точнее не столь UI, просто в 2002 версии имхо было меньше возможностей, чем в 2003 версии. Но UI было сильно ограничены компоненты хоть в 2002 и хоть в 2003, допустим были только - текстовое поле, чек-боксы, combobox, полосы прокрутки, и две кнопки/меню, хотя можно было бы сделать в принципе свои компоненты. Ну допустим хотелось чтобы был календарь, в обычной Windows он имхо есть, а там нет. Там всё урезано, потому-что ОС Microsoft Smartphone 2002/2003 весила где-то 8 мбайт, по нынишним меркам это очень мало.
Моя ФЛ Он и ОнаПродолжим дальше, но уже в VS 2005, но сначало оффтоп.
Вчера я ел это:
Моя ФЛ Он и Она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":

Моя ФЛ Он и ОнаТеперь сделаем следующее:
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
Вуаля:

Моя ФЛ Он и ОнаПро 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
Моя ФЛ Он и ОнаПродолжим. Сегодня сделает программу телефонная книга, которая записывает в файл имя, фамилию и телефон.
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. Вуаля!

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

Моя ФЛ Он и ОнаСохранилось в файл 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/
Моя ФЛ Он и ОнаДоброе утро! Продолжим воспоминание. Но сегодня речь пойдёт о 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. Вуаля!:

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


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

Моя ФЛ Он и ОнаТут будет идти в основном про программирование под мобильные устройства. Если настроение будет, затрону S60 Symbian OS:


История Symbian OS см.:
Symbian OS примерно в 2012 г. перестала своё существование.
Моя ФЛ Он и ОнаКороче тут речь о смартфонах. Короче если мне здоровье позволит, я сделаю небольшой обзор как писать App для Windows Phone 7. Есть у меня для этого Visual Studio 2010 Professional:
Есть у меня Windows Phone SDK для Visual Studio 2010, а тестировать будем наверное на настоящем Dell Venue Pro 7, на котором установлен Windows Phone 7. Тут см. https://groups.germany.ru/12994140000001/f/41298940.html?C... я вспоминал Silverlight 1 и 2, и делал в Microsoft Expression Blend 2. Так-же в Windows Phone SDK входит Microsoft Blend.
Вот на таком смартфоне я буду тестировать:
Моя ФЛ Он и Она