Операционная система Microsoft Windows 3.1 для программиста -том 2

Файл static\static.cpp


// ---------------------------------------- // Статические органы управления // ----------------------------------------

#define STRICT #include <windows.h>
#include <mem.h>

// Прототипы функций BOOL InitApp(HINSTANCE);
LRESULT CALLBACK _export WndProc(HWND, UINT, WPARAM, LPARAM);

// Имя класса окна char const szClassName[] = "StaticAppClass";

// Заголовок окна char const szWindowTitle[] = "Static Control Demo";

// ===================================== // Функция WinMain // ===================================== #pragma argsused

int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { MSG msg; // структура для работы с сообщениями HWND hwnd; // идентификатор главного окна приложения

// Идентификаторы органов управления HWND hSt1, hSt2, hSt3, hSt4;

// Инициализируем приложение if(!InitApp(hInstance)) return FALSE;

// После успешной инициализации приложения создаем // главное окно приложения hwnd = CreateWindow( szClassName, // имя класса окна szWindowTitle, // заголовок окна WS_OVERLAPPEDWINDOW, // стиль окна CW_USEDEFAULT, // задаем размеры и расположение CW_USEDEFAULT, // окна, принятые по умолчанию CW_USEDEFAULT, CW_USEDEFAULT, 0, // идентификатор родительского окна 0, // идентификатор меню hInstance, // идентификатор приложения NULL);
// указатель на дополнительные // параметры // Если создать окно не удалось, завершаем приложение if(!hwnd) return FALSE;

// Рисуем главное окно ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);

// Создаем четыре статических // органа управления hSt1 = CreateWindow("static", NULL, WS_CHILD | WS_VISIBLE | SS_BLACKRECT, 20, 20, 180, 20, hwnd, (HMENU)-1, hInstance, NULL);

hSt2 = CreateWindow("static", NULL, WS_CHILD | WS_VISIBLE | SS_BLACKFRAME, 20, 50, 180, 20, hwnd, (HMENU)-1, hInstance, NULL);



hSt3 = CreateWindow("static", "", WS_CHILD | WS_VISIBLE | SS_LEFT, 20, 80, 180, 40, hwnd, (HMENU)-1, hInstance, NULL);


hSt4 = CreateWindow("static", "Simple Control", WS_CHILD | WS_VISIBLE | SS_SIMPLE, 20, 130, 180, 40, hwnd, (HMENU)-1, hInstance, NULL);

// Выводим текст в окно, имеющее стиль SS_LEFT. // Этот текст будет выведен в режиме свертки слов SetWindowText(hSt3, (LPSTR) "Этот текст будет выведен" " внутри окна в две строки");

// Выводим текст в окно, имеющее стиль SS_SIMPLE. // Этот текст будет выведен на одной строке, // причем часть строки, которая выходит за границы // окна, будет обрезана SetWindowText(hSt4, (LPSTR) "Этот текст будет выведен" " внутри окна в одну строку и обрезан");

// Запускаем цикл обработки сообщений while(GetMessage(&msg, 0, 0, 0)) { DispatchMessage(&msg);
} return msg.wParam; }

// ===================================== // Функция InitApp // Выполняет регистрацию класса окна // =====================================

BOOL InitApp(HINSTANCE hInstance) { ATOM aWndClass; // атом для кода возврата WNDCLASS wc; // структура для регистрации // класса окна

memset(&wc, 0, sizeof(wc));

wc.style = 0; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = (LPSTR)NULL; wc.lpszClassName = (LPSTR)szClassName;

// Регистрация класса aWndClass = RegisterClass(&wc);

return (aWndClass != 0);
}

// ===================================== // Функция WndProc // =====================================

LRESULT CALLBACK _export WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: { PostQuitMessage(0);
return 0; } } return DefWindowProc(hwnd, msg, wParam, lParam);
}

После создания и отображения главного окна приложения функция WinMain создает четыре статических органа управления, вызывая функцию CreateWindow. Если создается прямоугольник или рамка, адрес строки текста заголовка окна указывается как NULL:



hSt1 = CreateWindow("static", NULL, WS_CHILD | WS_VISIBLE | SS_BLACKRECT, 20, 20, 180, 20, hwnd, (HMENU)-1, hInstance, NULL);

Идентификатор органа управления не используется, так как орган не посылает сообщений родительскому окну. В качестве идентификатора мы выбрали число ­1, хотя можно использовать и другие значения.

Если создается окно с текстом, этот текст можно задать как заголовок окна:

hSt4 = CreateWindow("static", "Simple Control", WS_CHILD | WS_VISIBLE | SS_SIMPLE, 20, 130, 180, 40, hwnd, (HMENU)-1, hInstance, NULL);

После создания статических органов управления функция WinMain изменяет текст в третьем и четвертом органе, вызывая функцию SetWindowText:

SetWindowText(hSt3, (LPSTR) "Этот текст будет выведен" " внутри окна в две строки");
SetWindowText(hSt4, (LPSTR) "Этот текст будет выведен" " внутри окна в одну строку и обрезан");

Для последнего органа управления мы намеренно выбрали текст такой длины, чтобы он не поместился в одной строке. Как и следовал ожидать, при выводе этот текст был обрезан (рис. 2.6).

Файл определения модуля для приложения STATIC представлен в листинге 2.14.


Содержание раздела