|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Custom Dialog Boxes
An application can create custom dialog boxes by using an application-defined window class for the dialog boxes instead of using the predefined dialog box class. Applications typically use this method when a dialog box is their main window, but it is also useful for creating modal and modeless dialog boxes for applications that have standard overlapping windows.
The application-defined window class allows the application to define a window procedure for the dialog box and process messages before sending them to the dialog box procedure. It also lets the application define a class icon, a class background brush, and a class menu for the dialog box. The application must register the window class before attempting to create a dialog box and must provide the dialog box template with the atom value or name of the window class. Many applications create a new dialog box class by first retrieving the class information for the predefined dialog box class, and passing it to the GetClassInfo function, which fills a WNDCLASS structure with the information. The application modifies individual members of the structure, such as the class name, brush, and icon, then registers the new class by using the RegisterClass function. If an application fills the WNDCLASS structure on its own, it must set the cbWndExtra member to the DLGWINDOWEXTRA, which is the number of extra bytes Windows requires for each dialog box. If an application also uses extra bytes for each dialog box, they must be beyond the extra bytes required by Windows.
The window procedure for the custom dialog box has the same parameters and requirements as any other window procedure. Unlike other window procedures, however, the window procedure for this dialog box should call the DefDlgProc function instead of the DefWindowProc function for any messages it does not process. DefDlgProc carries out the same default message processing as the window procedure for the predefined dialog box, which includes calling the dialog box procedure.
An application can also create custom dialog boxes by subclassing the window procedure of the predefined dialog box. The SetWindowLong function lets an application set the address of the window procedure for a given window. The application may also attempt to subclass by using the SetClassLong function, but doing so affects all dialog boxes in the system, not just those belonging to the application. Applications that create custom dialog boxes sometimes provide an alternate keyboard interface for the dialog boxes. For modeless dialog boxes, this may mean the application does not call the IsDialogMessage function and instead processes all keyboard input in the custom window procedure. In such cases, the application can use the WM_NEXTDLGCTL message to minimize the code needed to move the input focus from one control to another. This message, when passed to DefDlgProc, moves the input focus to a specified control and updates the appearance of the controls, such as moving the default push button border or setting an automatic radio button.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Заказные Диалоговые Ящики
Приложение может создать заказные диалоговые ящики используя определенный прикладной класс окна для диалога боксирует вместо использования встроенного диалогового класса ящика. Приложения обычно используют этот метод когда диалоговый ящик является их основным окном, но это также полезное для создания модального и независимый диалог боксирует для приложений, что иметь стандарт, перекрывающий окно.
Определенный прикладной класс окна позволяет приложение, чтобы определять процедуру окна для диалогового ящика и обрабатывать сообщения перед посылкой их в диалоговую процедуру ящика. Это также позволяет, чтобы приложение определяет иконку класса, щетка фона класса, и меню класса для диалогового блока. Приложение должно зарегистрировать класс окна перед попыткой создавать диалогового блока и должно обеспечить диалоговому шаблону блока величиной атома или имени класса окна. Много приложений создают новый диалоговый класс блока сначала извлекая информацию класса для встроенного диалогового класса блока, и передавая это в функцию GetClassInfo, который заполняет структуру WNDCLASS информацией. Приложение модифицирует индивидуальных участников структуры, как например, имя класса, щетки, и иконка затем регистрирует новый класс используя функцию RegisterClass. Если приложение заполняет структуру WNDCLASS на своем собственном, оно должно установить элемент cbWndExtra на DLGWINDOWEXTRA, который - количество дополнительных байтов Windows требуется для каждого диалогового блока. Если приложение также использует дополнительные байты для каждого диалогового блока, они должны превысить дополнительные байты требовавшиеся Windows.
Процедура окна для заказного диалогового блока имеет те же параметры и требования как любая другая процедура окна. В отличие от других процедур окна, тем не менее, процедура окна для этого диалогового блока должна вызывать функцию DefDlgProc вместо функции DefWindowProc для любых сообщений, которая это не обрабатывает. DefDlgProc ВЫПОЛНЯЕТ то же по умолчанию сообщение, обрабатывающее как процедура окна для встроенного диалогового блока, которая включает вызывая диалогового блока процедуры.
Приложение может также создать заказных диалоговых блоков subclassing процедура окна встроенного диалогового блока. Функция SetWindowLong позволяет, приложение устанавливает адрес процедуры окна для данного окна. Приложение может также пытаться в подкласс используя функцию SetClassLong, но делая так влияет на все диалоговые блоков в системе, просто не тот принадлежащий приложению. Приложения, которые создают заказных диалоговых блоков иногда обеспечивать альтернативный клавишный интерфейс для диалоговых блоков. Для независимых диалоговых блоков, это может означать, что приложение не вызывает функцию IsDialogMessage и взамен обрабатывает весь ввод данных с клавиатуры в заказной процедуре окна. В таких случаях, приложение может использовать сообщение WM_NEXTDLGCTL, чтобы минимизировать код, которому нужно перемещать входной фокус от одного управления до другого. Это сообщение, когда пройдено на DefDlgProc, было перемещено входной фокус на определенное управление и был скорректирован появление элементов управления, как например, перемещение по умолчанию границы кнопки или устанавливая автоматическую радио кнопку.
|
|
|
|
| |