<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Problem mit der Internet Explorer-style Menu Bar]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem mit der &quot;Internet Explorer-style Menu Bar&quot;, wie sie in der MSDN beschrieben wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Weiter unten habe ich ein Stück Code angefügt.</p>
<p>Das Problem ist, dass der Hook zwar das MouseMove-Ereignis weiter reicht, die Toolbar reagiert aber nicht darauf. Mehr noch: Im Spy++ beobachte ich merkwürdige Dinge und zwar, so bald ein Menüpunkt angezeigt wird, bekommt die Toolbar bei Mausbewegung immer die Ereignisse: WM_PAINT, WM_ERASEBKGND, WM_MOUSEMOVE und WM_MOUSELEAVE hintereinander und das bei jeder Mausbewegung.</p>
<p>Und was noch komisch ist: Bei jeder Mausbewegung wird ein Pünktchen vor die Message gesetzt, so dass ich wenigen Bewegungen ein riesiges Dreieck im Spy habe .</p>
<p>Wo kommen diese Punkte her und wie bekomme ich eine Reaktion bei den anderen Menüpunkten ?</p>
<p>Ich bin sehr dankbar für jägliche Anregungen!!!</p>
<p>Micha</p>
<p>HIER DER CODE:</p>
<p>Ich habe eine Rebar mit einer Toolbar erstellt. Die Toolbar beinhaltet Dropdown-Buttons und ich reagiere auf das folgende Ereignis:</p>
<pre><code class="language-cpp">case TBN_DROPDOWN:

     lpnmtb = (LPNMTOOLBAR) lParam;

     GetWindowRect(g_pFrame-&gt;GetToolbarMenuWindow(), &amp;rcmenuToolbar);
     rc = lpnmtb-&gt;rcButton; 

     hmenu = ::LoadMenuA(g_pFrame-&gt;GetLanguageInstance(),                                                                                                      MAKEINTRESOURCEA(MNU_USE_MAIN));
g_pFrame-&gt;m_PopUpMenu = GetSubMenu(hmenu, lpnmtb-&gt;iItem);                       

     g_pFrame-&gt;m_HookMsg = SetWindowsHookEx(                                                                                                                                                                                                         WH_MSGFILTER, HookWndProc, NULL, GetCurrentThreadId()
                                      );

     nReturn = (UINT) ::TrackPopupMenuEx(
           g_pFrame-&gt;m_PopUpMenu, TPM_NONOTIFY | TPM_RETURNCMD | TPM_VERTICAL,         rcmenuToolbar.left + rc.left, rcmenuToolbar.bottom + (rc.bottom - rc.top - 15), 
           g_pFrame-&gt;GetMainWindow(), NULL);

           UnhookWindowsHookEx(g_pFrame-&gt;m_HookMsg);
           g_pFrame-&gt;m_HookMsg = NULL;               
