Программирование >>  Формирование пользовательского контейнера 

1 ... 31 32 33 [ 34 ] 35 36 37 ... 156


f0OnOTO4HOCTb 105

hpbSus = GetDlgItem(hvmd, IDD SUSPEND); hpbRes = GetDlgItem(hvmd, IDD RESUME); EnableWindow(hpbSus, false); не доступна Suspend EnableWindow(hpbRes, true); делает доступной Resume

p->second.suspended = true; return 1; case IDD RESUME:

ResumeThread(p->second.hThread);

Устанавливает состояние кнопок Suspend и Resume. hpbSus = GetDlgItem(hwnd, IDD JSUSPEND) ; hpbRes = GetDlgItem(hvnid. IDD RESUME) ;

EnableWindow(hpbSus, true); делает доступной Suspend EnableWindow(hpbRes, false); не доступна Resume

p->second.suspended = false; return 1; case IDD LB:

Если выбран элемент списка, изменяет приоритет потока, if(HIWORD(wParam)==LBN DBLCLK) { p->second.priority = SendDlgItemMessage(hwnd, IDD LB, LB GETCURSEL, 0, 0);

SetThreadPriori ty(p->second.hThread,

p->second.priority-OFFSET);

retixm 1; case IDCANCEL:

Если поток приостановлен, когда панель закрывается,

возобновляет поток, чтобы предотвратить возникновение тупика.

if(p->second.suspended)

ResumeThread(p->second.hThread); p->second.suspended = false;

Удаляет этот поток из списка, dialogmap.erase(hwnd);



11 Закрьшает панель. DestroyWindow(hwnd) ; return 1;

return 0;

Панели управления требуется следующий файл ресурсов, названный tcp.rc. #include <windows.h> #include panel.h

ThreadPanelDB DIALOGEX 20, 20, 140, 110 CAPTION Thread Control Panel

STYLE WS BORDER WS VISIBLE WS TOPUP WS CAPTION WS SYSMENU {

DEFPUSHBUTTON Done , IDCANCEL, 55, 80, 33, 14 PUSHBUTTON Terminate , I DETERMINATE, 10, 20, 42, 12 PUSHBUTTON Suspend , IDD SUSPEND, 10, 35, 42, 12 PUSHBUTTON Resume , IDD RESUME, 10, 50, 42, 12 LISTЮ:X IDD LB, 65, 20, 63, 42, LBSJNOTIFY WS VISIBLE

WS ЮRDER I WS VSCROLL WS TABSTOP CTEXT Thread Priority , IDD TEXT1, 65, 8, 64, 10 CTEXT Change State , IDD TEXT2, 0, 8, 64, 10

Панель управления использует следующий заголовочный файл, названный panel.h.

tdefine IDD LB 200

#define IDD TERMINATE 202

tdefine IDD SUSPEND 204

#define IDD RESUME 206

#define IDD TEXT1 208

ttdefine IDD TEXT2 209

Для применения панели управления выполните следующие действия.

1. Включите файл tcp.cpp в вашу профамму.

2. Включите tcp.rc в файл ресурсов вашей профаммы.



ljMnOTOHHOCIb У07

3. Создайте поток или потоки, которыми хотите управлять.

4. Инициируйте объект типа ThrdctriPanei для каждого потока.

{(аждый объект типа ThrdctriPanei связывает поток с диалоговым окном, которое управляет им.

В больших проектах, в которых многочисленные файлы нуждаются в доступе к объектам типа ThrdctriPanei, вам может потребоваться файл tcp.h, который содержит объявление этого объекта. Текст файла приведен далее. Заголовочный файл для класса ThrdCtrlPanel cleiss ThrdCtrlPanel { public:

Конструирует панель управления. ThrdCtrlPanel(HINSTANCE hinst, HANDLE hThrd);

callback-функция панели управления.

static LRESULT CALLBACK ThreadPanel (HWND hvmd, uint message, wparam wParam. LPARAM IParam);

Пристальный взгляд

на панель управления потоком

Давайте внимательнее посмотрим на код панели управления потоком. Он начинается со следующих глобальных объявлений:

const int NUMPRIORITIES = 5; const int offset = 2;

Массив строк для списка приоритетов, char priorities [NUMPRIORITIES][80] = {

Lowest ,

Below Normal ,

Normal ,

Above Normal ,

Highest

Массив priorities содержит строки, которые связаны со значениями приоритета. Он инициализирует список внутри панели управления, который отображает текущее значение приоритета. Количество возможных значений задано в переменной numpriorities и для операционной системы Windows равно 5. Таким образом, переменная numpriorities определяет число раз-



1 ... 31 32 33 [ 34 ] 35 36 37 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика