{"id":331,"date":"2008-10-19T19:50:09","date_gmt":"2008-10-19T17:50:09","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=331"},"modified":"2008-10-20T09:40:30","modified_gmt":"2008-10-20T07:40:30","slug":"kleiner-workarround-fuer-mfcnext-in-verbindung-mit-cscrollview","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2008\/10\/19\/kleiner-workarround-fuer-mfcnext-in-verbindung-mit-cscrollview\/","title":{"rendered":"Kleiner Workarround f\u00fcr MFCNext in Verbindung mit CScrollView"},"content":{"rendered":"<p>Wenn man die <em>BCG<\/em>-Library oder <em>MFCNext <\/em>aus der VC++ 9.0 SP1 nutzt erh\u00e4lt man einen <em>ASSERT <\/em>wenn man ein <em>CScrollView <\/em>verwendet und\u00a0wenn das Programm maximiert gestartet wird.<\/p>\n<blockquote><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nMicrosoft Visual C++ Debug Library<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nDebug Assertion Failed!<\/p>\n<p>Program: &#8230;\\Debug\\TestSDIScrollView.exe<br \/>\nFile: f:\\dd\\vctools\\vc7libs\\ship\\atlmfc\\src\\mfc\\viewscrl.cpp<br \/>\nLine: 385<\/p>\n<p>For information on how your program can cause an assertion<br \/>\nfailure, see the Visual C++ documentation on asserts.<\/p>\n<p>(Press Retry to debug the application)<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nAbbrechen\u00a0\u00a0 Wiederholen\u00a0\u00a0 Ignorieren\u00a0\u00a0<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p><\/blockquote>\n<p>Der Grund liegt darin, dass in der <em>MFCNext <\/em>Implementierung schon sehr fr\u00fch ein <em>RedrawWindow <\/em>ausgef\u00fchrt wird wenn das Main Window maximiert wird. In diesem Fall wird <em>OnDraw<\/em>\/<em>OnPaint <\/em>bereits ausgef\u00fchrt wenn <em>SetScrollSizes<\/em> noch nicht aufgerufen wurde. Das geschieht ja normalerweise meistens erst in <em>OnInitialUpdate<\/em>.<br \/>\nDieser ASSERT soll dem Programmierer darauf hinweisen, dass <em>SetScrollSizes <\/em>unabdingbar f\u00fcr die korrekte Funktion des <em>CScrollView <\/em>notwendig ist.<br \/>\nLeider ist in diesem alten Code ein Seiteneffekt nicht ber\u00fccksichtigt worden, der durch <em>MFCNext <\/em>in Spiel kam.<\/p>\n<p>Das Ganze l\u00e4sst sich jedoch einfach umschiffen indem man im Konstruktor seines Views vorab <em>SetScrollSizes <\/em>mit Dummywerten aufruft. Die eigentliche Initialisierung mag dann sp\u00e4ter wie gewohnt in <em>OnInitialUpdate<\/em> erfolgen.<\/p>\n<pre lang=\"cpp\">CScriptEditorView::CScriptEditorView()\r\n{\r\n  \/\/ If the program is launched maximized, a RedrawWindow occurs in a very\r\n  \/\/ early stage and OnDraw would be called without an initialized mapping mode\r\n  \/\/ So we just do a dummy init here.\r\n  SetScrollSizes(MM_TEXT,CSize(0,0));\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Wenn man die BCG-Library oder MFCNext aus der VC++ 9.0 SP1 nutzt erh\u00e4lt man einen ASSERT wenn man ein CScrollView verwendet und\u00a0wenn das Programm maximiert gestartet wird. &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Microsoft Visual C++ Debug Library &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Debug Assertion Failed! Program: &#8230;\\Debug\\TestSDIScrollView.exe File: f:\\dd\\vctools\\vc7libs\\ship\\atlmfc\\src\\mfc\\viewscrl.cpp Line: 385 For information on how your program can cause an assertion failure, see &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2008\/10\/19\/kleiner-workarround-fuer-mfcnext-in-verbindung-mit-cscrollview\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eKleiner Workarround f\u00fcr MFCNext in Verbindung mit CScrollView\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":[1,30,4,27],"tags":[370,352,78,44],"class_list":["post-331","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-c","category-mfc","category-vs2008","tag-c","tag-mfc","tag-mfcnext","tag-vs-2008"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/331","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=331"}],"version-history":[{"count":1,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/331\/revisions"}],"predecessor-version":[{"id":350,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/331\/revisions\/350"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=331"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}