- •Программирование электронных устройств
- •Содержание
- •1 Рекомендации по изучению дисциплины
- •Библиографический список
- •Контрольные вопросы
- •2 Программирование электронных устройств
- •2.1 Управляемые событиями программы
- •Контрольные вопросы
- •2.2 Визуализация цифровых данных
- •2.2.1 Вывод графической информации на дисплей
- •Int fnStyle;
- •If (g_pBrushes)
- •Void Diagram(hdc hDc, int X, int y, int r, bool fShadow, const float* pData, const Brush* pBrushes, unsigned int iNumOfPies)
- •If (fShadow)
- •Void DiagramPie(hdc hDc, int X, int y, int r, float s, float e, int fnStyle, colorref clrref, const char* szLabel)
- •If (!szLabel)
- •Void ShadyDiagram(hdc hDc, int X, int y, int r, int iShadowDepth, const float* pData, const Brush* pBrushes, unsigned int iNumOfPies)
- •Void winapi EndPaint( hwnd hWnd, paintstruct far *lpps);
- •Int winapi ReleaseDc( hwnd hwnd, hdc hdc );
- •Int fnStyle;
- •If (g_pBrushes)
- •Void ShadyDiagram(hdc hDc, int X, int y, int r, int iShadowDepth, const float* pData, const Brush* pBrushes, unsigned int iNumOfPies)
- •Void DiagramPie(hdc hDc, int X, int y, int r, float s, float e, int fnStyle, colorref clrref, const char* szLabel);
- •Вывод графической информации на принтер
- •HDevMode – идентификатор глобального блока памяти, содержащего структуру типа devmode, которая используется для инициализации параметров принтера.
- •Контрольные вопросы
- •Организация интерфейса пользователя
- •Int wmId;
- •InvalidateRect(hWnd, null, true);
- •InvalidateRect(hWnd, null, true);
- •If (g_iShape)
- •Контрольные вопросы
- •2.4 Сетевое программирование
- •2.4.1 Сетевые модели, протоколы и архитектура «клиент – сервер»
- •Windows Sockets
- •If (gethostname(szInfo,sizeof(szInfo)))
- •Void Stop();
- •InvalidateRect(hWnd, null, true);
- •Void Stop()
- •If (wsaCleanup())
- •Void OnServerAccept(wparam, lparam);
- •InvalidateRect(hWnd, null, true);
- •Void OnServerAccept(wparam wParam, lparam lParam)
- •Int error, length;
- •If (wsagetasyncerror(lParam))
- •Контрольные вопросы
- •Основы технологии параллельных вычислений
- •Основы разработки и программирования простейших usb-устройств
- •Контрольные вопросы
- •Заключение
- •Программирование электронных устройств
- •445667, Г. Тольятти, ул. Белорусская, 14
Void OnServerAccept(wparam, lparam);
bool Start(HWND);
void Stop();
char g_szStatus[512];
SOCKET g_serverSocket;
// Функция вызывается автоматически, когда программа запускается
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASSEX wndclass;
// Настройка класса окна
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = “Window Class”; // Имя класса
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
// Регистрация класса окна
if(RegisterClassEx(&wndclass) == 0)
{
// Сбой программы, выход
return 0;
}
// Создание окна
hWnd = CreateWindowEx(
WS_EX_OVERLAPPEDWINDOW,
«Window Class», // Имя класса
«Сервер», // Текст заголовка
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT,
CW_USEDEFAULT,
600,
100,
NULL,
NULL,
hInstance,
NULL);
// Отображение окна
ShowWindow(hWnd, iCmdShow);
// Обработка сообщений, пока программа не будет прервана
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
// Функция обратного вызова для обработки сообщений
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
switch(iMsg)
{
// Вызывается сразу же при создании окна функцией CreateWindow() (или CreateWindowEx())
case WM_CREATE:
strcpy(g_szStatus, «Щелкните левой кнопкой мыши для запуска сервера, правой для его остановки»);
// g_serverSocket инициализируется значением недействительного сокета
g_serverSocket = INVALID_SOCKET;
break;
// Вызывается, когда пользователь отпускает левую кнопку мыши
case WM_LBUTTONUP:
// Запуск сервера
Start(hWnd);
// Перерисовка окна (генерация сообщения WM_PAINT)
InvalidateRect(hWnd, NULL, TRUE);
break;
// Вызывается, когда пользователь отпускает правую кнопку мыши
case WM_RBUTTONUP:
// Остановка сервера
Stop();
InvalidateRect(hWnd, NULL, TRUE);
break;
case WM_SERVER_ACCEPT:
OnServerAccept(wParam, lParam);
InvalidateRect(hWnd, null, true);
break;
// Вызывается, когда окно обновляется
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
TextOut(hDC, 20, 20, g_szStatus, (int)strlen(g_szStatus));
EndPaint(hWnd, &ps);
break;
// Вызывается, когда пользователь закрывает окно
case WM_DESTROY:
// Остановка сервера при закрытии окна
Stop();
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
return 0;
}
Void OnServerAccept(wparam wParam, lparam lParam)
{