<?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=415185&amp;view=findpost&amp;p=3804357</guid>
        <pubDate>Sun, 21 Jul 2019 10:18:32 +0000</pubDate>
        <title>Акселераторы и диалоговые окна</title>
        <link>https://forum.sources.ru/index.php?showtopic=415185&amp;view=findpost&amp;p=3804357</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415185&view=findpost&p=3804352'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>E.A. &#064; <time class="tag-quote__quoted-time" datetime="2019-07-21T12:47:05+03:00">21.07.19, 09:47</time></span><div class='quote '>Я сделал так чтобы работали и акселераторы главного окна и диалога, но появилась следующая неприятность:<br>
Когда открыт диалог, то сообщения не доходят до главного окна и оно не обновляется<br>
Прикреплённая картинка<br>
не обновляется даже если при изменении размеров и перетаскивании послать главному окну</div></div><br>
Да, все верно, потому что в оконной функции модального диалога - все сообщения перехватываются, обрабатываются самим диалогом, и после никуда не идут. Их попросту модальный диалог сжирает. Но ты можешь сам переопределить оконную функцию модального диалога, и некоторые сообщения не съедать в нем, а посылать дальше(вроде это можно сделать, я не помню если честно, т.к. работал с этим лет 8-10 назад, искать нужно).<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415185&view=findpost&p=3804352'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>E.A. &#064; <time class="tag-quote__quoted-time" datetime="2019-07-21T09:47:05+00:00">21.07.19, 09:47</time></span><div class='quote '>Поэтому мне и представляется более красивым отловить нажатие Ctrl+X | Ctrl+C | Ctrl+V | Delete<br>
Не понятно, почему нажатие Ctrl попадает в WM_KEYDOWN, нажатие X попадает в WM_KEYDOWN,<br>
а нажатие X при нажатом Ctrl даже не попадает в WM_KEYDOWN<br>
А куда тогда это сообщение Ctrl+X отправляется ??? </div></div><br>
Такие нажатия отслеживаются через таблицу акселераторов. Например вот тут про это написано - <a class='tag-url' href='https://docs.microsoft.com/ru-ru/windows/win32/api/winuser/nf-winuser-translateacceleratora' target='_blank'>https://docs.microsoft.com/ru-ru/windows/wi...ateacceleratora</a><br>
Либо летят в сообщении WM_SYSKEYDOWN <a class='tag-url' href='https://docs.microsoft.com/ru-ru/windows/win32/inputdev/wm-syskeydown' target='_blank'>https://docs.microsoft.com/ru-ru/windows/wi...v/wm-syskeydown</a>]]></description>
        <author>Wound</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415185&amp;view=findpost&amp;p=3804335</guid>
        <pubDate>Sat, 20 Jul 2019 21:19:44 +0000</pubDate>
        <title>Акселераторы и диалоговые окна</title>
        <link>https://forum.sources.ru/index.php?showtopic=415185&amp;view=findpost&amp;p=3804335</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415185&view=findpost&p=3804332'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>E.A. &#064; <time class="tag-quote__quoted-time" datetime="2019-07-20T20:34:35+00:00">20.07.19, 20:34</time></span><div class='quote '>Как получить старший бит ? </div></div><br>
<a class='tag-url' href='https://docs.microsoft.com/ru-ru/windows/win32/inputdev/using-keyboard-input' target='_blank'>https://docs.microsoft.com/ru-ru/windows/wi...-keyboard-input</a><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">#define SHIFTED 0x8000 </div><div class="code_line">&nbsp;nVirtKey = GetKeyState(VK_SHIFT); </div><div class="code_line">&nbsp;if (nVirtKey &amp; SHIFTED)</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script> <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="2019-07-20T21:21:11+00:00">20.07.19, 21:21</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415185&view=findpost&p=3804332'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>E.A. &#064; <time class="tag-quote__quoted-time" datetime="2019-07-20T20:34:35+00:00">20.07.19, 20:34</time></span><div class='quote '>Меня интересует теперь другой вариант, (мне он больше нравится) это отследить нажатие клавиш без всяких while{}</div></div><br>
Ну в WinAPI трансляция сообщений в цикле while - это стандартный подход. <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="2019-07-20T21:24:42+00:00">20.07.19, 21:24</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415185&view=findpost&p=3804332'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>E.A. &#064; <time class="tag-quote__quoted-time" datetime="2019-07-20T20:34:35+00:00">20.07.19, 20:34</time></span><div class='quote '>Я так и делал, однако</div></div><br>
Ну в первом посте у тебя цикл обработки сообщений расположен в функции WinMain. А для обработки сообщений для модального диалога - должен располагаться в оконной функции этого диалога. Потому что модальный диалог не пропускает свои сообщения дальше себя.]]></description>
        <author>Wound</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415185&amp;view=findpost&amp;p=3804166</guid>
        <pubDate>Fri, 19 Jul 2019 07:25:57 +0000</pubDate>
        <title>Акселераторы и диалоговые окна</title>
        <link>https://forum.sources.ru/index.php?showtopic=415185&amp;view=findpost&amp;p=3804166</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415185&view=findpost&p=3804075'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>E.A. &#064; <time class="tag-quote__quoted-time" datetime="2019-07-17T16:39:50+00:00">17.07.19, 16:39</time></span><div class='quote '>Как подключить акселераторы для модальных диалоговых окон ?</div></div><br>
Модальные диалоговые окна перехватывают цикл обработки всех сообщений на себя(ну кроме нескольких ЕМНИП сообщений, таких как отрисовка вроде, возможно путаю). Другими словами, то что у тебя написано в WinMain - не будет отрабатывать в модальном диалоге, потому как открытое диалоговое окно имеет тоже свой цикл обработки сообщений, и он когда получает какое то сообщение, не пропускает его дальше, а обрабатывает сам, т.е. примерно вот такой вот код в своей оконной функции:<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">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 (!TranslateAccelerator(hwnd, 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>
Т.е. тебе нужно в диалоге делать свою таблицу акселераторов и обрабатывать в нем же вот примерно таким же методом ее.<br>
- Куда ее запихнуть в диалоге? <br>
- В функцию PreTranslateMessage, если говорить об MFC, в чистом WinAPI - я если честно не помню, вроде в главную оконную функцию DefWindowProc ЕМНИП, давно очень с этим работал.<br>
Причем для диалога она должна быть своя, а для главного окна приложения своя.]]></description>
        <author>Wound</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415185&amp;view=findpost&amp;p=3804075</guid>
        <pubDate>Wed, 17 Jul 2019 16:39:50 +0000</pubDate>
        <title>Акселераторы и диалоговые окна</title>
        <link>https://forum.sources.ru/index.php?showtopic=415185&amp;view=findpost&amp;p=3804075</link>
        <description><![CDATA[E.A.: Для главного окна программы есть такой код<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">int APIENTRY WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow)</div><div class="code_line">{</div><div class="code_line">&nbsp;&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 (!TranslateAccelerator(hwnd, 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><div class="code_line">&nbsp;&nbsp; &nbsp;return (INT) msg.wParam;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Как подключить акселераторы для модальных диалоговых окон ?]]></description>
        <author>E.A.</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      </channel>
      </rss>
	