{"id":316,"date":"2008-09-07T18:37:29","date_gmt":"2008-09-07T16:37:29","guid":{"rendered":"http:\/\/blog.m-ri.de\/?p=316"},"modified":"2008-09-06T13:53:44","modified_gmt":"2008-09-06T11:53:44","slug":"die-unsitte-dialogbasierende-anwendungen-zu-bauen-statt-sdi-mit-cformview-zu-verwenden","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2008\/09\/07\/die-unsitte-dialogbasierende-anwendungen-zu-bauen-statt-sdi-mit-cformview-zu-verwenden\/","title":{"rendered":"Die Unsitte dialogbasierende Anwendungen zu bauen statt SDI mit CFormView zu verwenden"},"content":{"rendered":"<p>Es scheint mir meistens ein Anf\u00e4ngerfehler zu sein, dass viele MFC Entwickler (oder solche die es werden wollen) zuerst mal zu einer dialogbasierenden Anwendung greifen.<br \/>\nIst ja auch nett. Man k\u00fcmmert sich nur um die paar Dialogfelder und hat kein Doc\/View zu verwalten.<\/p>\n<p>Am Ende kommen aber dann noch weitere W\u00fcnsche:<\/p>\n<ul>\n<li>Ich h\u00e4tte gerne ein Men\u00fc<\/li>\n<li>Ich h\u00e4tte gernenoch einen Toolbar<\/li>\n<li>Ich h\u00e4tte gerne einen Status Bar<\/li>\n<li>Sch\u00f6n w\u00e4re ein Accelerator<\/li>\n<\/ul>\n<p>Triviales und nicht triviales schlie\u00dft sich an:<\/p>\n<ul>\n<li>Warum kann ich kein Command\/Routing f\u00fcr meinen Toolbar und mein Men\u00fc verwenden?<\/li>\n<li>Warum schlie\u00dft mein Dialog bei Nutzung Eingabe-Taste?<\/li>\n<li>Kann ich meinen Dialog auch resizen?<\/li>\n<li>Die Daten sollen auch gespeichert werden, wie geht das?<\/li>\n<li>Ich h\u00e4tte gerne so einen sch\u00f6nen <em>MFCNext<\/em> Toolbar in meinem Dialog, oder ein Ribbon, geht das?<\/li>\n<li>&#8230; (die Liste ist bestimmt nicht vollst\u00e4ndig)<\/li>\n<\/ul>\n<p>Gibt man dann die Antwort, dass man x Klimmz\u00fcge machen muss um so etwas in eine dialogbasierende Anwendung einzubauen (wenn es \u00fcberhaupt geht), dann erntet man noch noch die st\u00f6hnende Klage: &#8222;Ohhh Mann! Ist das kompliziert!&#8220;<\/p>\n<p>Und all das geht nur mit M\u00fche in einen <em>CDialog<\/em> einzubauen. Der Grund ist einfach: Das Commandrouting f\u00fcr all diese Elemente ist in <em>CFrameWnd<\/em> integriert. Aber ein <em>CDialog<\/em> leitet sich von <em>CWnd<\/em> ab und ist von Grunde auf f\u00fcr keine dieser Funktionen vorbereitet.<\/p>\n<p>Dabei k\u00f6nnte alles so einfach sein!<br \/>\nMan muss nur einfach eine <em>SDI<\/em> Applikation mit einem <em>CFormView<\/em> erzeugen und alle die W\u00fcnsche die mancher sp\u00e4ter hat, kann man sofort erf\u00fcllen und wenn man es wirklich nicht will auch weglassen.<\/p>\n<p>Die Frage stellt sich f\u00fcr mich also:<br \/>\nWarum nicht einfach immer gleich eine <em>SDI<\/em>\/<em>CFormView<\/em> Anwendung bauen \u2753<br \/>\nDas Potential dieser Anwendungsform ist einfach unerreichbar verglichen mit einer dialogbasierenden Anwendung.<\/p>\n<p>Also sollte man sich mal die Liste der W\u00fcnsche, die ich hier aufgestellt habe ansehen und als Checkliste betrachten. Sollte einer dieser oben aufgef\u00fchrten Punkte f\u00fcr die Applikation wichtig sein, w\u00fcrde ich dringend anraten zum <em>SDI<\/em>\/<em>CFormView<\/em> zu greifen.<br \/>\nDas ist auch der Fall, wenn diese Anforderungen erst sp\u00e4ter integriert werden soll. Oft genug ist ja die dialogbasierende Anwendung schon fertig und es hei\u00dft dann: Ich m\u00f6chte doch nur noch&#8230;<\/p>\n<p>PS: Ich pers\u00f6nlich benutze nicht mal mehr zu Testzwecken dialogbasierende Anwendungen \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es scheint mir meistens ein Anf\u00e4ngerfehler zu sein, dass viele MFC Entwickler (oder solche die es werden wollen) zuerst mal zu einer dialogbasierenden Anwendung greifen. Ist ja auch nett. Man k\u00fcmmert sich nur um die paar Dialogfelder und hat kein Doc\/View zu verwalten. Am Ende kommen aber dann noch weitere W\u00fcnsche: Ich h\u00e4tte gerne ein &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2008\/09\/07\/die-unsitte-dialogbasierende-anwendungen-zu-bauen-statt-sdi-mit-cformview-zu-verwenden\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eDie Unsitte dialogbasierende Anwendungen zu bauen statt SDI mit CFormView zu verwenden\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":[30,24,4,3],"tags":[370,352,78,74],"class_list":["post-316","post","type-post","status-publish","format-standard","hentry","category-c","category-community","category-mfc","category-programmieren","tag-c","tag-mfc","tag-mfcnext","tag-unsitten"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/316","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=316"}],"version-history":[{"count":1,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/316\/revisions"}],"predecessor-version":[{"id":317,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/316\/revisions\/317"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=316"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=316"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=316"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}