Что такое код isdlgbuttonchecked


Содержание

IsDlgButtonChecked

Функция IsDlgButtonChecked определяет, имеет ли элемент управления button флажок рядом с его или ли элемент управления button три состояния отображается серым цветом, установлен, или не.

Параметры

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

Возвращаемое значение от кнопки, созданные с BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, BS_AUTO3STATE, BS_CHECKBOX, BS_RADIOBUTTON, или BS_3STATE стиль может быть одним из следующих:

Значение Значение
BST_CHECKED Устанавливается переключатель.
BST_INDETERMINATE Кнопка недоступна, указывающий неопределенное состояние (применяется, только если кнопка имеет стиль BS_3STATE или BS_AUTO3STATE).
BST_UNCHECKED Кнопка не установлен

Если кнопка имеет любой другой стиль, возвращаемое значение равно нулю.

Примечания

Функция IsDlgButtonChecked посылает сообщение BM_GETCHECK для элемента управления «кнопка».

IsDlgButtonChecked info Overview Group

The IsDlgButtonChecked function determines whether a button control has a check mark next to it or whether a three-state button control is grayed, checked, or neither.

UINT IsDlgButtonChecked(

// handle of dialog box

Parameters

hDlg Identifies the dialog box that contains the button control.
nIDButton Specifies the integer identifier of the button control.

Return Values

The return value from a button created with the BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, BS_AUTO3STATE, BS_CHECKBOX, BS_RADIOBUTTON, or BS_3STATE style can be one of the following:

Button is grayed, indicating an indeterminate state (applies only if the button has the BS_3STATE or BS_AUTO3STATE style).

Button is unchecked

If the button has any other style, the return value is zero.

Remarks

The IsDlgButtonChecked function sends a BM_GETCHECK message to the specified button control.

Галочкой проблемы в Win32 API C ++

Я этот код сделано в C ++, и я хочу спросить, почему, когда я нажимаю одну CheckBox все из них меняют статус. Пример:

СВ1 = Проверено СВ2 = непроверенных

СВ1 = непроверенных СВ2 = Проверено

Я хочу только, чтобы сделать работу одного из них, а не два одновременно.

Здесь у вас есть код:

Я оставлю этот код здесь только в том случае, если кто-то захочет узнать, как автор решил, что.

Фиксированный, просто нужно использовать переключатель и случай.

Что такое OneButtonCheckup.exe и как его исправить?

Совместима с Windows 2000, XP, Vista, 7, 8 и 10

Обзор OneButtonCheckup.exe

Что такое OneButtonCheckup.exe?

OneButtonCheckup.exe представляет собой разновидность файла EXE, связанного с One Button Checkup, который разработан Part Of Auslogics Boostspeed для ОС Windows. Последняя известная версия OneButtonCheckup.exe: 1.3.10.115, разработана для Windows. Данный файл EXE имеет рейтинг популярности 1 звезд и рейтинг безопасности «Неизвестно».

Что из себя представляют файлы EXE?

Файлы EXE («исполняемые»), такие как OneButtonCheckup.exe – это файлы, содержащие пошаговые инструкции, которым компьютер следует, чтобы выполнить ту или иную функцию. Когда вы дважды «щелкаете» по файлу EXE, ваш компьютер автоматически выполняет эти инструкции, созданные разработчиком программы (например, Part Of Auslogics Boostspeed) с целью запуска программы (например, One Button Checkup) на вашем компьютере.

Каждое программное приложение на вашем компьютере использует исполняемый файл: ваш веб-браузер, текстовый процессор, программа для создания таблиц и т.д. Это делает исполняемые файлы одними из наиболее полезных видов файлов в операционной системе Windows. Без таких исполняемых файлов, как OneButtonCheckup.exe, вы не смогли бы использовать ни одну программу на вашем компьютере.

Почему у меня наблюдаются ошибки в файлах типа EXE?

Из-за своей полезности и вездесущности, файлы EXE обычно используются в качестве способа заражения вирусами / вредоносным ПО. Зачастую вирусы маскируются под неопасные файлы EXE (например, OneButtonCheckup.exe) и распространяются через почтовый СПАМ или вредоносные веб-сайты, а затем могут заразить ваш компьютер, когда будут запущены на исполнение (например, когда вы дважды щелкаете по файлу EXE).

В дополнение, вирусы могут заразить, переместить или повредить существующие файлы EXE, то впоследствии может привести к сообщениям об ошибках, когда исполняется One Button Checkup или связанные программы. Таким образом, любой исполняемый файл, который вы загружаете на свой компьютер, необходимо проверить на вирусы перед открытием, даже если вы считаете, что он получен из надежного источника.

В каких случаях появляются ошибки в файлах типа EXE?

Ошибки EXE, например, связанные с OneButtonCheckup.exe, чаще всего появляются во время запуска компьютера, запуска программы или при попытке использования специфических функций в вашей программе (например, печать).

Распространенные сообщения об ошибках в OneButtonCheckup.exe

Наиболее распространенные ошибки OneButtonCheckup.exe, которые могут возникнуть на компьютере под управлением Windows, перечислены ниже:

  • «Ошибка приложения OneButtonCheckup.exe.»
  • «OneButtonCheckup.exe не является приложением Win32.»
  • «Возникла ошибка в приложении OneButtonCheckup.exe. Приложение будет закрыто. Приносим извинения за неудобства.»
  • «Файл OneButtonCheckup.exe не найден.»
  • «OneButtonCheckup.exe не найден.»
  • «Ошибка запуска программы: OneButtonCheckup.exe.»
  • «Файл OneButtonCheckup.exe не запущен.»
  • «Отказ OneButtonCheckup.exe.»
  • «Неверный путь к приложению: OneButtonCheckup.exe.»

Такие сообщения об ошибках EXE могут появляться в процессе установки программы, когда запущена программа, связанная с OneButtonCheckup.exe (например, One Button Checkup), при запуске или завершении работы Windows, или даже при установке операционной системы Windows. Отслеживание момента появления ошибки OneButtonCheckup.exe является важной информацией при устранении проблемы.

Причины ошибок в файле OneButtonCheckup.exe

Проблемы OneButtonCheckup.exe могут быть отнесены к поврежденным или отсутствующим файлам, содержащим ошибки записям реестра, связанным с OneButtonCheckup.exe, или к вирусам / вредоносному ПО.

Более конкретно, данные ошибки OneButtonCheckup.exe могут быть вызваны следующими причинами:

  • Поврежденные ключи реестра Windows, связанные с OneButtonCheckup.exe / One Button Checkup.
  • Вирус или вредоносное ПО, которые повредили файл OneButtonCheckup.exe или связанные с One Button Checkup программные файлы.
  • Другая программа злонамеренно или по ошибке удалила файлы, связанные с OneButtonCheckup.exe.
  • Другая программа находится в конфликте с One Button Checkup и его общими файлами ссылок.
  • Поврежденная загрузка или неполная установка программного обеспечения One Button Checkup.

Как исправить ошибки в OneButtonCheckup.exe

Предупреждение: Мы не рекомендуем скачивать OneButtonCheckup.exe с сайтов типа «EXE». Такие сайты распространяют файлы EXE, которые не одобрены официальным разработчиком файла OneButtonCheckup.exe и часто могут поставляться в комплекте с инфицированными вирусом или другими вредоносными файлами. Если вам требуется копия файла OneButtonCheckup.exe, настоятельно рекомендуется получить ее непосредственно у Part Of Auslogics Boostspeed.

Ниже описана последовательность действий по устранению ошибок, призванная решить проблемы OneButtonCheckup.exe. Данная последовательность приведена в порядке от простого к сложному и от менее затратного по времени к более затратному, поэтому мы настоятельно рекомендуем следовать данной инструкции по порядку, чтобы избежать ненужных затрат времени и усилий.

Пожалуйста, учтите: Нажмите на изображение [ ] , чтобы развернуть инструкции по устранению проблем по каждому из шагов ниже. Вы также можете использовать изображение [ ], чтобы скрывать инструкции по мере их выполнения.

Шаг 1: Исправить записи реестра, связанные с One Button Checkup

Иногда ошибки OneButtonCheckup.exe и другие системные ошибки EXE могут быть связаны с проблемами в реестре Windows. Несколько программ может использовать файл OneButtonCheckup.exe, но когда эти программы удалены или изменены, иногда остаются «осиротевшие» (ошибочные) записи реестра EXE.

В принципе, это означает, что в то время как фактическая путь к файлу мог быть изменен, его неправильное бывшее расположение до сих пор записано в реестре Windows. Когда Windows пытается найти файл по этой некорректной ссылке (на расположение файлов на вашем компьютере), может возникнуть ошибка OneButtonCheckup.exe. Кроме того, заражение вредоносным ПО могло повредить записи реестра, связанные с One Button Checkup. Таким образом, эти поврежденные записи реестра EXE необходимо исправить, чтобы устранить проблему в корне.

Редактирование реестра Windows вручную с целью удаления содержащих ошибки ключей OneButtonCheckup.exe не рекомендуется, если вы не являетесь специалистом по обслуживанию ПК. Ошибки, допущенные при редактировании реестра, могут привести к неработоспособности вашего ПК и нанести непоправимый ущерб вашей операционной системе. На самом деле, даже одна запятая, поставленная не в том месте, может воспрепятствовать загрузке компьютера!

В связи с подобным риском мы настоятельно рекомендуем использовать надежные инструменты очистки реестра, такие как %%product%% (разработанный Microsoft Gold Certified Partner), чтобы просканировать и исправить любые проблемы, связанные с OneButtonCheckup.exe. Используя очистку реестра, вы сможете автоматизировать процесс поиска поврежденных записей реестра, ссылок на отсутствующие файлы (например, вызывающих ошибку OneButtonCheckup.exe) и нерабочих ссылок внутри реестра. Перед каждым сканированием автоматически создается резервная копия, позволяющая отменить любые изменения одним кликом и защищающая вас от возможного повреждения компьютера. Самое приятное, что устранение ошибок реестра может резко повысить скорость и производительность системы.

Предупреждение: Если вы не являетесь опытным пользователем ПК, мы НЕ рекомендуем редактирование реестра Windows вручную. Некорректное использование Редактора реестра может привести к серьезным проблемам и потребовать переустановки Windows. Мы не гарантируем, что неполадки, являющиеся результатом неправильного использования Редактора реестра, могут быть устранены. Вы пользуетесь Редактором реестра на свой страх и риск.

Перед тем, как вручную восстанавливать реестр Windows, необходимо создать резервную копию, экспортировав часть реестра, связанную с OneButtonCheckup.exe (например, One Button Checkup):

  1. Нажмите на кнопку Начать.
  2. Введите «command» в строке поиска. ПОКА НЕ НАЖИМАЙТЕENTER!
  3. Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER.
  4. Будет выведено диалоговое окно для доступа.
  5. Нажмите Да.
  6. Черный ящик открывается мигающим курсором.
  7. Введите «regedit» и нажмите ENTER.
  8. В Редакторе реестра выберите ключ, связанный с OneButtonCheckup.exe (например, One Button Checkup), для которого требуется создать резервную копию.
  9. В меню Файл выберите Экспорт.
  10. В списке Сохранить в выберите папку, в которую вы хотите сохранить резервную копию ключа One Button Checkup.
  11. В поле Имя файла введите название файла резервной копии, например «One Button Checkup резервная копия».
  12. Убедитесь, что в поле Диапазон экспорта выбрано значение Выбранная ветвь.
  13. Нажмите Сохранить.
  14. Файл будет сохранен с расширением .reg.
  15. Теперь у вас есть резервная копия записи реестра, связанной с OneButtonCheckup.exe.

Следующие шаги при ручном редактировании реестра не будут описаны в данной статье, так как с большой вероятностью могут привести к повреждению вашей системы. Если вы хотите получить больше информации о редактировании реестра вручную, пожалуйста, ознакомьтесь со ссылками ниже.

Мы не несем никакой ответственности за результаты действий, совершенных по инструкции, приведенной ниже — вы выполняете эти задачи на свой ​​страх и риск.

Шаг 2: Проведите полное сканирование вашего компьютера на вредоносное ПО

Есть вероятность, что ошибка OneButtonCheckup.exe может быть связана с заражением вашего компьютера вредоносным ПО. Эти вредоносные злоумышленники могут повредить или даже удалить файлы, связанные с EXE. Кроме того, существует возможность, что ошибка OneButtonCheckup.exe связана с компонентом самой вредоносной программы.

Совет: Если у вас еще не установлены средства для защиты от вредоносного ПО, мы настоятельно рекомендуем использовать Emsisoft Anti-Malware (скачать). В отличие от других защитных программ, данная программа предлагает гарантию удаления вредоносного ПО.

Шаг 3: Очистить систему от мусора (временных файлов и папок) с помощью очистки диска (cleanmgr)

Со временем ваш компьютер накапливает ненужные файлы в связи с обычным интернет-серфингом и повседневным использованием компьютера. Если такие ненужные файлы иногда не удалять, они могут привести к снижению быстродействия One Button Checkup или к ошибке OneButtonCheckup.exe, возможно вследствие конфликтов файлов или перегрузки жесткого диска. Удаление таких временных файлов при помощи утилиты Очистка диска может не только устранить ошибку OneButtonCheckup.exe, но и существенно повысить быстродействие вашего компьютера.

Совет: Хотя утилита Очистки диска является прекрасным встроенным инструментом, она удаляет не все временные файлы с вашего компьютера. Другие часто используемые программы, такие как Microsoft Office, Firefox, Chrome, Live Messenger, а также сотни других программ не поддаются очистке при помощи программы Очистка диска (включая некоторые программы Part Of Auslogics Boostspeed).

Из-за недостатков утилиты Windows Очистка диска (cleanmgr) мы настоятельно рекомендуем использовать специализированное программное обеспечение очистки жесткого диска / защиты конфиденциальности, например WinSweeper (разработано Microsoft Gold Partner), для очистки всего компьютера. Запуск WinSweeper раз в день (при помощи автоматического сканирования) гарантирует, что ваш компьютер всегда будет чист, будет работает быстро и без ошибок OneButtonCheckup.exe, связанных с временными файлами.

Как запустить Очистку диска (cleanmgr) (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите на кнопку Начать.
  2. Введите «command» в строке поиска. ПОКА НЕ НАЖИМАЙТЕENTER!
  3. Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER.
  4. Будет выведено диалоговое окно для доступа.
  5. Нажмите Да.
  6. Черный ящик открывается мигающим курсором.
  7. Введите «cleanmgr» и нажмите ENTER.
  8. Программа Очистка диска приступит к подсчету занятого места на диске, которое вы можете освободить.
  9. Будет открыто диалоговое окно Очистка диска, содержащее флажки, которые вы можете выбрать. В большинстве случаев категория «Временные файлы» занимает большую часть дискового пространства.
  10. Установите флажки напротив категорий, которые вы хотите использовать для очистки диска, и нажмите OK.

Шаг 4: Обновите драйверы устройств на вашем компьютере

Ошибки OneButtonCheckup.exe могут быть связаны с повреждением или устареванием драйверов устройств. Драйверы с легкостью могут работать сегодня и перестать работать завтра по целому ряду причин. Хорошая новость состоит в том, что чаще всего вы можете обновить драйверы устройства, чтобы устранить проблему с EXE.

В связи с временными затратами и общей сложностью обновления драйверов мы настоятельно рекомендуем использовать утилиту обновления драйверов, например DriverDoc (разработана Microsoft Gold Partner), для автоматизации этого процесса.

Пожалуйста, учтите: Ваш файл OneButtonCheckup.exe может и не быть связан с проблемами в драйверах устройств, но всегда полезно убедиться, что на вашем компьютере установлены новейшие версии драйверов оборудования, чтобы максимизировать производительность вашего ПК.

Шаг 5: Используйте Восстановление системы Windows, чтобы «Отменить» последние изменения в системе

Восстановление системы Windows позволяет вашему компьютеру «отправиться в прошлое», чтобы исправить проблемы OneButtonCheckup.exe. Восстановление системы может вернуть системные файлы и программы на вашем компьютере к тому времени, когда все работало нормально. Это потенциально может помочь вам избежать головной боли от устранения ошибок, связанных с EXE.

Пожалуйста, учтите: использование восстановления системы не повлияет на ваши документы, изображения или другие данные.

Чтобы использовать Восстановление системы (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите на кнопку Начать.
  2. В строке поиска введите «Восстановление системы» и нажмите ENTER.
  3. В окне результатов нажмите Восстановление системы.
  4. Введите пароль администратора (при появлении запроса).
  5. Следуйте инструкциям Мастера для выбора точки восстановления.
  6. Восстановить ваш компьютер.

Шаг 6: Удалите и установите заново программу One Button Checkup, связанную с OneButtonCheckup.exe

Инструкции для Windows 7 и Windows Vista:

  1. Откройте «Программы и компоненты», нажав на кнопку Пуск.
  2. Нажмите Панель управления в меню справа.
  3. Нажмите Программы.
  4. Нажмите Программы и компоненты.
  5. Найдите One Button Checkup в столбце Имя.
  6. Нажмите на запись One Button Checkup.
  7. Нажмите на кнопку Удалить в верхней ленте меню.
  8. Следуйте инструкциям на экране для завершения удаления One Button Checkup.

Инструкции для Windows XP:

  1. Откройте «Программы и компоненты», нажав на кнопку Пуск.
  2. Нажмите Панель управления.
  3. Нажмите Установка и удаление программ.
  4. Найдите One Button Checkup в списке Установленные программы.
  5. Нажмите на запись One Button Checkup.
  6. Нажмите на кнопку Удалить справа.
  7. Следуйте инструкциям на экране для завершения удаления One Button Checkup.

Инструкции для Windows 8:

  1. Установите указатель мыши в левой нижней части экрана для показа изображения меню Пуск.
  2. Щелкните правой кнопкой мыши для вызова Контекстного меню Пуск.
  3. Нажмите Программы и компоненты.
  4. Найдите One Button Checkup в столбце Имя.
  5. Нажмите на запись One Button Checkup.
  6. Нажмите Удалить/изменить в верхней ленте меню.
  7. Следуйте инструкциям на экране для завершения удаления One Button Checkup.

После того, как вы успешно удалили программу, связанную с OneButtonCheckup.exe (например, One Button Checkup), заново установите данную программу, следуя инструкции Part Of Auslogics Boostspeed.

Совет: Если вы абсолютно уверены, что ошибка EXE связана с определенной программой Part Of Auslogics Boostspeed, удаление и повторная установка программы, связанной с OneButtonCheckup.exe с большой вероятностью решит вашу проблему.

Шаг 7: Запустите проверку системных файлов Windows («sfc /scannow»)

Проверка системных файлов представляет собой удобный инструмент, включаемый в состав Windows, который позволяет просканировать и восстановить поврежденные системные файлы Windows (включая те, которые имеют отношение к OneButtonCheckup.exe). Если утилита проверки системных файлов обнаружила проблему в EXE или другом важном системном файле, она предпримет попытку заменить проблемные файлы автоматически.

Чтобы запустить проверку системных файлов (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите на кнопку Начать.
  2. Введите «command» в строке поиска. ПОКА НЕ НАЖИМАЙТЕENTER!
  3. Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER.
  4. Будет выведено диалоговое окно для доступа.
  5. Нажмите Да.
  6. Черный ящик открывается мигающим курсором.
  7. Введите «sfc /scannow» и нажмите ENTER.
  8. Проверка системных файлов начнет сканирование на наличие проблем OneButtonCheckup.exe и других системных файлов (проявите терпение — проверка может занять длительное время).
  9. Следуйте командам на экране.

Шаг 8: Установите все доступные обновления Windows

Microsoft постоянно обновляет и улучшает системные файлы Windows, связанные с OneButtonCheckup.exe. Иногда для решения проблемы EXE нужно просто напросто обновить Windows при помощи последнего пакета обновлений или другого патча, которые Microsoft выпускает на постоянной основе.

Чтобы проверить наличие обновлений Windows (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите на кнопку Начать.
  2. Введите «update» в строке поиска и нажмите ENTER.
  3. Будет открыто диалоговое окно Обновление Windows.
  4. Если имеются доступные обновления, нажмите на кнопку Установить обновления.

Шаг 9: Произведите чистую установку Windows

Предупреждение: Мы должны подчеркнуть, что переустановка Windows займет очень много времени и является слишком сложной задачей, чтобы решить проблемы OneButtonCheckup.exe. Во избежание потери данных вы должны быть уверены, что вы создали резервные копии всех важных документов, изображений, программ установки программного обеспечения и других персональных данных перед началом процесса. Если вы сейчас е создаете резервные копии данных, вам стоит немедленно заняться этим (скачать рекомендованное решение для резервного копирования), чтобы защитить себя от безвозвратной потери данных.

Пожалуйста, учтите: Если проблема OneButtonCheckup.exe не устранена после чистой установки Windows, это означает, что проблема EXE ОБЯЗАТЕЛЬНО связана с аппаратным обеспечением. В таком случае, вам, вероятно, придется заменить соответствующее оборудование, вызывающее ошибку OneButtonCheckup.exe.

Имя файла: OneButtonCheckup.exe Последняя известная версия: 1.3.10.115
Разработчик: Part Of Auslogics Boostspeed Размер файла (байтов): 268912
Программное обеспечение: One Button Checkup Операционная система: Windows
Описание: One Button Checkup
MD5: 36b3421c94aa5892d21b2721585c12e6
SHA1: 9830F5A305F3AEA8570DD89B6263F7F2567E4797

Информация об операционной системе

Сообщения об ошибках OneButtonCheckup.exe могут появляться в любых из нижеперечисленных операционных систем Microsoft Windows:

  • Windows 10
  • Windows 8
  • Windows 7
  • Windows Vista
  • Windows XP
  • Windows ME
  • Windows 2000

Проблема с OneButtonCheckup.exe все еще не устранена?

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

Об авторе: Джей Гитер (Jay Geater) является президентом и генеральным директором корпорации Solvusoft — глобальной компании, занимающейся программным обеспечением и уделяющей основное внимание новаторским сервисным программам. Он всю жизнь страстно увлекался компьютерами и любит все, связанное с компьютерами, программным обеспечением и новыми технологиями.

Отобразить файлы EXE в алфавитном порядке:

Вы загружаете пробное программное обеспечение. Подписка на один год стоимостью $39,95 необходима для разблокировки всех функций приложения. Подписка обновляется автоматически по завершению (Узнать больше). Нажав на кнопку «Начать загрузку» и установив «Софт»», я подтверждаю, что прочитал(а) и согласен(на) с Пользовательским соглашением и Политикой конфиденциальности Solvusoft.

Что такое код isdlgbuttonchecked

&nbsp cpMin содержит индекс первого символа в массиве символов (диапазон).

&nbsp cpMax содержит индекс символа, который следует непосредственно за последним символов в массиве символов.

&nbsp Фактически, чтобы найти строку текста, вам нужно указать диапазон символом, в котором нужно искать. Значение cpMin и cpMax будут зависить от того, проводится ли поиск назад или вперед. Если поиск идет вперед, cpMin задает начальный индекс, а cpMax — конечный. Если поиск идет назад, тогда cpMin содержит конечное значение индекса, в то время как cpMax задает начальный индекс.

&nbsp lpstrText — это указатель на текстовую строку, которую нужно искать.

&nbsp EM_FINDTEXT возвращает индес первого символа в заданной текстовой строке в RichEdit. Оно возвращает -1, если указанный текст не был найден.

&nbsp wParam == опции поиска. То же самое, что и EM_FINDTEXT. lParam == указатель на структуру FINDTEXTEX.

&nbsp Первые два члена FINDTEXTEX идентичны соответствующим полям в структуре FINDTEXT. chrgText — это структура CHARRANGE, которая будет заполнена начальным и конечным индексами, если будут найдены какие-либо совпадения.

&nbsp Возвращаемое значение EM_FINDTEXTEX — то же самое, что и у EM_FINDTEXT.

&nbsp Разница между EM_FINDTEXT и EM_FINDTEXTEXT — это то, что у структуры FINDTEXTEX есть дополнительное поле, chrgText, которое будет заполненено начальным и конечным индексами, если будут найдены совпадения. Это удобно, если мы хотим иметьвозможность осуществлять больше текстовых операций над строкой.

&nbsp Замещение/вставка текста

&nbsp Контрол RichEdit предоставляет EM_SETTEXTEX для замещения/вставки текста. Это сообщение комбинирует функциональность WM_SETTEXT и WM_REPLACESEL. У него следующий синтасис:

&nbsp EM_SETTEXTEXT wParam == указатель на структуру SETTEXTEX.

&nbsp Поле ‘flags’ может быть комбинацией следующих значений:

  • ST_DEFAULT — удаляет стек совершенных операций, сбрасывает форматирование RichEdit.
  • ST_KEEPUNDO — сохраняет стек совершенных операций.
  • ST_SELECTION — замещает выделенный текст и сохраняет форматирование.

&nbsp Поле ‘codepage’ — это константа, которая указывает кодовую страницу. Обычно мы указываем CP_ACP.

&nbsp Выделение текста

&nbsp Мы можем выделить текст программно с помощью сообщений EM_SETSEL или EM_EXSETSEL. Обе прекрасно работают. Выбирать, какое из сообщений необходимо использовать, зависит от доступного формата индексов символов. Если они уже сохранены в структуры CHARRANGE, проще использовать EM_EXSETSEL.

&nbsp wParam == не используется. Должен быть равен 0. lParam == указатель на структуру CHARRANGE, который содержит диапазон символов, который необходимо выделить.

&nbsp Уведомительные события

&nbsp В случае с многолинейным edit control’ом вам необходимо сабклассировать его, чтобы получить входные сообщения, такие как события мыши/клавиатуры. RichEdit предоставляет лучший способ: он будет уведомлять родительское окно о таких событиях. Чтобы указать RichEdit, какие события нужно посылать, родительское окно посылает сообщение EM_SETEVENTMASK контролу RichEdit, указывая, в каких событиях он заинтересован. У EM_SETEVENTMASK следующий синтаксис:

&nbsp wParam == не используется. Должен быть равен нулю. lParam == маска событий. Это должна быть комбинация флагов, указанных ниже.

  • ENM_CHANGE — прием уведомлений EN_CHANGE.
  • ENM_CORRECTTEXT — прием уведомлений EN_CORRECTTEXT.
  • ENM_DRAGDROPDONE — прием уведомлений EN_DRAGDROPDONE.
  • ENM_DROPFILES — прием уведомлений EN_DROPFILES.
  • ENM_KEYEVENTS — прием уведомлений EN_MSGFILTER, относящихся к событиям от клавиатуры.
  • ENM_LINK — RichEdit 2.0 и выше: прием уведомлений EN_LINK, когда курсор мыши находится над текстом, который принимает CFE_LINK и/или другие события от мыши.
  • ENM_MOUSEEVENTS — прием уведомлений EN_MSGFILTER, относящихся к событиям от мыши.
  • ENM_OBJECTPOSITIONS — прием уведомлений EN_OBJECTPOSITIONS.
  • ENM_PROTECTED — прием уведомлений EN_PROTECTED.
  • ENM_REQUESTRESIZE — прием уведомлений EN_REQUESTRESIZE.
  • ENM_SCROLL — прием уведомлений EN_HSCROLL и EN_VSCROLL.
  • ENM_SCROLLEVENTS — прием уведомлений EN_MSGFILTER от колесика мыши.
  • ENM_SELCHANGE — прием уведомлений EN_SELCHANGE.
  • ENM_UPDATE — прием уведомлений EN_UPDATE. RichEdit 2.0 и выше: этот флаг игнорирует, а сообщения EN_UPDATE отсылаются всегда. Тем не менее, если Rich Edit 3.0 эмулирует Rich Edit 1.0, вы должны указать этот флаг для того, чтобы родительское окно принимало уведомления EN_UPDATE.

&nbsp Все вышеуказанные уведомления будут отсылаться через сообщение WM_NOTIFY: вы должны проверить поле ‘code’ структуры NMHDR, чтобы узнать, какое уведомление вы получили. Например, если вы хотите зарегистрировать сообщения от мыши (скажем, чтобы отображать контекстное меню по нажатию на правую кнопку мыши), вы дожны сдлеать что-то вроде следующего:

Что такое код isdlgbuttonchecked

Создание немодального диалогового окна

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

В примере ниже, приложение показывает на экране немодальное диалоговое окно — если оно еще не отображено на экране — когда пользователь щелкает по Перейти в (Go To) в меню программы. Диалоговое окно содержит поле редактирования текста, окошко флажка, и кнопки OK и Отменить (Cancel). Шаблон диалогового окна — ресурс в исполняемом файле приложения и имеет идентификатор ресурса DLG_GOTO . Пользователь вводит номер строки в поле редактирования текста и ставит флажок в окошке флажка, чтобы определить, что это номер строки — относительно текущей строки. Идентификаторы органа управления — ID_LINE , ID_ABSREL , IDOK и IDCANCEL .

Операторы в первой части примера создают немодальное диалоговое окно. Эти операторы, в оконной процедуре главного окна приложения, создают блок диалога тогда, когда оконная процедура получает сообщение WM_COMMAND, имеющее идентификатор меню IDM_GOTO , но только в том случае, если глобальная переменная еще не содержит допустимый дескриптор. Вторая часть примера — главный цикл обработки сообщений приложения. Цикл включает в себя функцию IsDialogMessage, чтобы гарантировать, что пользователь может использовать клавиатурный интерфейс диалогового окна в этом немодальном блоке диалога. Третья часть примера — процедура диалогового окна. Процедура извлекает содержимое поля редактирования текста и окошка флажка, когда пользователь щелкает по кнопке OK. Процедура уничтожает диалоговое окно, когда пользователь щелкает по кнопке Отменить (Cancel).

В данных выше операторах, CreateDialog вызывается только в том случае, если hwndGoto, не содержит допустимый дескриптор окна. Это гарантирует то, что прикладная программа не покажет на экране два диалоговых окна в одно и то же время. Чтобы поддерживать этот метод проверки, процедура диалогового окна должна установиться в ПУСТО (NULL), когда она уничтожает диалоговое окно.

Цикл обработки сообщений программы состоит из нижеследующих операторов:

Цикл проверяет достоверность дескриптора окна блока диалога и только тогда вызывает функцию IsDialogMessage, если дескриптор допустим. IsDialogMessage обрабатывает только то сообщение, если оно принадлежит диалоговому окну. В противном случае, функция возвращает значение ЛОЖЬ (FALSE), а цикл распределяет сообщение в соответствующее окно.

Нижеследующие операторы определяют процедуру диалогового окна:

В предыдущих операторах, процедура обрабатывает сообщения WM_INITDIALOG и WM_COMMAND. В ходе обработки WM_INITDIALOG, процедура инициализирует окошко флажка, передавая текущее значение глобальной переменной в CheckDlgButton . Затем процедура возвращает значение ИСТИНА (TRUE), чтобы предписать системе установить заданный по умолчанию фокус ввода данных.

В ходе обработки WM_COMMAND, процедура закрывает диалоговое окно, только в том случае, если пользователь щелкает по кнопке Отменить (Cancel) — то есть по кнопке, имеющей идентификатор IDCANCE L. Процедура должна вызвать функцию DestroyWindow, чтобы закрыть немодальное диалоговое окно.

Обратите внимание! на то, что процедура также устанавливает переменную в ПУСТО (NULL), гарантируя, что другие операторы, которые зависят от этой переменной, работают правильно.

Если пользователь щелкает по кнопке OK, процедура извлекает текущее состояние окошка флажка и определяет его в переменную fRelative. Затем она использует переменную, чтобы извлечь номер строки из поля редактирования текста. Функция GetDlgItemInt преобразует текст в поле редактирования в целое число. Значение fRelative выясняет, как воспринимает функция число — как знаковое, или как незнаковое значение. Если текст поля редактирования — не допустимое число, GetDlgItemInt устанавливает значение переменной fError в не нуль. Процедура проверяет это значение, чтобы решить, или показать на экране сообщение об ошибке, или выполнить задачу. В случае ошибки, процедура диалогового окна отправляет сообщение полю редактирования текста, предписывая ему выбрать текст в органе управления так, чтобы пользователь мог легко заменить его. Если GetDlgItemInt не возвращает значение ошибки, процедура может или выполнить затребованную задачу непосредственно, или отправить сообщение окну владельцу, предписывая ему выполнить эту операцию.

Обработка сложных правил в графических приложениях (С++ или С#)

Im работает над диалоговым окном, в котором должно быть выполнено несколько правил, прежде чем кнопка OK будет включена.


В настоящее время любое действие на странице, такое как ввод данных или выбор элемента из выпадающего списка (между прочим) вызывает одну функцию под названием ProcessEvent() — эта функция обрабатывает всю логику и включает или отключает кнопку OK.

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

Некоторые из правил могут быть сведены на нет другим действием в диалоговом окне, и теперь я закончил работу с инструкциями if else по всему месту или которые трудно читать и следовать и расширяться.

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

Я бы разделил ваши операторы if/else на несколько функций и сделал & = по параметру, который вы отправляете в EnableNext. Вы должны вызывать EnableNext только один раз.

Где Условие1() может быть:

Что здесь происходит, так это то, что переменная enableNext начинается с true. Затем каждый из этих элементов означает, что если какая-либо из функций ConditionX() возвращает false, enableNext будет false. Это будет верно только в конце, если ВСЕ условия истинны.

Эта проблема может быть решена с помощью концепции слушателей.

Вы можете сделать, чтобы каждый из ваших компонентов GUI имел метод isEnabled() , который проверяет его условия на основе некоторых условий. isEnabled() вызывается для каждого компонента GUI, когда вызывается любое действие, изменяющее состояние любого компонента.

Таким образом, вы можете иметь следующие объявления:

Затем при создании компонентов GUI каждый из них подключается друг к другу через прослушиватель.

Таким образом, у вас есть правила для каждого компонента, в котором они находятся, и у вас нет трёх операторов if.

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

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

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

Использование функции SendMessage

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

Программный интерфейс Windows содержит специальную функцию, предназначенную для определения идентификаторов окна органов управления по идентификатору окна диалога и идентификатору самого органа управления. Эта функция называется GetDlgItem:

В качестве параметра hdlg этой функции необходимо передать идентификатор окна диалоговой панели. Для модальных диалоговых панелей этот идентификатор можно определить только внутри функции диалога (он передается через первый параметр функции диалога). Идентификатор окна немодальной диалоговой панели возвращается функциями, создающими такую панель, например, функцией CreateDialog.

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

Для того чтобы установить переключатель с идентификатором IDC_SWITCH во включенное состояние, вы можете вызывать функцию SendMessage следующим образом:

Зная идентификатор окна органа управления, вы можете получить идентификатор самого органа управления, т. е. решить задачу, обратную выполняемой функцией DetDlgItem. Для этого следует воспользоваться функцией GetWindowWord, передав ей в качестве второго параметра константу GWW_ID:

Эта функция возвращает значения из области дополнительной памяти, определенной при регистрации класса окна. Напомним, что размер дополнительной области памяти задается значением, записанным в элементе cbWndExtra структуры WNDCLASS.

Использование специальных функций

Для упрощения работы с органами управления, расположенными в диалоговых панелях, в программном интерфейсе Windows определены специальные функции. При использовании этих функций вам не требуется указывать идентификаторы окна органов управления, достаточно знать идентификаторы самих органов управления, определенные в описании шаблона.

Для посылки сообщения органу управления удобно использовать функцию SendDlgItemMessage:

В качестве параметра hdlg этой функции необходимо указать идентификатор окна диалоговой панели. Параметр idDlgItem определяет идентификатор органа управления, которому предназначается сообщение. Остальные три параметра этой функции содержат, соответственно, код сообщения и параметры, передаваемые вместе с сообщением.

Для выполнения некоторых часто использующихся операций с органами управления в программном интерфейсе Windows определены специальные функции.

В частности, для заполнения списка LISTBOX именами файлов, каталогов и дисковых устройств предназначена функция DlgDirList:

Первый параметр этой функции указывает идентификатор окна диалоговой панели.

Параметр lpszPath — указатель на строку, содержащую шаблон для имен файлов.

Параметр idListBox перед вызовом функции должен содержать идентификатор заполняемого списка.

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

И, наконец, последний параметр этой функции определяет тип файлов, имена которых заносятся в список, а также указывают на необходимость записи в список имен каталогов и дисковых устройств. Этот параметр должен быть указан как логическая комбинация констант с префиксом имени DDL_ (вы уже знакомы с этими константами).

Аналогичная функция предусмотрена и для списка COMBOBOX:

Назначение параметров этой функции полностью аналогично назначению параметров функции DlgDirList.

Функция DlgDirSelect предназначена для получения из списка LISTBOX (подготовленного с помощью функции DlgDirList) строки, выбранной пользователем:

Параметр hdlg определяет диалоговую панель. Нужный список задается параметром idListBox. Выбранная строка будет записана в буфер, адрес которой указан с помощью параметра lpszBuffer. Размер буфера должен быть не меньше 128 байт.

Аналогичная функция предусмотрена для списка COMBOBOX:

Если ваше приложение будет работать в среде Windows версии 3.1 или более старшей версии, для получения выбранной пользователем строки вы можете использовать функции DlgDirSelectEx и DlgDirSelectComboBoxEx:

Эти функции позволяют получить в буфер lpszBuffer размером cbBufSize байт строку, выбранную пользователем из списка с идентификатором idListBox, расположенном в диалоговой панели hdlg. Однако для выбранной строки выполняется дополнительная обработка, а именно: если выбрано имя каталога или дискового устройства, функция удаляет из строки квадратные скобки и символы «-«.

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

Функция SetDlgItemText позволяет изменить заголовок органа управления или записать текст в текстовый редактор:

Текстовая строка lpszText записывается в орган управления с идентификатором idControl, расположенным в диалоговой панели hdlg.

Функция SetDlgItemInt позволяет записать в заголовок органа управления или текстовый редактор текстовую строку, полученную после преобразования целого числа в формат строки символов:

Для диалоговой панели с идентификатором окна, равным hdlg, эта функция записывает символьное представление параметра uValue в заголовок органа управления или редактор текста с идентификатором idControl. Если параметр fSigned указан как TRUE, значение uValue интерпретируется как знаковое целое, если FALSE — как беззнаковое целое.

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

Эта функция записывает текст, связанный с органом управления idControl, в буфер lpszBuffer, имеющий размер cbBufferSize байт.

Предусмотрена также функция, получающая из органа управления текстовую строку и выполняющая преобразование этой строки в целое число:

Эта функция возвращает целое число, которое образуется после преобразования текста, связанного с органом управления idControl в диалоговой панели hdlg. Если параметр fSigned указан как TRUE, преобразуемая строка интерпретируется как символьное представление знакового целого, если FALSE — как беззнакового целого. В переменную, адрес которой передается через параметр lptTranslated, записывается код ошибки. Если преобразование выполнено без ошибок, в переменную записывается значение TRUE, в противном случае — FALSE.

Есть также функции, предназначенные для работы с переключателями.

Функция CheckDlgButton предназначена для изменения состояния переключателя CHECKBOX (включения или выключения):

Для переключателя с идентификатором idButton, расположенного в диалоговой панели hdlg, устанавливается новое состояние в соответствии со значением параметра uState. Для выключения переключателя параметр uState должен иметь нулевое значение. Если этот параметр будет равен 1, переключатель будет включен, а если 2 — переведен в неактивное состояние.

Аналогичная функция предусмотрена для переключателей RADIOBUTTON:

Эта функция может обслуживать сразу группу переключателей, имеющих идентификаторы от idFirstButton до idLastButton. Она включает переключатель с идентификатором idCheckButton, после чего выключает все остальные переключатели группы в указанном параметрами idFirstButton и idLastButton диапазоне идентификаторов.

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

Эта функция возвращает состояние переключателя с идентификатором idButton, расположенного в диалоговой панели hdlg. Если переключатель находится в выключенном состоянии, возвращается нулевое значение. Для включенного переключателя возвращается значение 1. Значение 2 соответствует неактивному переключателю, изображенному серым цветом. В случае ошибки возвращается отрицательное значение -1.

Если ваше приложение использует собственную логику для передачи фокуса ввода между органами управления, расположенными в диалоговой панели, ему может потребоваться информация о последовательности, в которой должен передаваться фокус ввода. С помощью функции GetNextDlgGroupItemприложение может определить идентификатор окна предыдущего или следующего органа управления в группе:

В зависимости от значения флага fPrevious функция возвращает идентификатор предыдущего или следующего органа управления группе относительно органа управления с идентификатором hwndControl. Если значение флага fPrevious равно TRUE, функция возвращает идентификатор окна для предыдущего органа управления в группе, если FALSE — для следующего.

Функция GetNextDlgTabItem позволяет определить идентификатор окна для первого органа управления, который имеет стиль WS_TABSTOP и расположен после органа управления с заданным идентификатором или перед этим органом:

Параметр hwndControl определяет орган управления, начиная с которого функция будет выполнять поиск, параметр fPrevious определяет направление поиска. Если значение параметра fPrevious равно TRUE, функция ищет предыдущий орган управления в группе, если FALSE — следующий.

Следует упомянуть еще две функции, имеющие отношение к специфической системе координат, принятой для работы с диалоговыми панелями.

Функция MapDialogRect преобразует координаты из единиц диалоговой панели (dialog units) в пиксели:

Преобразуемые координаты необходимо записать в структуру типа RECT, адрес которой указывается во втором параметре функции. Результат преобразования будет записан в эту же структуру.

Функция GetDialogBaseUnits возвращает двойное слово, содержащее информацию о диалоговой системе координат:

Младшее слово представляет собой ширину в пикселях диалоговой единицы длины, старшее — высоту.

Приложение DLGCOMBO

Следующее приложение называется DLGCOMBO. Оно создает диалоговую панель, содержащую список «combobox», две кнопки («OK» и «Cancel») и пиктограмму (рис. 3.5). С его помощью мы продемонстрируем использование функций, предназначенных для работы с органами управления, расположенными в диалоговой панели.

Рис. 3.5. Диалоговая панель, создаваемая приложением DLGCOMBO

Главный файл приложения представлен в листинге 3.5.

Листинг 3.5. Файл dlgcombo\dlgcombo.cpp

Функция WinMain аналогична использованной в предыдущем приложении. Она создает главное окно и кнопку с надписью «Open. » для создания диалоговой панели.

В функции главного окна приложения WndProc обрабатывается сообщение WM_COMMAND, поступающее от кнопки. В ответ на это сообщение приложение создает модальную диалоговую панель, вызывая функцию DialogBox:

Обратите внимание, что в качестве последнего параметра функции DialogBox указан непосредственный адрес функции диалога. Мы не стали использовать функцию MakeProcInstance и создавать переходник, так как для трансляции приложения была использована система разработки Borland C++ for Windows версии 3.1, а функция диалога описана с ключевым словом _export.

Обработчик сообщения WN_INITDIALOG, расположенный в функции диалога DlgProc, заполняет список COMBOBOX именами файлов и каталогов, расположенных в текущем каталоге, а также именами дисковых устройств. Для этого он вызывает функцию DlgDirListComboBox:

В качестве первого параметра этой функции передается идентификатор диалоговой панели.

Второй параметр является указателем на строку шаблона имен файлов. Мы отображаем имена всех файлов, поэтому в качестве шаблона используется строка «*.*».

Третий параметр — идентификатор заполняемого списка COMBOBOX. Этот список получит сообщение CB_DIR, что и приведет к заполнению последнего именами файлов, каталогов и дисковых устройств.

Четвертый параметр — идентификатор статического органа управления, в котором будет отображаться путь к текущему каталогу, включающий имя диска.

Последний параметр определяет тип файлов, имена которых должны оказаться в списке. При помощи этого параметра вы также можете указать, надо ли заносить в список имена каталогов, расположенных в текущем каталоге, а также имена дисковых устройств.

Функция диалога DlgProc обрабатывает сообщение WM_COMMAND.

Если это сообщение содержит извещение от списка о двойном щелчке по строке (LBN_DBLCLK), обработчик сообщения вызывает функцию GetDlgItemText, переписывающую выбранную строку в буфер, вслед за чем содержимое буфера отображается на экране при помощи функции MessageBox:

Точно такая же операция выполняется, если в функцию диалога поступило сообщение с идентификатором IDOK.

При отмене диалога с помощью кнопки «Cancel», системного меню или клавиши работа диалоговой панели завершается, для чего вызывается функция EndDialog:

Идентификаторы списка и статического органа управления определены в файле dlgcombo.hpp (листинг 3.6). Этот файл необходимо включить как в главный файл приложения, так и в файл описания ресурсов.

Листинг 3.6. Файл dlgcombo\dlgcombo.hpp

Файл описания ресурсов представлен в листинге 3.7.

Листинг 3.7. Файл dlgcombo\dlgcombo.rc

В этом файле есть ссылка на использованную пиктограмму (листинг 3.8).

Листинг 3.8. Файл dlgcombo\appicon.ico

Обратите внимание на то, что в шаблоне диалоговой панели три органа управления имеют стиль WS_TABSTOP. Это кнопка «OK», список COMBOBOX и кнопка ‘Cancel». Если во время работы диалоговой панели вы будете нажимать на клавишу , фокус ввода будет переключаться между этими тремя органами управления.

В качестве идентификаторов статического органа управления и пиктограммы использовано значение -1. Эти органы управления никогда не посылают сообщения в функцию диалога, поэтому для их идентификации можно использовать любые числа.

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

Листинг 3.9. Файл dlgcombo\dlgcombo.def

Приложение DLGTAB

Приложение DLGTAB демонстрирует использование групп органов управления. Оно создает диалоговую панель «Карточка сотрудника», в которой можно ввести имя, фамилию и отчество сотрудника (в окне редактирования «Ф.И.О.»), а также указать его должность и прочие сведения (рис. 3.6).

Рис. 3.6. Диалоговая панель, создаваемая приложением DLGTAB

Группа «Должность» содержит переключатель с зависимой фиксацией на три положения: «Инженер», «Старший инженер» и «Программист». Так как у сотрудника может быть только одна должность, в данной группе мы использовали переключатель со стилем BS_AUTORADIOBUTTON.

Группа «Прочее» содержит три переключателя, имеющих стиль BS_AUTOCHECKBOX. Для каждого сотрудника вы можете выбрать произвольную комбинацию этих переключателей.

Подготовив все данные, нажмите кнопку «OK» или клавишу . При этом состояние окна редактирования и переключателей будет отображено в диалоговой панели «Вы ввели» (рис. 3.7), созданной функцией MessageBox.

Рис. 3.7. Диалоговая панель «Вы ввели»

Главный файл приложения DLGTAB представлен в листинге 3.10.

Листинг 3.10. Файл dlgtab\dlgtab.cpp

Функция WinMain при внимательном взгляде может вызвать у вас удивление. Эта функция регистрирует класс для главного окна приложения и создает это окно, вслед за чем запускает цикл обработки сообщений. Но позвольте, где же вызов привычных вам функций ShowWindow и UpdateWindow?

Мы намеренно не стали вызывать эти функции, в результате чего главное окно приложения получилось. невидимым!

Несмотря на то, что главное окно приложения не отображается, оно в момент своего создания получает сообщение WM_CREATE. Обработчик этого сообщения создает модальную диалоговую панель, вызывая функцию DialogBox:

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

Вы также можете в этом приложении вообще не создавать главное окно приложения и цикл обработки сообщений, вызвав функцию DialogBox непосредственно в функции WinMain.

Займемся теперь функцией диалога.

Обработчик сообщения WM_INITDIALOG не имеет никаких особенностей. Он возвращает значение TRUE, вследствие чего после инициализации диалоговой панели фокус ввода передается первому органу управления, описанному в шаблоне диалоговой панели со стилем WS_TABSTOP. В данном случае это поле редактирования, так как при заполнении карточки сотрудника прежде всего следует ввести его фамилию, имя и отчество.

Когда приходит сообщение WM_COMMAND с параметром wParam, равным IDOK, функция диалога получает строку из окна редактирования текста и определяет состояние переключателей, затем отображает полученную информацию, вызывая функцию MessageBox.

Для получения строки из текстового редактора вызывается функция GetDlgItemText:

Для определения состояния переключателей вызывается функция IsDlgButtonChecked:

Эта функция возвращает значение TRUE для включенного переключателя и FALSE — для выключенного.

Приложение по очереди опрашивает состояние всех переключателей, формируя при этом строку, предназначенную для вывода, соответствующим образом.

При отмене диалоговой панели вызывается функция EndDialog:

Идентификаторы всех органов управления описаны в файле dlgtab.hpp (листинг 3.11).

Листинг 3.11. Файл dlgtab\dlgtab.hpp

Файл описания ресурсов приведен в листинге 3.12.

Листинг 3.12. Файл dlgtab\dlgtab.res

В этом файле нас больше всего интересует расстановка стилей WS_GROUP и WS_TABSTOP.

Стиль WS_TABSTOP используется для тех органов управления, к которым нужно обеспечить доступ с помощью клавиши . В нашей диалоговой панели этот стиль имеют следующие органы управления: редактор текста IDC_NAME, используемый для ввода фамилии, имени и отчества сотрудника; переключатель «Инженер» (первый переключатель в группе «Должность»); переключатель «English» (первый переключатель в группе «Прочее»); кнопка с надписью ‘OK». Запустив приложение, вы можете убедиться, что если нажимать клавишу , фокус ввода будет передаваться между перечисленными выше органами управления.

Стиль WS_GROUP используется для отметки первого органа управления в группе. Внутри группы, созданной с помощью этого стиля, вы можете передавать фокус ввода при помощи клавиш перемещения курсора и .

В нашем случае группа «Должность» содержит три переключателя. Первый переключатель в группе («Инженер») имеет стили WS_GROUP и WS_TABSTOP.

Следующий орган управления, имеющий стиль WS_GROUP, должен относиться к следующей группе органов управления. В нашем случае это орган управления BS_GROUPBOX с заголовком «Прочее». Этот орган управления завершает первую группу, но сам не входит в нее.

Первый орган второй группы органов управления также имеет стили WS_GROUP и WS_TABSTOP.

Последняя группа органов управления включает в себя кнопки «OK» и «Cancel». первая из этих кнопок имеет стиль WS_GROUP.

Пиктограмма и статический орган управления, описанные в последних строках шаблона, не могут получать фокус ввода.

Шаблон диалоговой панели приложения DLGTAB имеет еще одну особенность.

Обратите внимание, что перед буквой «Д» в слове «&Должность» стоит символ «&». Этот же символ расположен перед буквой «П» в слове «&Прочее». Это не опечатка. Мы намеренно использовали символ «&» для того чтобы продемонстрировать еще одну возможность диалоговых панелей. Речь идет о клавиатурном интерфейсе, предназначенном для передачи фокуса ввода органам управления диалоговой панели.

Если вы внимательно посмотрите на создаваемую нашим приложением диалоговую панель, то сможете заметить, что буквы, перед которыми стоит знак «&», отображаются подчеркнутыми (рис. 3.6). Клавиши, соответствующие подчеркнутым буквам, можно использовать для непосредственной передаче фокуса ввода. Если нажать комбинацию клавиш , фокус ввода перейдет к первому органу управления из группы «Должность», а если — к первому органу управления из группы «Прочее».

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

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

Листинг 3.13. Файл dlgtab\dlgtab.ico

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

Галочкой проблемы в Win32 API C ++

Я этот код сделано в C ++, и я хочу спросить, почему, когда я нажимаю одну CheckBox все из них меняют статус. Пример:

СВ1 = Проверено СВ2 = непроверенных

СВ1 = непроверенных СВ2 = Проверено

Я хочу только, чтобы сделать работу одного из них, а не два одновременно.

Здесь у вас есть код:

Я оставлю этот код здесь только в том случае, если кто-то захочет узнать, как автор решил, что.

Фиксированный, просто нужно использовать переключатель и случай.

On-line справка по Win32 API

IsDlgButtonChecked

The IsDlgButtonChecked function determines whether a button control has a check mark next to it or whether a three-state button control is grayed, checked, or neither.

HWND hDlg, // handle of dialog box
int nIDButton // button identifier
);

Identifies the dialog box that contains the button control.

Specifies the integer identifier of the button control.

The return value from a button created with the BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, BS_AUTO3STATE, BS_CHECKBOX, BS_RADIOBUTTON, or BS_3STATE style can be one of the following:

Value Meaning
BST_CHECKED Button is checked.
BST_INDETERMINATE Button is grayed, indicating an indeterminate state (applies only if the button has the BS_3STATE or BS_AUTO3STATE style).
BST_UNCHECKED Button is unchecked

If the button has any other style, the return value is zero.

The IsDlgButtonChecked function sends a BM_GETCHECK message to the specified button control.

IsDlgButtonChecked

Функция IsDlgButtonChecked определяет имеет управление кнопки контрольную отметку около этого или независимо кнопка с тремя состояниями управления grayed, проверена, или никакое.

HWND hDlg, // РУЧКА диалогового ящика кнопки int идентификатор nIDButton //
);

Идентифицирует диалоговый ящик, который содержит управление кнопки.

Определяет идентификатор целого управления кнопки.

Обратная величина с кнопки создавалась BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, BS_AUTO3STATE, BS_CHECKBOX, BS_RADIOBUTTON, или стиль BS_3STATE может быть одним из следующего:

Значение Величины
Кнопка BST_CHECKED проверена.
Кнопка BST_INDETERMINATE — grayed, указывая неопределенное состояние (относится только если кнопка имеет BS_3STATE или стиль BS_AUTO3STATE).
Кнопка BST_UNCHECKED неконтролируемая

Если кнопка имеет любой другой стиль, обратная величина нулевая.

Функция IsDlgButtonChecked посылает сообщение BM_GETCHECK на определенное управление кнопки.

Илон Маск рекомендует:  Iis настройка приложений asp
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL