{"id":66,"date":"2007-05-07T20:26:52","date_gmt":"2007-05-07T18:26:52","guid":{"rendered":"http:\/\/blog.m-ri.de\/index.php\/2007\/05\/07\/cformview-in-einem-csplitterwnd-will-keine-mouse-wheel-nachrichten\/"},"modified":"2007-05-07T20:32:30","modified_gmt":"2007-05-07T18:32:30","slug":"cformview-in-einem-csplitterwnd-will-keine-mouse-wheel-nachrichten","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2007\/05\/07\/cformview-in-einem-csplitterwnd-will-keine-mouse-wheel-nachrichten\/","title":{"rendered":"CFormView in einem CSplitterWnd will keine Mouse Wheel Nachrichten"},"content":{"rendered":"<p>Wieder mal ein netter Bug in der MFC (<em>VC-2003<\/em> Vers. 7.1 und <em>VC-2005<\/em> Vers. 8.0).<\/p>\n<p>Platziert man ein <em>CFormView <\/em>in einem <em>CSplitterWnd <\/em>dann werden trotz sichtbarer Rollbalken, alle Mouse Wheel Nachrichten geschluckt und ignoriert.<br \/>\nNachvollziehen kann man das einfach:<\/p>\n<ul>\n<li>SDI Applikation im Explorer Stil erzeugen<\/li>\n<li>Rechtes Fenster als CFormView<\/li>\n<li>Anwendung so klein machen, dass im CFromView ein vertikaler Rollbalken erscheint.<\/li>\n<li>Nun versuchen mit dem Mausrad zu rollen.<\/li>\n<li>No chance&#8230;<\/li>\n<\/ul>\n<p>Ursache ist der folgende Code in <em>CScrollView<\/em>:<\/p>\n<p class=\"ccode\">BOOL CScrollView::OnMouseWheel(UINT fFlags, short zDelta, CPoint point)<br \/>\n{<br \/>\n\u00a0\/\/ we don&#8217;t handle anything but scrolling<br \/>\n\u00a0if (fFlags &amp; (MK_SHIFT | MK_CONTROL))<br \/>\n\u00a0\u00a0return FALSE;<br \/>\n<strong>\u00a0\/\/ if the parent is a splitter, it will handle the message<br \/>\n\u00a0if (GetParentSplitter(this, TRUE))<br \/>\n\u00a0 return FALSE;<br \/>\n<\/strong>\u00a0\/\/ we can&#8217;t get out of it&#8211;perform the scroll ourselves<br \/>\n\u00a0return DoMouseWheel(fFlags, zDelta, point);<br \/>\n}<\/p>\n<p>Wie man unschwer sieht wird bei einem Parent, dass ein CSplitterWnd ist, die Nachricht immer ignoriert. Korrekt w\u00e4re dies nur, wenn der Scrollbar nicht dem CScrollView geh\u00f6rt sondern dem CSplitterWnd. Das ist aber bei einem Konstrukt wie hier selten.<\/p>\n<p>Workarround ist relativ simpel!<br \/>\nEinfach selber einen eigenen OnMouseWheel Handler erzeugen, der so aussieht:<\/p>\n<p class=\"ccode\">BOOL CMyFromView::OnMouseWheel(UINT fFlags, short zDelta, CPoint point)<br \/>\n{<br \/>\n\u00a0\/\/ we don&#8217;t handle anything but scrolling<br \/>\n\u00a0if (fFlags &amp; (MK_SHIFT | MK_CONTROL))<br \/>\n\u00a0\u00a0return FALSE;<br \/>\n\u00a0\/\/ we can&#8217;t get out of it&#8211;perform the scroll ourselves<br \/>\n\u00a0return DoMouseWheel(fFlags, zDelta, point);<br \/>\n}<\/p>\n<p>Hier der Report in connect!<br \/>\n<a href=\"https:\/\/connect.microsoft.com\/VisualStudio\/feedback\/ViewFeedback.aspx?FeedbackID=276053\">https:\/\/connect.microsoft.com\/VisualStudio\/feedback\/ViewFeedback.aspx?FeedbackID=276053<\/a><\/p>\n<p>\u2757 PS: Das Problem tritt nat\u00fcrlich auch in anderen Klassen auf die von <em>CScrollView <\/em>abgeleitet werden!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wieder mal ein netter Bug in der MFC (VC-2003 Vers. 7.1 und VC-2005 Vers. 8.0). Platziert man ein CFormView in einem CSplitterWnd dann werden trotz sichtbarer Rollbalken, alle Mouse Wheel Nachrichten geschluckt und ignoriert. Nachvollziehen kann man das einfach: SDI Applikation im Explorer Stil erzeugen Rechtes Fenster als CFormView Anwendung so klein machen, dass im &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2007\/05\/07\/cformview-in-einem-csplitterwnd-will-keine-mouse-wheel-nachrichten\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eCFormView in einem CSplitterWnd will keine Mouse Wheel Nachrichten\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4,3],"tags":[370,352],"class_list":["post-66","post","type-post","status-publish","format-standard","hentry","category-mfc","category-programmieren","tag-c","tag-mfc"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/66","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/comments?post=66"}],"version-history":[{"count":0,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/66\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=66"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=66"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=66"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}