Диалоговые панели.

  1. Типы диалоговых панелей.

Диалоговые панели бывают трех типов:

1. Модальные;

2. Системные модальные;

3. Не модальные.

При выводе на экран модальные диалоговые панели — работа приложения приостанавливается. Все сообщения от клавиатуры и мыши попадает во временное окно диалоговой панели. Модальная диалоговая панель позволяет переключиться на работу с другими приложениями. Для запрета такого переключения необходимо использовать системную модальную диалоговую панель. Немодальная диалоговая панель не блокирует работу основного окна приложения и его дочерних окон.

 

  1. Стиль окна диалоговой панели.

Оператор STYEв шаблоне диалога используется для назначения стиля окну диалоговой панели. В качестве стиля можно использовать комбинацию символических имен, определнных в файле Windows.hи имеющих префикс WS_и DS_

Например DS_MODALFRAMEиDS_SYSMODAL

  1. Создание диалоговой панели.

Создание заключается

1. Создание шаблона диалога;

2. Определение функции диалога;

3. Вызов одной из функций создания диалога.

Шаблон создается в редакторе ресурсов (двойной щелчок по файлу rc), подключить <resource.h>

  1. Функция диалога.

BOOL CALLBACK DlgProc(HWND, UINT msg, WPARAM wParam, LPARAM lParam);

Для функции диалога может быть выбрано любое имя, в отличае от функции окна — она не должна вызывать функцию DefWindowProc . Если функция диалога обрабатывает сообщение, то она должна вернуть значение TRUE, а если нет — то значение FALSE. Функция диалога не обрабатывает сообщения WM_CREATE, WM_PAIN, WM_DESTROY. При инициализации диалога вместо сообщения WM_CREATEпередается сообщение WM_INITDIALOG. Параметр wParamсодержит идентификатор органа управления, который первый получает фокус ввода. Если обработчик этого сообщения устанавливает фокус ввода на другой орган управления, вызывая функцию SetFocus, то функция диалога должна вернуть значения FASLE. Сообщение WM_COMMANDпередает извещение от органов управления, расположенных на панели. Это сообщение может поступать с параметром wParam равным константам: ID_OK, ID_CANCELсоответсвенно при нажатии клавиш CONTROLи ESCAPE.

  1. Функция создания диалоговой панели.

Для создания модальной диалоговой панели служит функция:

int WINAPI DialogBox(HINSTANCE hinst, LPCSTR Template, HWND owner, DLGPROC dlgPRC).

 

Для создания немодальной панели используется функция:

int WINAPI CreateDialog(HINSTANCE hinst, LPCSTR Template, HWND owner, DLGPROC dlgPRC).

 

  1. Сообщения для органов управления.

Органы управления посылают функции диалога сообщениеWM_COMMAND. Приложение само может посылать сообщения органам управления.

Два способа:

1. Основан на функции SendMessage. Первый параметр функции — идентификатор окна, функция которого должна получить сообщения. Для определения идентификатора окна органа управления по идентификатору окна диалога и идентификатору органа управления используются функции.

HWND WINAPI GetDegItem(HWND hdlg, int idControl);

Позволяет получить идентификатор окна управления.

SendMessage(GetDlgItem(hwnd, IDC_SWITCH), BM_SETCHECK, TRUE);

Установка переключателя во включенное состояние.

2. Специальные функции.

 

Лекция №8 (27.10.10)

 

Функция, посылающая сообщение органу управления.

LRESULT WINAPI SendDlgItemMessage(HWND hwnd, int idDlgItem, UINT msg, WPARAM wParam, LPARAM lParam)

Функция для изменения заголовка органа управления, либо записи текста в текстовый редактор.

Void WINAPI SetDlgItemText(HWND hwnd, int idDlgItem, LPCSTR Text)

Функция, получающая строку, связанную с органом управления.

Int WINAPI GetDlgItemText(HWND hwnd, int idDlgItem, LPCSTR Textbuff, intbuffsize);

Функция изменения состояния переключателя CheckBox

void WINAPI CheckDlgButton(HWND hwnd, int idDlgItem, UINT state);

state = 0 —выключено

state = 1 — включено

state = 2 — неактивно

 

Функция, изменяющая состояния группы переключателей RadioButton

void WINAPI CheckRadioButton(HWND hwnd, int idFirstButton, int idLastButton, id CheckButton)

Функция включает переключатель заданный последним параметром и выключает переключатели в диапозоне указанном вторым и третьим параметром.

 

Определение текущего состояния.

UINT WINAPI IsDlgButtonChecked(HWND hwnd,int idButton);

Возвращаемое значение

0 — выключено

1 — включено

2 — неактивное состояние

 

 

Пример приложения, демонстрирующее использование органов управления.

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

switch (msg)

{

case WM_CREATE:

// Создание мод. диалог панель

{

DialogBox(hwnd, «Select», hwnd, (DLGPROC) DlgProc);

DestroyWindow(hwnd);

return 0;

}

case WM_DESTROY:

{

PostQuitMessage(0);

return 0;

}

}

return DefWindowProc(hwnd, msg, wParam, lParam);

}

BOOL CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

switch(msg)

{

case WM_INITDIALOG:

{

reutrn TRUE;

}

case WM_COMMAND:

{

switch(wParam)

{

char Buffer....

GetDlgItemText(hdlg, IDC_NAME, Buffer, 80);

lstrcat(Buffer, «\n \n Должность\n»;

if (IsDlgButtonChecked(hdlg, IDC_PROGRAMMER))

lstrcat(Buffer, «Программист»);

else if(IsDlgButtonChecked(hdlg, IDC_ENGINEER)

lstrcat(Buffer, «Инженер»);

lstrcat(Buffer, «знает»):

if(IsDlgButtonChecked(hdlg, IDC_C)

lstrcat(Buffer, «Си»);

else if(IsDlgButtonChecked(hdlg, IDC_Pascal)

lstrcat(Buffer, «Паскаль»);

MessagreBox(hdlg, Buffer, «Ввели», MB_OK);

return TRUE;

}

case ID_CANCEL:

{

FndDialgo(hdlg, False);

return TRUE;

}

}

}

return FALSE;

}