|
Программирование >> Формирование пользовательского контейнера
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 определяет число раз-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |