{"id":5843,"date":"2007-07-03T19:11:00","date_gmt":"2007-07-03T19:11:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vbteam\/2007\/07\/03\/owner-draw-in-vb-matt-gertz\/"},"modified":"2024-07-05T14:44:23","modified_gmt":"2024-07-05T21:44:23","slug":"owner-draw-in-vb-matt-gertz","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/vbteam\/owner-draw-in-vb-matt-gertz\/","title":{"rendered":"Owner Draw in VB (Matt Gertz)"},"content":{"rendered":"<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\">I hate going so long without blogging, but it&rsquo;s getting really busy around here as we get closer to the endgame for Visual Studio 2008.<span>&nbsp; <\/span>That, combined with &ldquo;review time,&rdquo; creates a bit of a problem for writing apps for the blog, and I wasn&rsquo;t able to give it much attention until last night.<span>&nbsp; <\/span>Realizing I really needed to get an article out, I was wracking my brains for something to write about.<span>&nbsp; <\/span><\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">I happened to notice that my wife was working on some puzzles in her &ldquo;Games&rdquo; magazine &ndash; she was on one of her favorites, which is called Paint-by-Numbers.<span>&nbsp;&nbsp; <\/span>I thought that it might be cool to write her a small app in which I could generate some of those puzzles for her so she wouldn&rsquo;t have to wait until the next issue arrived.<span>&nbsp; <\/span>Then&nbsp;I realized, &ldquo;Ah, what a perfect blog topic!<span>&nbsp; <\/span>There are so many things I could cover in such an app that I haven&rsquo;t covered before.&rdquo;<span>&nbsp; <\/span>So, here goes &ndash; I&rsquo;ll be writing up this app over the next couple of weeks (posting the final product at the end of the series), and will document the approach for the following topics:<\/font><\/p>\n<p class=\"MsoListParagraphCxSpFirst\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Owner draw and coordinate mapping on events (shown in this blog post)<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Supporting undo\/redo using a double list of action classes, leveraging generics for this.<\/font><\/p>\n<p class=\"MsoListParagraphCxSpMiddle\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Loading <span>&nbsp;<\/span>&amp; Saving puzzles<\/font><\/p>\n<p class=\"MsoListParagraphCxSpLast\"><span><span><font size=\"3\">&middot;<\/font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><font face=\"Calibri\" size=\"3\">Printing the puzzle and the solution<\/font><\/p>\n<h2><font face=\"Cambria\" color=\"#4f81bd\" size=\"4\">Paint-by-Numbers background<\/font><\/h2>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\">Paint-by-numbers is a puzzle wherein you&rsquo;re given a grid, and on the outside of the grid you&rsquo;re given clues about which parts of the grid should be filled in.<span>&nbsp; <\/span>For example, here&rsquo;s a simple 8&#215;8 PBN puzzle which has been solved already:<\/font><\/p>\n<div align=\"center\">\n<table class=\"MsoTableGrid\" cellspacing=\"0\" cellpadding=\"0\" border=\"1\">\n<tbody>\n<tr>\n<td class=\"\" valign=\"bottom\" width=\"64\">\n<p class=\"MsoNormal\" align=\"center\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"bottom\" width=\"22\">\n<p class=\"MsoNormal\" align=\"center\"><font size=\"3\"><font face=\"Calibri\">5<\/p>\n<p><\/font><\/font><\/p>\n<\/td>\n<td class=\"\" valign=\"bottom\" width=\"24\">\n<p class=\"MsoNormal\" align=\"center\"><font size=\"3\"><font face=\"Calibri\">1<\/p>\n<p><\/font><\/font><\/p>\n<\/td>\n<td class=\"\" valign=\"bottom\" width=\"24\">\n<p class=\"MsoNormal\" align=\"center\"><font size=\"3\"><font face=\"Calibri\">1<\/p>\n<p><\/font><\/font><\/p>\n<\/td>\n<td class=\"\" valign=\"bottom\" width=\"24\">\n<p class=\"MsoNormal\" align=\"center\"><font size=\"3\"><font face=\"Calibri\">1<\/p>\n<p><\/font><\/font><\/p>\n<\/td>\n<td class=\"\" valign=\"bottom\" width=\"24\">\n<p class=\"MsoNormal\" align=\"center\"><font size=\"3\"><font face=\"Calibri\">5<\/p>\n<p><\/font><\/font><\/p>\n<\/td>\n<td class=\"\" valign=\"bottom\" width=\"24\">\n<p class=\"MsoNormal\" align=\"center\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"bottom\" width=\"24\">\n<p class=\"MsoNormal\" align=\"center\"><font size=\"3\"><font face=\"Calibri\">8<\/p>\n<p><\/font><\/font><\/p>\n<\/td>\n<td class=\"\" valign=\"bottom\" width=\"24\">\n<p class=\"MsoNormal\" align=\"center\"><font size=\"3\"><font face=\"Calibri\">1<\/p>\n<p><\/font><\/font><\/p>\n<p class=\"MsoNormal\" align=\"center\"><font size=\"3\"><font face=\"Calibri\">1<\/p>\n<p><\/font><\/font><\/p>\n<p class=\"MsoNormal\" align=\"center\"><font size=\"3\"><font face=\"Calibri\">1<\/p>\n<p><\/font><\/font><\/p>\n<\/td>\n<td class=\"\" valign=\"bottom\" width=\"24\">\n<p class=\"MsoNormal\" align=\"center\"><font size=\"3\"><font face=\"Calibri\">2<\/p>\n<p><\/font><\/font><\/p>\n<p class=\"MsoNormal\" align=\"center\"><font size=\"3\"><font face=\"Calibri\">2<\/p>\n<p><\/font><\/font><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"\" width=\"64\">\n<p class=\"MsoNormal\" align=\"right\"><font size=\"3\"><font face=\"Calibri\">1 1 2<\/p>\n<p><\/font><\/font><\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"22\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"\" width=\"64\">\n<p class=\"MsoNormal\" align=\"right\"><font size=\"3\"><font face=\"Calibri\">1 1 1 1<\/p>\n<p><\/font><\/font><\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"22\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"\" width=\"64\">\n<p class=\"MsoNormal\" align=\"right\"><font size=\"3\"><font face=\"Calibri\">1 1 1 1<\/p>\n<p><\/font><\/font><\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"22\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<td class=\"\" valign=\"top\" width=\"24\">\n<p class=\"MsoNormal\">\n<p><font face=\"Calibri\" size=\"3\">&nbsp;<\/font><\/p>\n<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"\" width=\"64\">\n<p class=\"MsoNormal\">\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>I hate going so long without blogging, but it&rsquo;s getting really busy around here as we get closer to the endgame for Visual Studio 2008.&nbsp; That, combined with &ldquo;review time,&rdquo; creates a bit of a problem for writing apps for the blog, and I wasn&rsquo;t able to give it much attention until last night.&nbsp; Realizing [&hellip;]<\/p>\n","protected":false},"author":258,"featured_media":8818,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[22,195],"tags":[101,165],"class_list":["post-5843","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-matt-gertz","category-visual-basic","tag-matt-gertz","tag-vb2005"],"acf":[],"blog_post_summary":"<p>I hate going so long without blogging, but it&rsquo;s getting really busy around here as we get closer to the endgame for Visual Studio 2008.&nbsp; That, combined with &ldquo;review time,&rdquo; creates a bit of a problem for writing apps for the blog, and I wasn&rsquo;t able to give it much attention until last night.&nbsp; Realizing [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/5843","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/users\/258"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/comments?post=5843"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/5843\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media\/8818"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media?parent=5843"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/categories?post=5843"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/tags?post=5843"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}