<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Craig McMurtry's WebLog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/craigmcmurtry/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/craigmcmurtry/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 04:56:59 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Testing Spark Streaming code ingesting data from Kusto, using ScalaTest</title>
      <link>https://docs.microsoft.com/archive/blogs/craigmcmurtry/testing-spark-streaming-code-ingesting-data-from-kusto-using-scalatest</link>
      <pubDate>Wed, 31 May 2017 00:42:35 GMT</pubDate>
      <dc:creator><![CDATA[Craig McMurtry]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/craigmcmurtry/?p=2265</guid>
      <description><![CDATA[Mr. Marcin Kuthan has a post on testing Spark Streaming code that, in production, would be ingesting...]]></description>
      <content:encoded><![CDATA[Mr. Marcin Kuthan has <a href="https://mkuthan.github.io/blog/2015/03/01/spark-unit-testing/">a post on testing Spark Streaming code that, in production, would be ingesting data from Apache Kafka</a>.  However, his strategy is to mock out the Kafka source, so as to unit test the Spark code.  That approach is more pure, certainly, than the one that led me to this post of mine.

As a test-driven developer, my aim was to validate that Spark Streaming code could, indeed, ingest data from Apache Kafka, and to have that validation incorporated within a test that could be executed repeatedly and catch, for instance, mishaps that might transpire from a change in the version of the libraries one was using.  The test assumes that Kafka is running locally and either already has a topic named, "test," or has been configured to create topics on-demand.  A better version of the test might merely assume that Kafka could be run locally, and start it.

Scala programmers may well object to one intentional departure from the Scala idiom, which is to explicitly declare the type of every value.  In my view, a little extra typing by the author of any code will save a lot of mental effort by subsequent readers.

The use, and, indeed, the naming, of the WaiterSink object follows Mr. Zubair Nabi's discussion of "The Art of Side Effects," in his terrific book, <em>Pro Spark Streaming: The Zen of Real-time Analytics using Apache Spark</em>.

The version of Kafka I am using is 0.10.2.1 and the version of Spark is 2.1.1 prebuilt for Hadoop 2.7 and later.  Here is the sbt file, first ...

&nbsp;

name := "Party"

version := "1.0"

scalaVersion := "2.11.8"

dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-annotations" % "2.6.5"
dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-core" % "2.6.5"
dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-databind" % "2.6.5"
dependencyOverrides += "com.fasterxml.jackson.module" % "jackson-module-paranamer" % "2.6.5"

// kafka: https://mvnrepository.com/artifact/org.apache.kafka/kafka_2.11
libraryDependencies += "org.apache.kafka" %% "kafka" % "0.10.2.1"

// spark core: https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.11
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.1"

// spark streaming: https://repo1.maven.org/maven2/org/apache/spark/spark-streaming_2.11/2.1.1/
libraryDependencies += "org.apache.spark" % "spark-streaming_2.11" % "2.1.1"

// spark streaming kafka: https://repo1.maven.org/maven2/org/apache/spark/spark-streaming-kafka-0-10-assembly_2.11/2.1.1/
libraryDependencies += "org.apache.spark" % "spark-streaming-kafka-0-10-assembly_2.11" % "2.1.1"

// ScalaTest: https://www.scalatest.org/
libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.2" % Test

&nbsp;

Here's the ScalaTest code.  The code starts the Spark Stream, publishes an event in Kafka, and wait until that event is observed in the Spark stream, or until a timeout expires.

&nbsp;
<pre>import java.util.{Properties, UUID}
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.clients.producer._
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark._
import org.apache.spark.rdd._
import org.apache.spark.streaming._
import org.apache.spark.streaming.dstream._
import org.apache.spark.streaming.kafka010._
import org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent
import org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe
import org.scalatest._
import org.scalatest.concurrent.AsyncAssertions._
import org.scalatest.concurrent.PatienceConfiguration._
import org.scalatest.concurrent.TimeLimitedTests
import org.scalatest.time.Span

final class SparkTests extends FunSuite with TimeLimitedTests {

  private val CONSUMPTION_TIMEOUT_UNITS: Int = 10
  private val COUNT_CONSUMER_THREADS: Int = 1

  private val KAFKA_AUTO_OFFSET_RESET_LATEST : String = "latest"
  private val KAFKA_MESSAGE_BROKER: String = "localhost:9092"
  private val KAFKA_MESSAGE_ACKNOWLEDGEMENTS_LEADER: String = "1"
  private val KAFKA_DESERIALIZER_STRING: Object = classOf[StringDeserializer]
  private val KAFKA_SERIALIZER_STRING: String = "org.apache.kafka.common.serialization.StringSerializer"
  private val KAFKA_TOPIC: String = "test"
  private val KAFKA_DISABLE_AUTO_COMMIT: java.lang.Boolean = false

  private val KAFKA_PROPERTY_KEY_AUTO_OFFSET_RESET: String = "auto.offset.reset"
  private val KAFKA_PROPERTY_KEY_BROKER_ACKNOWLEDGEMENTS: String = "acks"
  private val KAFKA_PROPERTY_KEY_BOOTSTRAP_SERVERS: String = "bootstrap.servers"
  private val KAFKA_PROPERTY_KEY_ENABLE_AUTO_COMMIT: String = "enable.auto.commit"
  private val KAFKA_PROPERTY_KEY_GROUP_IDENTIFIER: String = "group.id"
  private val KAFKA_PROPERTY_KEY_DESERIALIZER_KEYS: String = "key.deserializer"
  private val KAFKA_PROPERTY_KEY_DESERIALIZER_VALUES: String = "value.deserializer"
  private val KAFKA_PROPERTY_KEY_SERIALIZER_KEYS: String = "key.serializer"
  private val KAFKA_PROPERTY_KEY_SERIALIZER_VALUES: String = "value.serializer"

  private val SPARK_BATCH_DURATION: Duration = Seconds(10)
  private val SPARK_MASTER_NODE: String = "local[*]"
  private val SPARK_CHECKPOINT = "SparkStreamingTestsCheckpoint"

  private val TIME_LIMIT_UNITS: Int = CONSUMPTION_TIMEOUT_UNITS * 2
  private val ZOOKEEPER: String = "localhost:2181"

  private val kafkaConsumerParametersDirect: Map[String, Object] = Map[String, Object](
    (KAFKA_PROPERTY_KEY_BOOTSTRAP_SERVERS, KAFKA_MESSAGE_BROKER),
    (KAFKA_PROPERTY_KEY_DESERIALIZER_KEYS, KAFKA_DESERIALIZER_STRING),
    (KAFKA_PROPERTY_KEY_DESERIALIZER_VALUES, KAFKA_DESERIALIZER_STRING),
    (KAFKA_PROPERTY_KEY_GROUP_IDENTIFIER, UUID.randomUUID.toString),
    (KAFKA_PROPERTY_KEY_AUTO_OFFSET_RESET, KAFKA_AUTO_OFFSET_RESET_LATEST),
    (KAFKA_PROPERTY_KEY_ENABLE_AUTO_COMMIT, KAFKA_DISABLE_AUTO_COMMIT))

  private val kafkaProducerProperties: Properties = {
    val result: Properties = new Properties()
    result.put(KAFKA_PROPERTY_KEY_BOOTSTRAP_SERVERS, KAFKA_MESSAGE_BROKER)
    result.put(KAFKA_PROPERTY_KEY_SERIALIZER_KEYS, KAFKA_SERIALIZER_STRING)
    result.put(KAFKA_PROPERTY_KEY_SERIALIZER_VALUES, KAFKA_SERIALIZER_STRING)
    result.put(KAFKA_PROPERTY_KEY_BROKER_ACKNOWLEDGEMENTS, KAFKA_MESSAGE_ACKNOWLEDGEMENTS_LEADER)
    result
  }

  private lazy val kafkaProducer: KafkaProducer[String, String] = new KafkaProducer(kafkaProducerProperties)

  private lazy val sparkConfiguration: SparkConf = {
    new SparkConf()
    .setMaster(SPARK_MASTER_NODE)
    .setAppName(UUID.randomUUID.toString)
    .setJars(SparkContext.jarOfClass(this.getClass).toSeq)
  }
  private lazy val sparkConsumerStrategy: ConsumerStrategy[String, String] =
    Subscribe[String, String](Array(KAFKA_TOPIC), kafkaConsumerParametersDirect)

  private lazy val sparkStreamingContext: StreamingContext =
    new StreamingContext(sparkConfiguration, SPARK_BATCH_DURATION)

  private val sparkLocationStrategy: LocationStrategy = PreferConsistent

  private val sparkOffsetRanges: Array[OffsetRange] = Array(OffsetRange(KAFKA_TOPIC, 0, 0, 100))

  val timeLimit = Span(TIME_LIMIT_UNITS, org.scalatest.time.Seconds)</pre>
<pre>  object WaiterSink {
    val waiter: Waiter = new Waiter

    def apply(): Waiter = waiter
  }
  test("A message can be received via a direct stream") {
    assert(Option(sparkStreamingContext).isDefined)
    assert(Option(sparkConsumerStrategy).isDefined)
    assert(Option(kafkaProducer).isDefined)

    val recordValue: String = UUID.randomUUID.toString

    val waiter: Waiter = new Waiter

    val stream: InputDStream[ConsumerRecord[String, String]] =
      KafkaUtils.createDirectStream[String, String](
        sparkStreamingContext,
        sparkLocationStrategy,
        sparkConsumerStrategy)
    val discretizedStream: DStream[(String, String)] =
          stream.map(
            (item: ConsumerRecord[String, String]) =&gt;
              (item.key, item.value))

    val recordFunction: ((String, String)) =&gt; Unit =
      (record: (String, String)) =&gt; {
        if (recordValue == record._2) {
          WaiterSink().dismiss()
        }
      }
    val outputFunction: (RDD[(String, String)]) =&gt; Unit =
      (dataset: RDD[(String, String)]) =&gt; {
        dataset.foreach(recordFunction)
      }
    discretizedStream.foreachRDD(outputFunction)

    try {
      sparkStreamingContext.start

      val record: ProducerRecord[String, String] =
        new ProducerRecord[String, String](
          KAFKA_TOPIC,
          recordValue)
      val metadata: RecordMetadata = kafkaProducer.send(record).get()
      assert(Option(metadata).isDefined)

      WaiterSink().await(Timeout(Span(CONSUMPTION_TIMEOUT_UNITS, org.scalatest.time.Seconds)))
    }
    finally {
      sparkStreamingContext.stop(true)
    }
  }
}


</pre>
&nbsp;

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Enable Intel Virtualization Technology under Windows 8 ... and still have a working USB keyboard</title>
      <link>https://docs.microsoft.com/archive/blogs/craigmcmurtry/enable-intel-virtualization-technology-under-windows-8-and-still-have-a-working-usb-keyboard</link>
      <pubDate>Sun, 25 Aug 2013 09:16:12 GMT</pubDate>
      <dc:creator><![CDATA[Craig McMurtry]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/craigmcmurtry/2013/08/25/enable-intel-virtualization-technology-under-windows-8-and-still-have-a-working-usb-keyboard/</guid>
      <description><![CDATA[This morning, I set about installing the Windows Phone SDK on a Windows 8 64-bit desktop.&nbsp; The...]]></description>
      <content:encoded><![CDATA[<p>This morning, I set about installing the Windows Phone SDK on a Windows 8 64-bit desktop.&nbsp; The emulator relies on Hyper-V, which in turn relies on the&nbsp;virtualization support of the central processing unit, which, in this case, is an Intel Core i7.&nbsp; After rebooting into the BIOS and enabling virtualization, I found that I would consistently have no keyboard and mouse available in Windows 8.&nbsp; If I rebooted and went into the BIOS settings, I would have both.&nbsp; Yes, the mouse, too: the motherboard is an Asus Maximus IV Extreme, which, in addition to such insanely virtuoso capabilities as permitting one to overclock the thing from an iPad, allows one to navigate the BIOS settings with both a mouse and a keyboard.&nbsp; It was only after Windows 8 began loading that all of my USB devices would disappear.&nbsp;</p>
<p>&nbsp;</p>
<p>I toggled the virtualization support on and off and confirmed that it was indeed having that setting on that led the USB devices to not be detected.&nbsp; And yes, I ensured that I had flashed up to the latest BIOS.&nbsp;</p>
<p>&nbsp;</p>
<p>When I set about finding a solution, I discovered that it was not just developers like myself that were encountering the disappearing devices problem.&nbsp; I gather from TechNet that, especially of late, folk are having the miserable experience of turning on their Windows 8 laptops and desktops and finding that they have no keyboard or mouse control.&nbsp; Only those among them&nbsp;with touch screens are able to log-on!&nbsp;</p>
<p>&nbsp;</p>
<p>Someone had posted a fix to the TechNet thread, which seems to also work for my case.&nbsp; In the Control Panel, under Power Settings, select the option of choosing what the power button does.&nbsp; Disable the "Fast Startup" option.&nbsp;</p>
<p>&nbsp;</p>
<p>Of course, I was able to get my mouse and keyboard back by turning off virtualization in order to be able to manipulate this setting.&nbsp; I'd be very much inclined to recommend disabling Fast Startup on any Windows 8 PC while one still has devices to control it.&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Skyfall</title>
      <link>https://docs.microsoft.com/archive/blogs/craigmcmurtry/skyfall</link>
      <pubDate>Thu, 15 Nov 2012 13:32:26 GMT</pubDate>
      <dc:creator><![CDATA[Craig McMurtry]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/craigmcmurtry/2012/11/15/skyfall/</guid>
      <description><![CDATA[I have to talk to someone about the newest James Bond film, Skyfall.&nbsp;Lacking anyone I know...]]></description>
      <content:encoded><![CDATA[<p>I have to talk to someone about the newest James Bond film, <em>Skyfall</em>.&nbsp;<br />Lacking anyone I know personally who cares, I&rsquo;m doing it here.&nbsp; Maybe there will be spoilers in what I am about<br />to write.&nbsp;</p>
<p>&nbsp;</p>
<p>While <em>Skyfall</em> is<br />not as bad as <em>Quantum of Solace</em> was<br />and while it might be a fine action thriller, it&rsquo;s not a good James Bond<br />movie.&nbsp; What&rsquo;s the standard by which one<br />can make such an assessment?&nbsp; Well, I<br />think we can quickly agree that any of the Eon Sean Connery films set the<br />standard.&nbsp; We&rsquo;d probably debate what else<br />belongs in that pantheon.&nbsp; I&rsquo;d certainly<br />include a great many other films that I consider superior, including <em>On her Majesty&rsquo;s Secret Service</em>, <em>Live and Let Die</em>, <em>For Your Eyes Only</em>, <em>The<br />Living Daylights</em>, <em>Goldeneye</em>, <em>The World is Not Enough</em> and Eon&rsquo;s <em>Casino Royale</em>.&nbsp;</p>
<p>&nbsp;</p>
<p>What might we distill from among those to be the requirements<br />for a good James Bond film?&nbsp; I propose<br />that the foremost criterion is that a good James Bond movie incorporates ideas<br />that are not found in other films of the era.&nbsp;<br />I found none of those in <em>Skyfall</em><br />and by that criterion, I dismiss it as an inferior James Bond film.&nbsp; An excellent example of the sort of novel<br />idea that is entirely missing from <em>Skyfall</em><br />is the frogman fight in <em>Thunderball</em>.&nbsp; Scuba-diving was not science fiction when the<br />latter film was made; anyone of moderate means could go scuba diving.&nbsp; The idea of having dozens of scuba-divers<br />battle each other underwater, though, was ingenious and, I surmise, devilishly<br />hard to film at the time.&nbsp; By contrast, a<br />motorcycle chase over the rooftops of Istanbul is not conceptually<br />brilliant.&nbsp; In fact, it feels like<br />something that was done at least as well in a Jason Bourne movie; the second<br />one, if I remember correctly.&nbsp;</p>
<p>&nbsp;</p>
<p>A reasonable counter-proposition might be that although the<br />Eon <em>Casino Royale</em> is generally<br />accepted as one of the finest Bond films, it actually doesn&rsquo;t have any of those<br />sorts of ideas.&nbsp; That might be true,<br />although Le Chiffre&rsquo;s predicament arguably qualifies and so does Vespa&rsquo;s betrayal,<br />which is the reason for the Bond&rsquo;s progressive mental deterioration and<br />misogyny in the novels.&nbsp; And what<br />certainly qualifies as a remarkable idea was the whole notion of making a Bond<br />film with brutally-realistic hand-to-hand combat and showing the agent at the<br />outset of his career.&nbsp; Unfortunately, it<br />turns out that&rsquo;s not enough of an idea to power <em>Quantum of Solace</em> and <em>Skyfall</em><br />as well.&nbsp;</p>
<p>&nbsp;</p>
<p>Something else that was remarkable in the original Bond<br />movies was a particular character trait of Bond himself.&nbsp; He loved to kill his opponents.&nbsp; To do so was to triumph, and he relished<br />that.&nbsp; Look at the smirk on Connery&rsquo;s<br />face when he kills Professor Dent in <em>Dr.<br />No</em>.&nbsp; There had been anti-heroes in<br />film before James Bond, but never one who was presented quite so heroically<br />while being that brutal.&nbsp; Daniel Craig<br />incorporates something of that attitude into his performance, but it&rsquo;s a different<br />nuance.&nbsp; In his performance, the response<br />to killing is more one that conveys surprise at being the one that<br />survived.&nbsp; That&rsquo;s interesting, but not<br />interesting enough.&nbsp; Craig&rsquo;s Bond is also<br />written as being too much of a hero.&nbsp; At<br />the beginning of <em>Skyfall</em>, for<br />example, he hesitates over a wounded colleague.&nbsp;<br />That plot point is relevant with respect to M&rsquo;s behavior in that scene,<br />and M&rsquo;s behavior is what <em>Skyfall</em> is<br />all about.&nbsp; But a compassionate James<br />Bond is not a memorable or interesting as the refined brute.&nbsp; The brute was even present in Roger Moore&rsquo;s<br />version.&nbsp; After bedding a woman in <em>Live and Let Die</em>, he kills her and as he&rsquo;s<br />about to do that, she protests: &rdquo;You wouldn&rsquo;t kill me after what we&rsquo;ve just<br />done!&rdquo;&nbsp; &ldquo;Well, I certainly wouldn&rsquo;t do it<br />before,&rdquo; Bond replies as he pulls the trigger.&nbsp;</p>
<p>Now Eon&rsquo;s <em>Casino<br />Royale</em> was the James Bond film that most closely followed the plot of the<br />original Fleming novel, other than <em>From<br />Russia with Love</em> and, of course, <em>Thunderball</em>,<br />where the novel was written for the screen.&nbsp;<br />After seeing that film, which I consider to be one of the very finest of<br />the series, I thought it would be a wonderful idea for Eon to now proceed with<br />a series of movies that filmed the books, using their new approach of very<br />realistic violence rather than the science fiction and even comic action that<br />had become a hallmark of the franchise.&nbsp;</p>
<p>&nbsp;</p>
<p>Did you know that, with <em>Skyfall</em>,<br />they&rsquo;re essentially doing just that?&nbsp; Yes,<br /><em>Skyfall</em> is a more faithful movie<br />version of the novel, <em>The Man with the<br />Golden Gun</em> than the Roger Moore film with title.&nbsp;</p>
<p>&nbsp;</p>
<p>Now, let&rsquo;s say that one decided to go back to the original<br />texts and bring them to the screen using the rich yet muted palate of <em>Casino Royale</em>.&nbsp; Would one naturally start with the novel that<br />was least well-received, having been published posthumously from an early Ian<br />Fleming draft?&nbsp; Even if one might dismiss<br />the quality of the novel given that one would be adapting it anyway, lifting<br />only the essential plot elements, might not the earlier <em>Golden Gun</em> film given one pause?&nbsp;<br />As bad as <em>Quantum of Solace</em><br />was and as bad as <em>License to Kill was</em>,<br />I propose that we can quickly agree that <em>The<br />Man with the Golden Gun</em> is certainly the worst James Bond movie.&nbsp;</p>
<p>&nbsp;</p>
<p>But there it is.&nbsp; <em>Skyfall</em> is a filmed representation of<br />Fleming&rsquo;s novel, <em>The Man with the Golden<br />Gun</em>.&nbsp; In the beginning of the book,<br />Bond is presumed dead, just as he is in <em>Skyfall</em>.&nbsp; When he returns, his fitness for duty is<br />questioned in both treatments.&nbsp; In the<br />book, a former double-o agent returns from a disappearance and attempts to kill<br />M.&nbsp; Bond is that agent in the novel,<br />whereas in the film, it&rsquo;s Mr. Silver.&nbsp; In<br />the book, Bond must stop the killing of British agents, which is precisely his<br />mission in <em>Skyfall</em>.&nbsp; The assassin in the novel is identified by<br />his unique choice of weapon and ammunition.&nbsp;<br />An assassin in <em>Skyfall</em> is<br />identified by his unique bullets.&nbsp; In the<br />book, Bond catches up with the principal villain on an island he&rsquo;s taken over,<br />which is exactly the setting in which Bond finds Mr. Silver in the movie.&nbsp; Just in case aficionados might have missed<br />these hints, some additional ones are provided by which <em>Skyfall</em> references the earlier <em>Golden<br />Gun</em> film.&nbsp; In both movies, Bond<br />visits Macau and proceeds from there to an island in the South China Sea.&nbsp; And in the climax of both films, someone dies<br />because although they shoot first, they&rsquo;re shooting at a mirror image of their nemesis.&nbsp;</p>
<p>&nbsp;</p>
<p>I can only suppose that, if one wants to reboot the franchise<br />by going back to the original texts then it might have been considered less<br />riskly to do so with one of the least well-known plots than it would have been<br />to redo <em>From Russia with Love</em>, for<br />example.&nbsp; Still, I would have thought <em>Golden Gun</em> would have been toxic<br />material to reference.&nbsp; Could it possibly<br />have come up in the pitch meeting?&nbsp;<br />Surely the Eon folk have an encyclopedic knowledge of the pantheon and recognized<br />the intention.&nbsp;</p>
<p>For all of my disappointment with <em>Skyfall</em>, I wouldn&rsquo;t hesitate to say that it&rsquo;s a fine action<br />thriller.&nbsp; In particular, Bond&rsquo;s scene<br />with S&eacute;verine in the bar is extremely well<br />written and masterfully acted.&nbsp; Watching<br />that scene made me expect that I would end up feeling delighted by the<br />movie.&nbsp; Then a subway train crashed<br />through a ceiling and I knew it is was hopeless and just wanted it to be<br />over.&nbsp;</p>
<p>&nbsp;</p>
<p>A fine action thriller doesn&rsquo;t<br />nearly qualify as a good James Bond film; otherwise, <em>License to Kill</em> would not be close to the bottom of every Bond film&rsquo;s<br />list.&nbsp; All the good James Bond films rely<br />on novel ideas for their effect, and <em>Skyfall</em><br />doesn&rsquo;t have any of those.&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Jon Duckett's "HTML and CSS: Design and Build Websites:" Go from CSS zero to hero in an evening</title>
      <link>https://docs.microsoft.com/archive/blogs/craigmcmurtry/jon-ducketts-html-and-css-design-and-build-websites-go-from-css-zero-to-hero-in-an-evening</link>
      <pubDate>Wed, 03 Oct 2012 12:07:28 GMT</pubDate>
      <dc:creator><![CDATA[Craig McMurtry]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/craigmcmurtry/2012/10/03/jon-ducketts-html-and-css-design-and-build-websites-go-from-css-zero-to-hero-in-an-evening/</guid>
      <description><![CDATA[Whenever I've developed Web applications, which I used to do all the time and now do only...]]></description>
      <content:encoded><![CDATA[<p>Whenever I've developed Web applications, which I used to do all the time and now do only periodically, I've never had the luxury of receving HTML and CSS from the designer: only an image of the layout.&nbsp; I expect that's not entirely uncommon, that the work of rendering the designs with HTML and CSS is sometimes the work of the developer along with the coding, and sometimes the work of the designer.&nbsp;</p>
<p>&nbsp;</p>
<p>When I learned the craft originally, I'd found "Instant HTML Programmer's Reference: HTML 4.0 Edition," by Alex Homer, Chris Ullman and Steve Wright, to be an excellent resource.&nbsp; I still have a very, very battered copy of it always handy.&nbsp;</p>
<p>&nbsp;</p>
<p>However, now that I've found myself writing a stylesheet again after several years of not having to do that, I wanted to refresh myself, and carted home several books from Barnes and Noble that looked useful.&nbsp; The one that looked best in the store turned out to be a fantastic choice.&nbsp; It's Jon Duckett's "HTML &amp; CSS: Design and Build Websites," published by Wiley.&nbsp;</p>
<p>&nbsp;</p>
<p>Why is it excellent?&nbsp; Well, the author doesn't just identify all of the CSS properties and values with examples of the effects--which a lot of texts on the subject do.&nbsp; Duckett does more.&nbsp; He identifies the fundamentals, such as block and inline elements, which are implicit in the technology, and layers his account of each property and value on that foundation.&nbsp; Then he tops it off by presenting state-of-the-art advice and useful techniques.&nbsp;</p>
<p>&nbsp;</p>
<p>As other reviewers of the book have mentioned, the thing also looks gorgeous.&nbsp; Duckett himself is credited as a designer along with Emme Stone.&nbsp;</p>
<p>&nbsp;</p>
<p>I was going to post this review where I thought it would have the most effect, on Amazon.com, but there I was surpised to find that the book is only available through the marketplace and not sold directly by the world's biggest bookseller.&nbsp; That's unfortunate.&nbsp; I think everyone that has anything to do with getting pages up on the Web would benefit from owning Jon Duckett's book.&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Displaying a downloaded icon</title>
      <link>https://docs.microsoft.com/archive/blogs/craigmcmurtry/displaying-a-downloaded-icon</link>
      <pubDate>Sat, 31 Dec 2011 14:23:09 GMT</pubDate>
      <dc:creator><![CDATA[Craig McMurtry]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/craigmcmurtry/2011/12/31/displaying-a-downloaded-icon/</guid>
      <description><![CDATA[Let's say that you want your Microsoft Foundation Classes (MFC) application to display an icon that...]]></description>
      <content:encoded><![CDATA[<p>Let's say that you want your Microsoft Foundation Classes (MFC) application to display an icon that it has downloaded, rather in the way that Internet Explorer displays icons on its tabs.&nbsp;</p>
<p>The first step is to download the remote icon to a local file.&nbsp;&nbsp;Here is a function for doing that:</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">void WebResource::Download()</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">{</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(this-&gt;uniqueIdentifier))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::AfxThrowNotSupportedException();</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CFile fileLocal(this-&gt;fileName,CFile::modeWrite|CFile::modeCreate);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const UINT BufferSize = Constants::BufferSizeInBytesDownload;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char* buffer = new char[BufferSize];</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(buffer))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; THROW(new CMemoryException());</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CInternetSession session;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CStdioFile* fileRemote = session.OpenURL(this-&gt;GetLocator());</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(fileRemote))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exception::Throw(IDS_ERROR_DOWNLOAD_TARGET_TEMPLATE,this-&gt;GetLocator());</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UINT downloaded = 0;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOL result = TRUE;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::ZeroMemory(buffer,BufferSize);</span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; downloaded = fileRemote-&gt;Read(buffer,BufferSize);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(downloaded &lt;= 0)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileLocal.Write(buffer,downloaded);</span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(downloaded &lt; BufferSize)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(TRUE);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(...)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = FALSE;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;</span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(fileRemote)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete fileRemote;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };</span></p>
<p style="padding-left: 30px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(buffer)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete [] buffer;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(result))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exception::Throw(IDS_ERROR_DOWNLOAD_TEMPLATE,this-&gt;GetLocator());</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">}</span></p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">&nbsp;</span></p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">The next step is to load the icon from the local file.&nbsp; Here is a function that accomplishes that task:</span>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">HICON WebResource::GetIcon()</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">{</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(this-&gt;icon))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(::PathFileExistsW(this-&gt;fileName)))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;"></span><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;Download();</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span>&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;icon = (HICON)::LoadImage(</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL,</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;fileName,</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMAGE_ICON,</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Constants::HeightWidthIcon, //16</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Constants::HeightWidthIcon,</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LR_CREATEDIBSECTION|LR_LOADMAP3DCOLORS|LR_LOADFROMFILE|LR_SHARED|LR_VGACOLOR);&nbsp;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this-&gt;icon;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">}</span></p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3"></span>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">Note that the desired height and width of the icon are specified.&nbsp; If the .ico file happens to include icons of different dimensions, then specifying the desired height and width will ensure that the preferred one will be loaded.&nbsp; </span></p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3"></span>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">The last step is to paint the icon.&nbsp; Here is the implementation of OnPaint that accomplishes that: </span></p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3"></span>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">void Tab::OnPaint()</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">{</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPaintDC deviceContext(this);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CRect area;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;GetClientRect(&amp;area);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;displayBehavior-&gt;DisplayTab(&amp;deviceContext,&amp;area);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebResource* iconResource = webResource-&gt;GetIconResource();</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(iconResource)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;PaintIcon(&amp;deviceContext,iconResource);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deviceContext.SelectObject(this-&gt;font);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deviceContext.SetBkMode(TRANSPARENT);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deviceContext.SetTextColor(this-&gt;colorText);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deviceContext.DrawText(this-&gt;webResource-&gt;GetLocator(),&amp;this-&gt;areaLabel,Tab::StyleText);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">}</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">void Tab::PaintIcon(CDC* deviceContext, WebResource* iconResource)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">{</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(iconResource))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(this-&gt;icon))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;icon = new Icon();</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(this-&gt;icon))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(this-&gt;icon-&gt;Create(deviceContext, this-&gt;iconHandle,this-&gt;colorBackground)))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;InvalidateIcon();</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(this-&gt;icon)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDC* memoryContext = this-&gt;icon-&gt;GetDeviceContext();</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(memoryContext)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deviceContext-&gt;BitBlt(this-&gt;areaIcon.left,this-&gt;areaIcon.top,Constants::HeightWidthIcon,Constants::HeightWidthIcon,memoryContext,0,0,SRCCOPY);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(...)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">}</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">Tab::Icon::Icon()</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">{</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;InvalidateDeviceContext();</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">}</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">Tab::Icon::~Icon()</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">{</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;DeleteDeviceContext();</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">}</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">BOOL Tab::Icon::Create(CDC* targetContext, HICON iconHandle, COLORREF backgroundColor)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">{</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOL result = FALSE;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;InvalidateDeviceContext();</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;backgroundBrush.CreateSolidBrush(backgroundColor);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(!(result))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CBitmap iconBitmap;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(iconBitmap.CreateCompatibleBitmap(targetContext,Constants::HeightWidthIcon,Constants::HeightWidthIcon)))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;deviceContext = new CDC();</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;deviceContext-&gt;CreateCompatibleDC(targetContext);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CBitmap* originalBitmap = this-&gt;deviceContext-&gt;SelectObject(&amp;iconBitmap);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HGDIOBJ originalBrush = this-&gt;deviceContext-&gt;SelectObject(this-&gt;backgroundBrush);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(this-&gt;deviceContext-&gt;PatBlt(0, 0, Constants::HeightWidthIcon, Constants::HeightWidthIcon,PATCOPY)))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(this-&gt;deviceContext-&gt;DrawState(</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPoint(0,0),</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CSize(Constants::HeightWidthIcon,Constants::HeightWidthIcon),</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconHandle,</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DST_ICON|DSS_NORMAL,</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HBRUSH)NULL)))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = TRUE;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(result))</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;InvalidateDeviceContext();</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">}</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">void Tab::Icon::DeleteDeviceContext()</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">{</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(this-&gt;deviceContext)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(this-&gt;originalBrush)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (void)this-&gt;deviceContext-&gt;SelectObject(this-&gt;originalBrush);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(this-&gt;originalBitmap)</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (void)this-&gt;deviceContext-&gt;SelectObject(this-&gt;originalBitmap);</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete this-&gt;deviceContext;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">}</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">void Tab::Icon::InvalidateDeviceContext()</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">{</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;deviceContext = NULL;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;originalBitmap = NULL;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">}</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;">&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">CDC* Tab::Icon::GetDeviceContext()</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">{</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this-&gt;deviceContext;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">}</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;"></span>&nbsp;</p>
<p><span style="font-family: courier new,courier; font-size: small;"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3"></span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;" face="Calibri" size="3">&nbsp;</span></p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">Here is what happens.&nbsp; First, a bitmap is created that is compatible with the CPaintDC, the full-color screen device context onto which the icon is to be painted: </span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">CBitmap iconBitmap;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">if(!(iconBitmap.CreateCompatibleBitmap(targetContext,Constants::HeightWidthIcon,Constants::HeightWidthIcon)))</span></p>
<p>Then a device context that will serve as the buffer of the painted icon is created:</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">this-&gt;deviceContext = new CDC();</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier; font-size: small;">this-&gt;deviceContext-&gt;CreateCompatibleDC(targetContext);</span></p>
<p>Next, within that buffer, the bitmap is painted with the background color, and then with the icon:</p>
<p style="padding-left: 60px;">&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000000; font-family: courier new,courier; font-size: small;">CBitmap* originalBitmap = this-&gt;deviceContext-&gt;SelectObject(&amp;iconBitmap);</span></p>
<p style="padding-left: 30px;"><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HGDIOBJ originalBrush = this-&gt;deviceContext-&gt;SelectObject(this-&gt;backgroundBrush);</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(this-&gt;deviceContext-&gt;PatBlt(0, 0, Constants::HeightWidthIcon, Constants::HeightWidthIcon,PATCOPY)))</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!(this-&gt;deviceContext-&gt;DrawState(</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPoint(0,0),</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CSize(Constants::HeightWidthIcon,Constants::HeightWidthIcon),</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconHandle,</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DST_ICON|DSS_NORMAL,</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HBRUSH)NULL)))</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</span></p>
<p><span style="color: #000000; font-family: courier new,courier; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">Finally, the buffer is swapped onto the CPaintDC:</span></p>
<p>&nbsp;</p>
<p style="padding-left: 30px;">deviceContext-&gt;BitBlt(this-&gt;areaIcon.left,this-&gt;areaIcon.top,Constants::HeightWidthIcon,Constants::HeightWidthIcon,memoryContext,0,0,SRCCOPY); //deviceContext is CPaintDC, whereas memoryContext is the CDC* buffer.&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3"></span></p>]]></content:encoded>
    </item>
    <item>
      <title>Working around a WebBrowser ActiveX control resize bug of which you may or may not have been aware</title>
      <link>https://docs.microsoft.com/archive/blogs/craigmcmurtry/working-around-a-webbrowser-activex-control-resize-bug-of-which-you-may-or-may-not-have-been-aware</link>
      <pubDate>Sat, 31 Dec 2011 13:46:27 GMT</pubDate>
      <dc:creator><![CDATA[Craig McMurtry]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/craigmcmurtry/2011/12/31/working-around-a-webbrowser-activex-control-resize-bug-of-which-you-may-or-may-not-have-been-aware/</guid>
      <description><![CDATA[If you are hosting the WebBrowser ActiveX control in a native code application (perhaps following...]]></description>
      <content:encoded><![CDATA[<p>If you are hosting the WebBrowser ActiveX control in a native code application (perhaps following <a href="https://msdn.microsoft.com/en-us/library/aa752046(v=vs.85).aspx">these instructions</a>, then you may or may not have noticed that the control does not always resize correctly.&nbsp; Specifically, if you maximize the application, then the same&nbsp;functions that will work properly to maximize any other child control (MoveWindow or SetWindowPos) won't always serve to maximize the WebBrowser control properly.&nbsp; Even more specifically, what one might observe on certain pages (and I've found the MSDN homepage to be the foremost victim) is that although the control will maximize, it won't be repainted, or at least, not quickly--after a while it will eventually fully repaint itself at the new dimensions.&nbsp; I tried lots of workarounds, including getting hold of the document itself and telling it to resize itself, and also this workaround for ActiveX control re-sizing: <a href="https://www.cherea.de/bitbucket/resizeaxctl/resizeaxctl.html">https://www.cherea.de/bitbucket/resizeaxctl/resizeaxctl.html</a>.&nbsp; What does work is simply instructing the control to repaint itself, this:</p>
<p>&nbsp;</p>
<p><span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"><span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2">this-&gt;MoveWindow(area.left,area.top,area.Width(),area.Height(),FALSE);</span></span></p>
<p><span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" color="#0000ff" size="2"><span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" color="#0000ff" size="2"><span style="color: #0000ff; font-family: Consolas; font-size: x-small;" face="Consolas" color="#0000ff" size="2">this</span></span></span><span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"><span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2">-&gt;RedrawWindow(area,NULL,RDW_UPDATENOW|RDW_ALLCHILDREN);</span></span></p>
<p><span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"><span style="font-family: Consolas; font-size: x-small;" face="Consolas" size="2"></span></span></p>]]></content:encoded>
    </item>
    <item>
      <title>Steve Jobs ...</title>
      <link>https://docs.microsoft.com/archive/blogs/craigmcmurtry/steve-jobs</link>
      <pubDate>Wed, 05 Oct 2011 17:06:08 GMT</pubDate>
      <dc:creator><![CDATA[Craig McMurtry]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/craigmcmurtry/2011/10/05/steve-jobs/</guid>
      <description><![CDATA[...&nbsp; you so changed the world ... thanks for making lives like mine possible.&nbsp; RIP.]]></description>
      <content:encoded><![CDATA[<p>...&nbsp; you so changed the world ... thanks for making lives like mine possible.&nbsp; RIP.</p>]]></content:encoded>
    </item>
    <item>
      <title>A Windows Communication Foundation JSONP Service</title>
      <link>https://docs.microsoft.com/archive/blogs/craigmcmurtry/a-windows-communication-foundation-jsonp-service</link>
      <pubDate>Sat, 13 Aug 2011 20:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Craig McMurtry]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/craigmcmurtry/2011/08/13/a-windows-communication-foundation-jsonp-service/</guid>
      <description><![CDATA[All of the samples I've found that show how to build a JSONP service using the Windows Communication...]]></description>
      <content:encoded><![CDATA[<p>All of the samples I've found that show how to build a JSONP service using the Windows Communication Foundation have the thing hosted in IIS.&nbsp; IIS is literally the last place I want my Windows Communication Foundation services hosted ... especially because I'll only want them in IIS once I've debugged them, and debugging outside of IIS is much more efficient.&nbsp; Here is a console version of such a service:</p>
<p>&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">using System;</span><br /><span style="font-family: courier new,courier;">using System.Runtime.Serialization;</span><br /><span style="font-family: courier new,courier;">using System.ServiceModel;</span><br /><span style="font-family: courier new,courier;">using System.ServiceModel.Description;</span><br /><span style="font-family: courier new,courier;">using System.ServiceModel.Web;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">namespace Server</span><br /><span style="font-family: courier new,courier;">{</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; [DataContract]</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; public class Some</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; {</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [DataMember]</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string What;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [DataMember]</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string Why;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; [ServiceContract]</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; [JavascriptCallbackBehavior(UrlParameterName="method")]</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; class MyService</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; {</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [OperationContract]</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [WebGet(ResponseFormat = WebMessageFormat.Json)]</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Some GetSome(string input)</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new Some() { What = "A Shotgun", Why = "Needs an Outcome" };</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; class Program</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; {</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const string BaseAddress = "<a href="https://localhost:8888/MyService/">https://localhost:8888/MyService/</a>";</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const string EndpointAddress = "MyEndpoint";</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main(string[] args)</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using(ServiceHostBase serviceHost = new ServiceHost(typeof(MyService),new Uri[]{new Uri(Program.BaseAddress)}))</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebHttpBinding binding = new WebHttpBinding();</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; binding.CrossDomainScriptAccessEnabled = true;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServiceEndpoint endpoint = serviceHost.AddServiceEndpoint("Server.MyService", binding, Program.EndpointAddress);</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebHttpBehavior behavior = new WebHttpBehavior();</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebScriptEnablingBehavior scripting = new WebScriptEnablingBehavior();</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endpoint.Behaviors.Add(behavior);</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endpoint.Behaviors.Add(scripting);</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serviceHost.Open();</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("Press &lt;ENTER&gt; to terminate this program.");</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadLine();</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; }</span><br /><span style="font-family: courier new,courier;">}</span></p>
<p>&nbsp;</p>
<p>And here is the HTML page that you can open in the current version of any major browser to see the output from the service:</p>
<p>&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>"&gt;</span><br /><span style="font-family: courier new,courier;">&lt;html xmlns="<a href="https://www.w3.org/1999/xhtml">https://www.w3.org/1999/xhtml</a>" &gt;</span><br /><span style="font-family: courier new,courier;">&lt;head&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; &lt;title&gt;Untitled Page&lt;/title&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; &lt;script src="<a href="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js">https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js</a>" type="text/javascript"&gt;&lt;/script&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"&gt;</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function callback(data) {</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("Like a " + data.What + " " + data.Why);</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(document).ready(</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function () {</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("&lt;p&gt;Hello, I am Dynamic Text!&lt;/p&gt;").appendTo("body");</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("&lt;p&gt;Attempt&lt;/p&gt;").appendTo("body");</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $.getJSON("<a href="https://localhost:8888/MyService/MyEndpoint/GetSome?method">https://localhost:8888/MyService/MyEndpoint/GetSome?method</a>=?", callback);</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("&lt;p&gt;Done&lt;/p&gt;").appendTo("body");</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );</span><br /><span style="font-family: courier new,courier;">&nbsp;&nbsp;&nbsp; &lt;/script&gt;</span><br /><span style="font-family: courier new,courier;">&lt;/head&gt;</span><br /><span style="font-family: courier new,courier;">&lt;body&gt;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">&lt;/body&gt;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">&lt;/html&gt;</span></p>
<p style="padding-left: 30px;"></p>
<p></p>
<p></p>
<p></p>]]></content:encoded>
    </item>
    <item>
      <title>Integrating a desktop application with Windows Live</title>
      <link>https://docs.microsoft.com/archive/blogs/craigmcmurtry/integrating-a-desktop-application-with-windows-live</link>
      <pubDate>Fri, 15 Jul 2011 10:47:02 GMT</pubDate>
      <dc:creator><![CDATA[Craig McMurtry]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/craigmcmurtry/2011/07/15/integrating-a-desktop-application-with-windows-live/</guid>
      <description><![CDATA[If one searches the Web for samples of how to integrate a desktop application with Windows Live,...]]></description>
      <content:encoded><![CDATA[<p>If one searches the Web for samples of how to integrate a desktop application with Windows Live, unfortunately one finds one's way to <a title="material that is out-of-date" href="https://windowsteamblog.com/windows_live/b/developer/archive/2010/10/15/creating-desktop-applications-with-messenger-connect.aspx">material that is out-of-date</a>.&nbsp; So here is some code that works as of July 2011.&nbsp; The code is for a Windows Form that has a browser control and a text box.&nbsp; The only modification you will need to make to the code is to alter the ApplicationIdentifier constant to point at the identiifer of your own application registered at <a href="https://manage.dev.live.com">https://manage.dev.live.com.</a>&nbsp; The code navigates the browser control to the Windows Live authentication page.&nbsp; The browser control handles the navigation event to sniff at the locations to which it is redirected.&nbsp; Upon navigation to a location that signifies successful authentication, the location is parsed for the access token.&nbsp; Given the access token, the application can retrieve the user's information.&nbsp; The DataContractJsonSerializer is used to parse the response to the request for that information.&nbsp;</p>
<p>&nbsp;</p>
<p>using System;</p>
<p>using System.Globalization;</p>
<p>using System.IO;</p>
<p>using System.Linq;</p>
<p>using System.Net;</p>
<p>using System.Runtime.Serialization;</p>
<p>using System.Runtime.Serialization.Json;</p>
<p>using System.Windows.Forms;</p>
<p>&nbsp;</p>
<p>namespace LiveID</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp; public partial class Form1 : Form</p>
<p>&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const string ApplicationIdentifier = "0000000000000000"; //YOUR APPLICATION IDENTIFIER GOES HERE</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const string AuthenticationHost = "oauth.live.com";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const string AuthenticationLocalPathDesktop = "/desktop";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const string AuthenticationResourceTemplate = @"https://{0}/authorize?client_id={1}&amp;response_type=token&amp;scope=wl.signin%20wl.basic&amp;redirect_uri=https://{0}{2}";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const string ContentTypeText = "application/text";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const string KeyAccessToken = "#access_token";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const string MethodGet = "GET";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const string ResultTemplate = "User Name: {0}; Identifier {1}";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char SeperatorQuery = '&amp;';</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const string UserResourceTemplate = "https://apis.live.net/v5.0/me?{0}";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Form1()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitializeComponent();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void Form1_Load(object sender, EventArgs e)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.webBrowser1.Url =</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Uri(</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string.Format(</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CultureInfo.InvariantCulture,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form1.AuthenticationResourceTemplate,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form1.AuthenticationHost,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form1.ApplicationIdentifier,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form1.AuthenticationLocalPathDesktop));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Uri location = e.Url;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((location.Host == Form1.AuthenticationHost) &amp;&amp; (location.LocalPath == Form1.AuthenticationLocalPathDesktop))</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] fragments = location.Fragment.Split(Form1.SeperatorQuery);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string token = fragments.Where((string item) =&gt; item.StartsWith(Form1.KeyAccessToken)).FirstOrDefault();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(string.IsNullOrEmpty(token)))</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebRequest request = WebRequest.Create(new Uri(string.Format(CultureInfo.InvariantCulture,Form1.UserResourceTemplate,token.Substring(1))));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.Method = MethodGet;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using(Stream responseStream = request.GetResponse().GetResponseStream())</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.ContentType = Form1.ContentTypeText;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user = (User)new DataContractJsonSerializer(typeof(User)).ReadObject(responseStream);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.textBox1.Text = string.Format(CultureInfo.CurrentUICulture,Form1.ResultTemplate,user.Name,user.Identifier);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; [DataContract]</p>
<p>&nbsp;&nbsp;&nbsp; partial class User : IExtensibleDataObject</p>
<p>&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExtensionDataObject extendedData;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [DataMember(Name = "id")]</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; internal string Identifier</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [DataMember(Name = "name")]</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; internal string Name</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public ExtensionDataObject ExtensionData</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.extendedData;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.extendedData = value;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">&nbsp;</span></p>]]></content:encoded>
    </item>
    <item>
      <title>The Artificial Intelligence Oxymoron</title>
      <link>https://docs.microsoft.com/archive/blogs/craigmcmurtry/the-artificial-intelligence-oxymoron</link>
      <pubDate>Sat, 21 May 2011 19:15:21 GMT</pubDate>
      <dc:creator><![CDATA[Craig McMurtry]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/craigmcmurtry/2011/05/21/the-artificial-intelligence-oxymoron/</guid>
      <description><![CDATA[I'm reading Stephen Levy's wonderful book about Google, In the Plex.&nbsp; In the account of the...]]></description>
      <content:encoded><![CDATA[<p>I'm reading Stephen Levy's wonderful book about Google, <em>In the Plex</em>.&nbsp; In the account of the development of AdSense, an engineer explains the process of having software understand a Web page well enough to match its content with an advertisement.&nbsp; He says that fundamentally the problem is that of enabling a machine to accept a stream of words as input and correctly predict the words that come next.&nbsp; Google's indexing of the entire Web and some of the rest of the world's information gives it a tremendous amount of material from which its software can learn to accomplish that feat.&nbsp; </p>
<p>Anyone who has read Jacques Derrida will note with interest how Google's computer scientists have arrived at the same perspective on semantics that philosophers did with Derrida's publication of <em>On Grammatology</em>: that meaning is not complete at the current location in a stream of language, but is always only being completed by the subsequent location.&nbsp; Derrida, of course, called this essential aspect of semantics "differance."&nbsp; </p>
<p>In the next paragraph of <em>In the Plex</em>, the engineers speculate on the prospect of the machine ascending to artificial intelligence by using the repository of data at its disposal to acquire more knowledge and linguistic understanding.&nbsp; That's the point at which their thinking departs from Derrida's.&nbsp; </p>
<p>They're absolutely right to recognize that intelligence is linguistic, that it is demonstrated by fundamentally linguistic capabilities.&nbsp; What computer scientists generally don't see is that the use of language, and therefore, the capacity for intelligence is essentially organic.&nbsp; </p>
<p>That's because the use of language is driven by desire.&nbsp; If the meaning of a stream of language is always within the context of what comes next in that stream, then it is desire that drives a user of that language onward in that stream.&nbsp; </p>
<p>An understanding of the nature of that desire is to be found somewhere between the writings of Karl Marx, Charles Darwin and the early Jean Baudrillard: most likely the latter.&nbsp; Jacques Lacan explained how desire draws infants into language.&nbsp; </p>
<p>Machines have no desire.&nbsp; So while they can be made to appear as if they have linguistic capability, they simply don't.&nbsp; They may be able to take a stream of language as input, and predict how that stream will continue, but they will never care about whether the stream actually does continue or not.&nbsp; </p>
<p>So we can program machines to win at poker or chess.&nbsp; We can't make they care about winning or losing, though, and therefore, we can't ever make them <em>play</em> those games or any others, just make the moves.&nbsp; </p>
<p>That's why I find "artificial intelligence" to be an oxymoronic term.&nbsp; Intelligence is linguistic and linguistic capability is irreducibly organic.&nbsp; Nothing about intelligence is artificial, and nothing artificial can be intelligent.&nbsp; </p>]]></content:encoded>
    </item>
  </channel>
</rss>