<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920491</guid>
        <pubDate>Tue, 08 Apr 2025 11:26:33 +0000</pubDate>
        <title>Акселераторы в диалоговом окне</title>
        <link>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920491</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=459373&view=findpost&p=3920425'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Timon K &#064; <time class="tag-quote__quoted-time" datetime="2025-04-07T14:56:51+03:00">07.04.25, 11:56</time></span><div class='quote '>Очень странно, что акселераторы не реализованы в стандартном модальном диалоге.</div></div>Подозреваю, что акселераторам мешала бы стандартная механика переходов по акцентным клавишам. Тем, которые вводятся в элементы управления символом &amp; в их надписях, как в меню. По сути это и есть акселераторы.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920476</guid>
        <pubDate>Tue, 08 Apr 2025 09:32:32 +0000</pubDate>
        <title>Акселераторы в диалоговом окне</title>
        <link>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920476</link>
        <description><![CDATA[Timon K: Через CreateDialogParam акселераторы работают отлично в окне диалога, а немодальное окно становится модальным отключением главного окна.<br>Но мне показалось, что через хук имитировать акселераторы даже проще, там всё делается в одной процедуре без таблицы акселераторов.]]></description>
        <author>Timon K</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920444</guid>
        <pubDate>Mon, 07 Apr 2025 19:30:14 +0000</pubDate>
        <title>Акселераторы в диалоговом окне</title>
        <link>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920444</link>
        <description><![CDATA[Timon K: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=459373&view=findpost&p=3920435'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>macomics &#064; <time class="tag-quote__quoted-time" datetime="2025-04-07T14:10:38+00:00">07.04.25, 14:10</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=459373&view=findpost&p=3920425'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Timon K &#064; <time class="tag-quote__quoted-time" datetime="2025-04-07T11:56:51+00:00">07.04.25, 11:56</time></span><div class='quote '>Нужно будет как-то делать из немодального модальное.</div></div><br>
<a class='tag-url' href='https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enablewindow' target='_blank'>https://learn.microsoft.com/en-us/windows/w...er-enablewindow</a></div></div><br>
Как я мог не подумать про эту опцию, при том, что я про неё прекрасно знаю... <strong class='tag-b'>macomics</strong>, ещё раз спасибо.]]></description>
        <author>Timon K</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920435</guid>
        <pubDate>Mon, 07 Apr 2025 14:10:38 +0000</pubDate>
        <title>Акселераторы в диалоговом окне</title>
        <link>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920435</link>
        <description><![CDATA[macomics: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=459373&view=findpost&p=3920425'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Timon K &#064; <time class="tag-quote__quoted-time" datetime="2025-04-07T11:56:51+00:00">07.04.25, 11:56</time></span><div class='quote '>Нужно будет как-то делать из немодального модальное.</div></div><br>
<a class='tag-url' href='https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enablewindow' target='_blank'>https://learn.microsoft.com/en-us/windows/w...er-enablewindow</a>]]></description>
        <author>macomics</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920425</guid>
        <pubDate>Mon, 07 Apr 2025 11:56:51 +0000</pubDate>
        <title>Акселераторы в диалоговом окне</title>
        <link>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920425</link>
        <description><![CDATA[Timon K: Да проще вообще зарегистрировать HOTKEY, но он отменяет действие этой клавиши (или сочетания клавиш) в других приложениях, пока не закроешь моё. Что безусловно, будет бесить пользователей.<br>
С CreateDialogParam тоже, скорее всего, не всё так просто. Нужно будет как-то делать из немодального модальное. Не сталкивался ещё и даже не смотрел, но подозреваю, что придётся поработать над этим...<br>
Очень странно, что акселераторы не реализованы в стандартном модальном диалоге. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2025-04-07T12:16:28+00:00">07.04.25, 12:16</time></span></span><br>
Немного подумав я реализовал отслеживание нажатия F1 для открытия справки через хук. Теперь это работает и в главном окне и в модальном. Костыль, конечно, как по мне, но работает. <br>
Зато акселераторы никакие теперь не нужны. Хотя может и нужны, если нужна комбинация клавиш, но мне-то для моих задач пока нужна только одна F1.<br>
macomics, спасибо за помощь.<br>
Тему пока не отмечаю решённой, вдруг кто предложит ещё какие варианты?]]></description>
        <author>Timon K</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920424</guid>
        <pubDate>Mon, 07 Apr 2025 11:38:24 +0000</pubDate>
        <title>Акселераторы в диалоговом окне</title>
        <link>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920424</link>
        <description><![CDATA[macomics: Вот поэтому проще создать окно по шаблону через CreateDialogParam и после написать обычный цикл обработки сообщений с TranslateAccelerator.<br><br>А вообще да. Надо будет устанавливать процедуру(ы)-фильтр нажатий на все дочерние окна в диалоге.]]></description>
        <author>macomics</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920423</guid>
        <pubDate>Mon, 07 Apr 2025 11:13:56 +0000</pubDate>
        <title>Акселераторы в диалоговом окне</title>
        <link>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920423</link>
        <description><![CDATA[Timon K: <strong class='tag-b'>macomics</strong>, я не совсем понял, а где ловить нажатия на клавиши? Для каждого элемента в диалоговом окне, который может получить фокус, делать свой субкласс?]]></description>
        <author>Timon K</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920413</guid>
        <pubDate>Mon, 07 Apr 2025 09:43:09 +0000</pubDate>
        <title>Акселераторы в диалоговом окне</title>
        <link>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920413</link>
        <description><![CDATA[macomics: Если хотите использовать и дальше системный цикл обработки сообщений из DialogBoxParam, тогда придется эмитировать TranslateAccelerator в процедуре диалогового окна (преобразовывать соответствующие нажатия на клавиши в сообщения WM_COMMAND). Но вы можете создать диалог через CreateDialogParam и использовать дальше свой цикл обработки сообщений с TranslateAccelerator.]]></description>
        <author>macomics</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920412</guid>
        <pubDate>Mon, 07 Apr 2025 09:24:17 +0000</pubDate>
        <title>Акселераторы в диалоговом окне</title>
        <link>https://forum.sources.ru/index.php?showtopic=459373&amp;view=findpost&amp;p=3920412</link>
        <description><![CDATA[Timon K: Доброго времени суток&#33; Прошу помощи.<br>
<br>
Файл ресурсов:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">APP_ACCELERATORS ACCELERATORS</div><div class="code_line">BEGIN</div><div class="code_line">VK_F1, CM_AHHELP, VIRTKEY</div><div class="code_line">END</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Загружаю акселератор из файла ресурсов и модифицирую главный цикл программы:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;hAccel = LoadAccelerators(GetModuleHandle(NULL), TEXT(&quot;APP_ACCELERATORS&quot;));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while (GetMessage(&amp;msg, NULL, 0, 0))</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (!hAccel || !TranslateAccelerator(hMainWnd, hAccel, &amp;msg))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TranslateMessage(&amp;msg);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DispatchMessage(&amp;msg);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><br>
<br>
В обработчике событий главного окна отлавливаю команду CM_AHHELP и открываю справку.<br>
В основном окне, пока оно развёрнуто и в фокусе это работает просто замечательно, как задумано.<br>
Но я не могу понять, как прикрутить этот же акселератор к модальному диалогу.<br>
Открывается диалог так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_SETTINGSBOX), hWnd, SettingsProc, (LPARAM)myGlobData);</div></ol></div></div></div></div><br>
Т.к. цикл диалога за пределами моего приложения, я не могу его модифицировать так, как это сделано в цикле главного окна<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (!hAccel || !TranslateAccelerator(hMainWnd, hAccel, &amp;msg))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TranslateMessage(&amp;msg);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DispatchMessage(&amp;msg);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div></ol></div></div></div></div><br>
<br>
Пожалуйста, дайте мне пинок в нужном направлении.]]></description>
        <author>Timon K</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      </channel>
      </rss>
	