break;
</code></pre>
<p>Die dazu passende Hookprocedur sieht wie folgt aus:</p>
<pre><code class="language-cpp">LRESULT CALLBACK COrgDataFrame::HookWndProc(int iCode, WPARAM wParam, LPARAM lParam)
{  
   MSG    * hookMessage;
   POINT    px;
   POINTS   pt;
   LPARAM   ppp;

   hookMessage = (MSG *) lParam;

   if (iCode == MSGF_MENU) {
      switch (hookMessage-&gt;message)
      {
         case WM_MOUSEMOVE:
            ClearMemory(px);
            ClearMemory(pt);

            pt   = MAKEPOINTS(hookMessage-&gt;lParam);
            px.x = pt.x;
            px.y = pt.y;

            ScreenToClient(g_pFrame-&gt;GetToolbarMenuWindow(), (LPPOINT) &amp;px);

            swprintf(Buf, L&quot;%d,%d:%d&quot;, px.x, px.y, count++);
            g_pFrame-&gt;SetStatusWndText(1, Buf);

            ppp  = MAKELPARAM(px.x, px.y);

            if (g_pFrame-&gt;GetToolbarMenuWindow()){ 
               SendMessage(g_pFrame-&gt;GetToolbarMenuWindow(), WM_MOUSEMOVE, hookMessage-&gt;wParam, ppp);
            }
            break;
         default:
            break;
      }
   }  
   return CallNextHookEx(g_pFrame-&gt;m_HookMsg,  iCode, wParam, lParam);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/84907/problem-mit-der-internet-explorer-style-menu-bar</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 21:15:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/84907.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Sep 2004 12:48:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit der Internet Explorer-style Menu Bar on Tue, 07 Sep 2004 08:50:03 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem mit der &quot;Internet Explorer-style Menu Bar&quot;, wie sie in der MSDN beschrieben wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Weiter unten habe ich ein Stück Code angefügt.</p>
<p>Das Problem ist, dass der Hook zwar das MouseMove-Ereignis weiter reicht, die Toolbar reagiert aber nicht darauf. Mehr noch: Im Spy++ beobachte ich merkwürdige Dinge und zwar, so bald ein Menüpunkt angezeigt wird, bekommt die Toolbar bei Mausbewegung immer die Ereignisse: WM_PAINT, WM_ERASEBKGND, WM_MOUSEMOVE und WM_MOUSELEAVE hintereinander und das bei jeder Mausbewegung.</p>
<p>Und was noch komisch ist: Bei jeder Mausbewegung wird ein Pünktchen vor die Message gesetzt, so dass ich wenigen Bewegungen ein riesiges Dreieck im Spy habe .</p>
<p>Wo kommen diese Punkte her und wie bekomme ich eine Reaktion bei den anderen Menüpunkten ?</p>
<p>Ich bin sehr dankbar für jägliche Anregungen!!!</p>
<p>Micha</p>
<p>HIER DER CODE:</p>
<p>Ich habe eine Rebar mit einer Toolbar erstellt. Die Toolbar beinhaltet Dropdown-Buttons und ich reagiere auf das folgende Ereignis:</p>
<pre><code class="language-cpp">case TBN_DROPDOWN:

     lpnmtb = (LPNMTOOLBAR) lParam;

     GetWindowRect(g_pFrame-&gt;GetToolbarMenuWindow(), &amp;rcmenuToolbar);
     rc = lpnmtb-&gt;rcButton; 

     hmenu = ::LoadMenuA(g_pFrame-&gt;GetLanguageInstance(),                                                                                                      MAKEINTRESOURCEA(MNU_USE_MAIN));
g_pFrame-&gt;m_PopUpMenu = GetSubMenu(hmenu, lpnmtb-&gt;iItem);                       

     g_pFrame-&gt;m_HookMsg = SetWindowsHookEx(                                                                                                                                                                                                         WH_MSGFILTER, HookWndProc, NULL, GetCurrentThreadId()
                                      );

     nReturn = (UINT) ::TrackPopupMenuEx(
           g_pFrame-&gt;m_PopUpMenu, TPM_NONOTIFY | TPM_RETURNCMD | TPM_VERTICAL,         rcmenuToolbar.left + rc.left, rcmenuToolbar.bottom + (rc.bottom - rc.top - 15), 
           g_pFrame-&gt;GetMainWindow(), NULL);

           UnhookWindowsHookEx(g_pFrame-&gt;m_HookMsg);
           g_pFrame-&gt;m_HookMsg = NULL;               
break;
</code></pre>
<p>Die dazu passende Hookprocedur sieht wie folgt aus:</p>
<pre><code class="language-cpp">LRESULT CALLBACK COrgDataFrame::HookWndProc(int iCode, WPARAM wParam, LPARAM lParam)
{  
   MSG    * hookMessage;
   POINT    px;
   POINTS   pt;
   LPARAM   ppp;

   hookMessage = (MSG *) lParam;

   if (iCode == MSGF_MENU) {
      switch (hookMessage-&gt;message)
      {
         case WM_MOUSEMOVE:
            ClearMemory(px);
            ClearMemory(pt);

            pt   = MAKEPOINTS(hookMessage-&gt;lParam);
            px.x = pt.x;
            px.y = pt.y;

            ScreenToClient(g_pFrame-&gt;GetToolbarMenuWindow(), (LPPOINT) &amp;px);

            swprintf(Buf, L&quot;%d,%d:%d&quot;, px.x, px.y, count++);
            g_pFrame-&gt;SetStatusWndText(1, Buf);

            ppp  = MAKELPARAM(px.x, px.y);

            if (g_pFrame-&gt;GetToolbarMenuWindow()){ 
               SendMessage(g_pFrame-&gt;GetToolbarMenuWindow(), WM_MOUSEMOVE, hookMessage-&gt;wParam, ppp);
            }
            break;
         default:
            break;
      }
   }  
   return CallNextHookEx(g_pFrame-&gt;m_HookMsg,  iCode, wParam, lParam);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/598781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/598781</guid><dc:creator><![CDATA[M_Bex]]></dc:creator><pubDate>Tue, 07 Sep 2004 08:50:03 GMT</pubDate></item></channel></rss>