How do I put a different wallpaper on each monitor?

Date:September 24, 2007 / year-entry #356
Tags:tipssupport
Orig Link:https://blogs.msdn.microsoft.com/oldnewthing/20070924-00/?p=25003
Comments:    76
Summary:When you set a wallpaper on a multi-monitor system, that wallpaper goes onto each monitor. For example, if your wallpaper is a picture of a flower, each monitor shows that same flower. Commenter David Phillips wonders whether there is a way to set a different wallpaper on each monitor, or whether it is some sort...

When you set a wallpaper on a multi-monitor system, that wallpaper goes onto each monitor. For example, if your wallpaper is a picture of a flower, each monitor shows that same flower. Commenter David Phillips wonders whether there is a way to set a different wallpaper on each monitor, or whether it is some sort of trick.

It's some sort of trick.

And it's a trick because it's not something that the window manager folks intended to happen; rather, it's just an artifact of how wallpapers work.

The trick is to set your wallpaper to "tile" rather than "center" or "stretch". When the window manager draws a tiled bitmap, it places the tiles so that the upper left corner of the primary monitor exactly coincides with the top left corner of a tile. The remaining tiles are then arranged around that anchor tile.

You're not listening. I said that I wanted a different picture on each monitor, not the same picture tiled across all of my monitors.

Yes, I know. Here comes the trick: Create a "monster tile". For example, suppose you have two 800×600 monitors arranged side by side (primary on the left), and you want a tropical island on the primary monitor and a country road sunset on the second, like this:

Create a single bitmap that consists of the two images side by side. In our case, it would be a single 1600×600 bitmap.

When this bitmap is tiled, the "virtual infinite screen" looks like this:

And the upper left corner of the primary monitor lines up against the upper left corner of a tile, like so:

If your monitors aren't the same size, you can still use this trick; you just need to add some dummy space to get the tiles to line up the way you want. For example, suppose your secondary monitor is smaller than your primary, positioned so that its top edge lines up with the top edge of the primary. Your "monster bitmap" would place the country road sunset in the corresponding position next to the bitmap you want to use for your primary monitor.

When this bitmap is tiled and the upper left corner of the tile is placed at the upper left corner of the primary monitor, you get the desired effect:

Ah, but what if you have a monitor above or to the left of your primary monitor? Since the bitmap is tiled, you just "wrap around" from the left of the "monster bitmap" to the extreme right. For example, if your monitors are arranged side by side but you have the secondary monitor on the left, then you still put the image for the secondary monitor on the right; that way, when the origin of your monitor system is placed against a tile, the image from the tile to the left is the one that shows up on your secondary monitor.

Given these examples, I leave you to develop the general algorithm.


Comments (76)
  1. Tom says:

    I used that trick at my old job when I had two LCD monitors of different sizes.  I wasn’t too keen on having different images, though; I would find an image that would stretch across both monitors (or scale and crop one, if necessary) and tile it to get a nice continuous backdrop.  

    I’m kind of surprised that this "trick" wasn’t obvious, but I have to keep reminding myself that not everyone is a super-geek.

  2. Rob says:

    I’m a super geek and somehow I failed to think of this. Nice tip.

  3. Jason says:

    "I’m kind of surprised that this "trick" wasn’t obvious, but I have to keep reminding myself that not everyone is a super-geek."

    It took me a while to figure it out because I thought "tile" meant (part of) the image should repeat and "stretch" meant it should cover both monitors. Which is basically what Raymond’s anticipating in that little "audience comment" he threw in — since the window manager crew didn’t mean for it to happen it doesn’t have what I’d consider a good label for what it does in that case.

    It probably doesn’t come up too often (you have to have multiple monitors and have a background image you want to span all of them) so it’s probably not worth doing anything about. But it might be nice if, when Windows detects that you have more than one monitor it gives you an extra wallpaper option of something like "One image covering all monitors" that just maps to "Tile" functionality-wise.

    Then someone would have to figure out how to make it mean "we’ll span the monitors then tile after that, but maybe in a less-than-predictable way if your #1 monitor isn’t the top-leftmost" and still have it make sense to non-techies and still fit into a line or two in the display properties dialog. They’re probably better off just leaving it as something you can stumble across and (mostly) figure out if it comes up.

  4. ac says:

    Post is all messed up, both in firefox and opera 9

    [Apparently Firefox and Opera 9 ignore <FONT FACE="Webdings"> as well as STYLE="... font-family: Webdings". -Raymond]
  5. jondr says:

    My primary is on the left and is in portrait orientation, which makes it fine for me doing coding and documentation. The secondary is in landscape and contains reference and ancillary windows plus sometimes a second IDE to a subsystem in a different language. I often have debug or testing on secondary.  I’ve never much thought about wallpaper, although I had one system that did have separate wallpaper built-in.

  6. Sohail says:

    Why this isn’t duh obvious to anyone is beyond me.

    [Oh, just today’s entry is duh obvious? -Raymond]
  7. zameer says:

    For your next trick can you teach us how to create a wall paper that would cover the full desktop of my wide screen tablet PC that will still cover the full desktop when I switch to slate mode? Tried a huge jpeg and set it as Centered. But Vista just sizes it down so it looks bad on both modes

  8. Steve says:

    Why anyone who’s reading this blog is spending so much time looking at their wallpaper is beyond me :-)

  9. Or you could just use UltraMon, which does this (and more) for you.

  10. Karellen says:

    Not sure if it looks like it’s meant to look in Konqueror either, therefore probably also not in Safari.

    But, if I copy-and-paste the tables you’ve used into an otherwise blank HTML page, the problem goes away. Not sure why. FF DOM inspector shows no extra style rules being matched on the blogs.msdn.com page, so that’s out as a possible cause of the problem. And they’re both being rendered in standards compliant mode.

    Weird.

  11. Jeff says:

    It is not messed up in Google Reader + Firefox.

    Maybe it’s the border-collapse style? Also, I only see the ‘J’ and ‘P’, not the webdings J or P.

  12. bradwils says:

    Oddly enough, I believe the "algorithm" actually changed in Vista.

    I’ve been a long-time user of Ultramon, one great feature of which is that it will make these monster tiles on your behalf with a friendly UI. When Vista was in beta and I was not using a Vista-friendly version of Ultramon, the multi-monitor bitmap feature was broken.

    It would be interesting to figure out what changed and exactly why.

  13. Name Required says:

    I can’t test it now (I’ve abandoned Windows in favour of OS X), but I’m pretty sure I used to be able to do this without faffing about, although it may have been a feature of the nVidia drivers which have much better support for multiple monitor setups than shipped by default in XP.  On the other hand I may be talking rot.

    (And at the risk of coming across like a Mac fanboy, on OS X you just set different wallpapers; no fiddling required.)

  14. John Conners says:

    I had lots of fun working this one out when I got John’s Background Switcher – http://www.backgroundswitcher.com – to support multiple monitors (you could only call that a shameless plug if I didn’t give it away for nothing). I had to resort to pencil, paper and some maths I hadn’t used in years to figure out how to stretch a single picture across several monitors or different pictures on each one with all the myriad layout options you can use with >2 monitors.

    Having the primary monitor rooted at (0,0) makes life quite tricky if you just want to create your own background and your second monitor is to the left and above or below your primary.

    I’ve often wondered why the window manager draws the background this way, I’m sure there’s an obvious reason that the coordinates don’t go from (0,0) at the upper-leftmost monitor be it the primary one or otherwise…

    [And if your monitors are arranged in the form of a backwards L, then I guess the primary monitor is off the screen? The primary monitor is, by definition, the one at (0,0). You’re basically saying “Users should not be allowed to customize which monitor is their primary.” -Raymond]
  15. David Walker says:

    Tile was named that way because a picture that is smaller than the monitor’s resolution will be tiled, or repeated, to cover the whole monitor (or monitors).  

    Of course, if you have only one monitor, and the picture is the same size as the resolution, then "tile" or "strech" will have no effect.

    For smaller pictures, I kind of like a centered picture myself.

  16. Leo Davidson says:

    I think the reason the examples look horribly wrong in Firefox is to do with the HTML specifying the Webdings font. There’s a possible fix explained here: http://nothing.golddave.com/?p=53 (Requires changes on the client side, not to the HTML being served.)

    John, my guess is that (0,0) is always on the primary monitor for compatibility reasons. If an app doesn’t specify a particular monitor, or doesn’t understand multiple monitors, then it should open on the primary monitor. The older APIs have to pretend there is only one monitor so as not to confuse old software, so they report details of the primary monitor. Badly written software may use absolute positioning and/or assume that the top-left pixel is (0,0) so it makes sense for the top-left pixel of the primary monitor to be (0,0). Of course, those apps may still be confused if their windows are moved far off the primary monitor/workspace, or up/left into the negative coordinates, but at least they’ll work to some degree instead of going wrong (or opening off-screen) all the time.

    I also noticed that you could tile backdrops like this by accident when I tiled an image that was too large or too small on a multi-monitor system. I’ve known about this for years but that doesn’t mean it’s obvious. Unless someone happens to have tried it it’s not an obvious thing to try. You could just as easily expect the tiling to reset on each monitor. It’s nice that it doesn’t and we get this for free, though. (Would be nicer if it was explicitly supported now that multi-monitor setups are so common but I’m not exactly about to switch OS due to such a minor thing.)

  17. James Schend says:

    You know this is about 40 times easier using Active Desktop.

    Just set an Active Desktop object with each image for each monitor, and there is a mode to configure object as a wallpaper and expand it to fill the entire screen. You can do this without creating new images, and it works with two monitors of different sizes, as well. You also don’t need to install any software, since Active Desktop is built-into Windows. (Sorry I don’t remember specifics; it’s been awhile since I did this. I do remember I’ve used this technique on Windows 98, 2000 Pro and XP SP2.)

    I’m kind of surprised that Raymond didn’t recommend this method, since it’s about the only useful thing I’ve ever found to do with Active Desktop.

  18. Interestingly, in Vista, this trick does not work because the "tile" mode will actually "unstretch" an image that is too big for the monitor.

    For example, if I have two 1600×1200 monitors, and a bitmap that is 3200×1200, setting the background mode to "tile" will cause the bitmap to be resized to 1600×800, and I will see four copies of the image, instead of the one that I had intended.

    I don’t suppose you know of a workaround to this change in behavior that probably made sense to the people implementing it but that causes great annoyance to multi-monitor users all over the place?

  19. the new old thing says:

    Thanks. So wonderfully obvious (which is of course why I never thought of it).

  20. Simon says:

    Raymond: See the arguments at https://bugzilla.mozilla.org/show_bug.cgi?id=31538 for why Firefox doesn’t (and probably never will) display Webdings as IE7 does. Doesn’t Unicode provide acceptable code points for “J” and “P”?

    [Obviously not since they are decorative symbols. It’s not like there’s a language somewhere in the world that uses “beach scene” and “country road” as characters. -Raymond]
  21. Fred says:

    [And if your monitors are arranged in the form of a backwards L, then I guess the primary monitor is off the screen? The primary monitor is, by definition, the one at (0,0). You’re basically saying “Users should not be allowed to customize which monitor is their primary.” -Raymond]

    No he’s not, he’s saying that the “primarity” of monitor should be independent of the co-ordinate system. Of course, the amount of programs that use hard-coded co-ordinates or would otherwise break make this very difficult to implement (although I could think of one way of achieving it), but  it’s still a valid suggestion.

    [Oh, you want to change the definition of “primary monitor” from “the monitor at (0,0)” to “a specific monitor that I designate to be the one returned by flags like MONITOR_DEFAULTTOPRIMARY”. Well, sure, you could do that, but then you need another name for “the monitor at (0,0).” You didn’t actually solve anything; you just changed its name. -Raymond]
  22. "Post is all messed up, both in firefox and opera 9"

    All messed up?  No.  Maybe not how the author intended, but the readability didn’t suffer in the least.

    Now that I’ve seen it under IE, the use of "J" and "P" as wallpaper makes a whole lot more sense, though!

    Clever use of Webdings!  Bummer it didn’t work out quite right. :(

  23. Karellen says:

    Oh, is it not even meant to J and P? Hmmm…probably doesn’t look entirely as intended then.

    But the table cells don’t overlap each other or the surrounding text anymore, on FF or Konq, so it’s getting the idea across (to me at least) now.

  24. Mike Dimmick says:

    Fred: I think he’s saying ‘I want to put my taskbar on a non-primary monitor’, which you can do (in XP) by unticking ‘Lock the taskbar’ from the taskbar’s context menu, then dragging and dropping the taskbar onto the other monitor!

    By definition, the primary monitor is the one which has (0,0) at the top-left corner. Other monitors are then positioned relative to the primary. Windows will allow you to pick whichever monitor you like to be the ‘primary’ monitor. It only makes a difference to calls to GetDeviceCaps(HORZRES) etc on a screen DC, which will return the primary monitor’s capabilities (I think), to avoid confusing programs that are not multi-monitor aware.

  25. ::Wendy:: says:

    What about when my primary monitor is a laptop and spends half os it’s time actually disconnected from the external monitor?

    Will my stretched tiles become squished when disconnected?  

  26. ac says:

    “All messed up?  No.  Maybe not how the author intended, but the readability didn’t suffer in the least”

    oh really? http://img126.imageshack.us/my.php?image=messedupjf0.png

    [Try again. I made some CSS tweaks around 9:30am in an attempt to make things slightly less awful. -Raymond]
  27. font-family: Webdings

    FWIW, WFM on Firefox 3.0a1

  28. Jeff Parker says:

    You know all these years, I thought this was intentional behavior. I have to laugh though, sometimes users find ways to use my apps in ways I never thought of, well in ways that are benficial, like this. It always suprises me and brings a smile to my face to see people take somethign I created from scratch and do something even cooler than I intended.

  29. Jules says:

    Raymond: "[Obviously not since they are decorative symbols. It’s not like there’s a language somewhere in the world that uses "beach scene" and "country road" as characters. -Raymond]"

    According to <a href="http://www.fileformat.info/info/unicode/font/webdings/nonunicode.htm">this site</a>, the characters you’re looking for are mapped to U+F04A and U+F050.  Although for some reason it doesn’t work here.  Maybe they’ve got a unicode version of webdings that’s different to mine.

    ac: works much better than that for me in Firefox.

  30. szurgot says:

    Where were you 5 years ago when I had to figure this all out through trial and error.

    Two things of note:

    1) If a secondary monitor crosses the 0,0 line (perhaps it’s higher than the primary monitor) then the image has to be split into a bottom and a top half to display properly.

    2) There is (or appears to be) a nasty bug in Aero so that if a secondary monitor is to the left of the primary then what is under the glass of the start bar and/or the sidebar is shown from the wrong image. Even if the image on the appropriate monitor goes under the sidebar/startbar.

    It is a pretty wicked algorithm. I’ve got a lightweight program to do create the image here. http://www.szurgot.net/Projects/ under TrayRunner…

  31. dave says:

    For the people discussing how the example is rendered in various browsers, I just want to point out that lynx renders it perfectly using the ‘J’ and ‘P’ characters in the terminal’s normal font, and I’d assumed that they were just letters intended as placeholders.

  32. John Conners says:

    [Oh, you want to change the definition of “primary monitor” from “the monitor at (0,0)” to “a specific monitor that I designate to be the one returned by flags like MONITOR_DEFAULTTOPRIMARY”. Well, sure, you could do that, but then you need another name for “the monitor at (0,0).” You didn’t actually solve anything; you just changed its name. -Raymond]

    Fair enough, my mistake was in thinking of the primary monitor as ‘applications show up here first’, ‘the taskbar lives here unless I explicitly move it (i.e. ‘the taskbar shows up here first’)’ and such like instead of merely that it’s origin is (0,0). Ask yourself how many average users think that’s what the primary monitor designates. I just think that having to jump through hoops just to put a different picture on each monitor is needlessly complex for that average user. For developers of course who cares? ;)

    [You can look at it from the technical side (the monitor whose origin is zero) or the end-user side (the monitor where applications open by default) – it’s all the same thing. Applications default to the (0,0) monitor because that’s the only monitor that non-multimon-aware applications can see. If the primary monitor’s origin weren’t (0,0), then non-multimonitor-aware applications would start freaking out. -Raymond]
  33. Kujo says:

    I think this is a great tip, and I don’t think it’s obvious that Tile would work this way.  Until someone told me to try it, my presumption had been that Tile worked like Center and Stretch: per monitor.

    John: An average user has no idea about screen coordinates.  The average user isn’t going to be running multiple monitors, for that matter…

  34. S says:

    Looks fine on Firefox 2.0.0.7 on OS X…

  35. An average user has no idea about screen coordinates.

    I heartily agree.

    The average user isn’t going to be running multiple monitors, for that matter…

    Not true.  There is a statistically significant percentage of non-technical users with multiple monitors, particularly in accounting.

  36. John Conners says:

    Kujo: You’d be surprised. I work with quite a few average users with laptops and a second monitor via a docking station. It’s getting more and more common.

    Raymond: Yeah, you’re absolutely right of course. I’d just love to see the Windows display properties handle it for you and allow you to set the background on each monitor with an API call that does the same. Not exactly a high-value-add though! I’ll shut up now! :)

  37. Joe Butler says:

    I get perfect layout with J and P showing.  It may be that FF doesn’t specify the font as a symbol font – that happens if you just use CreateFont() with webdings and forget that it’s a symbol font – you get letters.  But then again, the validators I’ve got running in ff1 are showing 389 errors in one and 533 errors with the other one for this page.

    Also, I guess that anyone never accidently seeing a too-wide imaged tiled onto a second monitor would just assume that a bitmap image was passed to each monitor background.  So, I really, really find it difficult to belive the, "oh, so obvious" brigade.  I think you get a lot of that mentality with programmers – just want to appear to know everything and too afraid to ask questions for fear of being thought less of.

  38. Thanks for the great article, Raymond!  I was pleasantly surprised to see this.  

    I asked this when working on my Random Background program (http://david.acz.org/randombg/).  The algorithm must handle images that are smaller or larger than the monitor (centering or cropping).

  39. dave says:

    "I think you get a lot of that mentality with programmers – just want to appear to know everything and too afraid to ask questions for fear of being thought less of."

    That’s not the reason for most of the "It’s obvious" that I encounter (or produce myself).

    A more common reason is that programmers (and technical people in general) are used to having a fairly comprehensive mental model of how something works inside, and tend to forget that (a) not everyone has the same knowledge they do to base the model on, and (b) a lot of people don’t build a model of that sort at all, but just a mapping of required inputs to get desired outputs.

    As soon as I got to `The trick is to set your wallpaper to "tile"’ I could have asked one or two questions whose answers would have given the rest of the information in the post, but never having used a multi-headed Windows machine before (and not in general using picture wallpaper – I prefer solid colors), there’s no way I’d’ve had the details at hand, and they wouldn’t be "obvious", only easy to discover by playing around a bit.

  40. James Schend says:

    Damnit, everyone’s ignoring my post.

    The best, easiest and quickest way to set a different background on each monitor is to use Active Directory.

    That is all. ;)

  41. James Schend says:

    Damnit, everyone’s ignoring my post.

    The best, easiest and quickest way to set a different background on each monitor is to use Active Desktop.

    That is all. ;)

  42. Peter says:

    I recall using nVidia’s driver control panel thing to do this once upon a time – but it turned out to be pretty dodgy (I forget how, but I’m sure there was some scenario where it wasn’t good). In the end I discovered this same trick independently – it’s pretty obvious when your screens are different resolutions and you assign a wallpaper to the wrong one.

    Question to anyone who happens to know (not necessarily Raymond…): Why can’t you choose a wallpaper for each monitor through the GUI? KDE for example makes that look very easy. Is it part of the same artifact about how wallpapers work? I may be being naive, but I wouldn’t have thought compatibility would be a huge deal for this, it’s not like the configuration is going to be read by an older version of Display Settings… right?

    And yeah, I get the J & P in Firefox 2 on Windows – and that had about the best chance of working out of any browser I use.

    [Yes, the setting will be read by an older version of Display Settings. (Roaming profiles.) And they will also be read by older versions of random apps that like to screw with the wallpaper settings (there are gazillions of these, many of which are even linked in these comments!) -Raymond]
  43. Karellen says:

    [Apparently Firefox and Opera 9 ignore <FONT FACE="Webdings"> as well as STYLE="… font-family: Webdings". -Raymond]

    I think that’s because the page is delivered with an XHTML DTD and XHTML requires that element and attribute names must be in lower case. User-agents therefore *should* ignore those elements/attributes.

    Also, many computers won’t have Webdings, so that would be another reason why that might be ignored.

    But I don’t think that was the whole story. As mentioned, when I cut/pasted the table into an external HTML file, it rendered acceptably.

    Still, it’s fixed now.

  44. Brody says:

    This post is exactly why I left msft, because it takes Raymond Chen to explain something that should be absolutely straightforward.

  45. Mark Meuer says:

    One could also just download a reasonable wallpaper manager like Wallpaper Master (http://jamesgart.com/wallpaperchanger – I’m sure there are many others) and just set your wallpaper on each monitor directly..

    (I have no affiliation with the above program other than as a happy customer.)

  46. Evan says:

    "oh really? http://img126.imageshack.us/my.php?image=messedupjf0.png&quot;

    Now that’s just weird. What browser are you using?  With FF 2.0.0.6 on WinXP, I definitely do *not* see that.

  47. TraumaPony says:

    This is what is known in game programming as a texture atlas, a fairly common technique. You stitch together two or more textures to make the hardware think it’s one texture. This IS a fairly novel application, though :D

  48. I stumbled across this a long time ago, and wrote a small app that lets me pick each image for each monitor independently (or stretch one image into whatever my monitor configuration is), and then goes about creating the main image.  I wonder if I should release that app.

  49. Jay Pee says:

    How do I put a different wallpaper on each desktop? I’m using CreateDesktop(), SwitchDesktop() apis.

    And the "set desktop image" feature in display properties doesn’t work satisfactory multi desktop. If no desktop image has been set when a new desktop is created, the newly created desktop can never get any background image.

    I want different background images on every desktop because it makes them easier to identify quickly.

  50. Mike Dunn says:

    Yes Active Desktop is great for this.

    Too bad it’s been removed from XP x64 and Vista.

  51. Worf says:

    Heh, I had this. Tried all sorts of ways, but eventually decided the easiest was nVidia’s control panel. Turns out it just automates the procedure – pick your backgrounds, and it’ll create the necessary bitmap. Handling wraparound and everything – pretty neat. Then it just slots it into the wallpaper and all done.

    There are already a few tools for this, too – John’s Background Switcher being one of them.

    Oh, and the reason to have backgrounds? While I never see them while I’m at my desk, they show up when you lock your PC. Trick is to find a nice background for your primary monitor where the "This computer is locked" window doesn’t cover something nice.

    I settled on the Transformers movie faction symbols wallpaper I found – there’s enough space between the Autobot and Decepticon logos for the window to "mediate" between good and evil :-).

  52. mvadu says:

    I think Raymond was bit free today.. Now days he usually doesn’t comment on any of the user posts, but today I could see lot of replies. Good trend which was missing for quite a some time..

  53. Dean Harding says:

    Peter: Microsoft probably don’t feel the percentage of people with multiple monitors is high enough yet that the UI should be made more complicated for people without multiple monitors (or that it’s not worth it to create TWO UIs — one for single monitor and one for multiple monitors)

    I "discovered" this feature quite a while ago, actually. I think my first multimon setup was back in the Windows 2000 days and I used to do it at that time. Nowadays, I get my backgrounds from digitalblasphemy.com and he’s got multimon-specific versions of many of the backgrounds. They’re really cool :-)

    Also, don’t forget that back in the day, you’d never even *dream* of having one big picture which stretched across multiple monitors. Usually, "tile" was used with a really tiny picture that would, you know, tile across the whole screen.

  54. Dopefish says:

    &lt;threadjack&gt;

    The FireFox webdings issue illustrates the difference between the Windows and the open source philosophies w.r.t. backwards compatibility & standards.

    IE will display a character as a symbolic glyph if a symbol font is specified, matching the behaviour of earlier versions of that program. Indeed that is the way that windows apps have always handled the display of symbol fonts since the heady days of Word for Windows 2.0.

    Firefox on the other hand will not allow designers to substitute characters with symbolic fonts, since the proper standards compliant way is to specify the Unicode glyph and not use a symbol font hack.

    Not saying one way is better, but it’s interesting to see these differences in action.

    [In other words, it’s impossible to use symbol font in Firefox. Not sure how this benefits the end user, who presumably paid good money for those fonts. -Raymond]
  55. Dopefish says:

    BTW, the fonts do work in FireFox’s quirks mode, which is probably why they are visible when you copy & paste the tables in a text file.

  56. Marvin says:

    ObOnTopic: Since this is pretty simple and doesn’t involve any deep magic, shouldn’t someone knock up a .NET app that helps users to do it? It would be timely because multiple displays are becoming more common in the home these days.

    Anyway, back to the font problem. Raymond is basically fighting with Unicode here. Both XML and modern HTML are specified as Unicode documents, so you can’t say "Oh, I meant for it to be in a private encoding that’s only used by our proprietary software so that cute pictures will appear", there isn’t any way to do that in the standard.

    (Note that you can use MIME encoding to send the document in another encoding over the wire, but the standard expressly says that the resulting document is actually still Unicode and was merely encoded in some other way as delivered)

    Microsoft is welcome to use the Unicode vendor space in Windows to keep its massive collection of ‘dings in, and with proper updates to the relevant fonts (or if the font designers had been told to pay attention to this ten years ago when it first become obvious that it would be necessary) Raymond’s original font settings would then work everywhere that the fonts are installed, which is the most you can really expect for glyphs like these.

    Actually though I think the J / P convention works fine now that the CSS has been fixed so that it’s readable.

    So, TODO items, Microsoft typography to learn about using Unicode for symbol fonts, Internet Explorer team to implement web standards written since 1994, and the blog software team to add a tiny image repository so that people like Raymond can upload the occasional illustrative screenshot or example picture.

    [As to how we got here, Microsoft’s Office software developed this amusing idea that non-English text is just the same as English text but with these weird glyphs, so you could select a block of text and change the "font" to "Greek", and the result is a meaningless transliteration. Once you’ve started encouraging that sort of deep crazy you can never stop. At the extreme end you get "Hanzi tattoo fonts" which transliterate English into something resembling Han characters. So now you can have "Kingdom of the rotting bird" carved into your arm and proudly tell people it’s your name in Chinese]

  57. I currently have the PJ layout, two monitors one a 17" and the other 21", the larger being the primary and to my right and the smaller my secondary and to my left.

    So my desktop background is actually a 2048×768 image, with a solar system on the left half and with a comet blasting into a moon on the right half. When displayed in tile mode the comet and moon is on my left monitor and the solar system on my right.

    So coordinates 1024,0 actually map to primary monitor 0,0, and coordinates 0,0 on the image map to -1024,0 on the secondary monitor.

    I find this slightly amusing as well as it’s a nice way to test proper coding as not all software nor their coders would consider negative coordinates, thinking only that 0,0 is top left of the user’s entire display area which is a big no-no.

    If I recall correctly the max coordinates in Windows XP, and correct me if I’m wrong anyone please, is -16384,-16384 to 16384,16384 which should be enough for the common consumer for quite some years to go. A total desktop size of 32768×32768 thats one huge bitmap there.

    And as some may be aware of -32768,-32768 has a special meaning, that size is returned by various API calls if the window is minimized.

    Mr. Chen, or anyone else for that matter. Any clue if Vista has the same limit or if it’s expanded even further. I’m guessing no due to backwards compatibility concerns though.

  58. Leo Davidson says:

    A couple of posts mention that the tile trick doesn’t work in Vista. It definitely works for me, although I have a fairly simple monitor setup (primary on left, second monitor on right, both the same resolution).

  59. Scott says:

    I’m a bit surprised there wasn’t a proper UI put in for this in Vista.

    OTOH, I’m sure it gets really complicated to work through all the cases.  Like should you be able to change the wallpaper of currently disconnected monitors?

  60. FWIW, WFM on Firefox 3.0a1

    Gah.  Actually it seems to be random.  Sometimes I see the "J" and the "P", sometimes I see the landscapes.

  61. Crap, I screwed up… Where’s the edit button.

    I ment:

    Coordinates 0,0 actually map to primary monitor 0,0, and coordinates 1024,0 on the image map to -1024,0 on the secondary monitor.

    Sorry about that blooper, it’s not easy to wrap this around in the head when you have primary on the right and secondary on the left. *laughs*

  62. …or just buy a Mac…you can set a different wallpaper on each monitor.

  63. So simple, yet I couldn’t think it up on my own.  Thank you very much!

  64. David Walker says:

    John:  "I’m sure there’s an obvious reason that the coordinates don’t go from (0,0) at the upper-leftmost monitor be it the primary one or otherwise…"

    How is Windows supposed to KNOW which monitor you placed "above" and "to the left" of the other monitors?

    I think you would have to put a very accurate GPS on each monitor, and wire them in so that Windows could detect the physical layout…

    I generally set the primary monitor to be the leftmost one.

  65. John Conners says:

    David: You can drag around the positions of the monitors in the display properties so that they match their position in the real world. So if your monitors are arranged in a 2×2 grid of 4 you can drag them around in the display properties to look the same so your mouse moves around as you’d expect.

  66. Kuwanger says:

    “[In other words, it’s impossible to use symbol font in Firefox. Not sure how this benefits the end user, who presumably paid good money for those fonts. -Raymond]”

    IE Case

    1) If you have IE, you have symbol font (I’m pretty sure this holds for IE for the Mac, but then that’s depricated anyways, so we’ll just ignore that)

    2) Ergo, testing in IE validates that your page will look the same in all other IEs

    1) If you have Firefox, you may or may not have symbol font

    2) Ergo, showing symbol font some of the time leads to an inconsistent test/display environment, miscommunication, etc

    3) Further, Firefox can very well show pictures which *can* be displayed consistency, negating any real need for symbol font for the end user

    Ie, it’s something like “software taxes”.

    [I’m thinking more along the lines of a deployment scenario where you know the font is installed because you paid a lot of money for a font site license. (1) Company buys symbol font (e.g. UPC codes) and installs it on all their machines. (2) Company chooses to standardize on Firefox. (3) Company tries to build intranet site that uses the UPC font, and can’t. -Raymond]
  67. Kuwanger says:

    “[I’m thinking more along the lines of a deployment scenario where you know the font is installed because you paid a lot of money for a font site license. (1) Company buys symbol font (e.g. UPC codes) and installs it on all their machines. (2) Company chooses to standardize on Firefox. (3) Company tries to build intranet site that uses the UPC font, and can’t. -Raymond]”

    Another example:

    (1) Company buys DirectX models

    (2) Company standardizes on Macintosh

    (3) Company tries to build game based on DirectX models and can’t.

    Of course, (3) isn’t true since you can make a DirectX wrapper/convert the models (or in the Firefox example, create a UPC font->graphics html preprocessor/alter Firefox to support the UPC font).  The lesson?  That stanardizing on *anything* incurs possible additional costs over trying to use a “best fit” for each application.

    Further, one should be aware of such things when making standardization decisions to know if the standardization is worthwhile.  I mean, if you spend a lot of money on a font site license and don’t even *bother* testing if Firefox works with the font before standardizing on it…  And if you standardize on it after seeing that Firefox doesn’t natively support UPC font, it’s a sign you’re willing to live with the consequences, including possibly maintaining an internal version of Firefox–that’s something to consider anyways, given Mozilla won’t necessarily always be around (and sadly this is a non-option for Internet Explorer users, at least for 70+ years).

    [Company bought the font fifteen years ago, before this whole Internet thing showed up. They’ve used this font in all sorts of programs without any problem. And then they find that Firefox, for some reason, refuses to use their font. Maybe I’m the weirdo – I sort of take it as a given that if you install a font, it should be available for programs to use. That’s why we have operating systems with font management. -Raymond]
  68. Fred says:

    [I’m thinking more along the lines of a deployment scenario where you know the font is installed because you paid a lot of money for a font site license. (1) Company buys symbol font (e.g. UPC codes) and installs it on all their machines. (2) Company chooses to standardize on Firefox. (3) Company tries to build intranet site that uses the UPC font, and can’t. -Raymond]

    Lets generalize that shall we?

    1) Company builds/uses systems that relies on IE-specific features (be they ActiveX, conditional comments, incorrect font handling).

    2)Company standardizes on FF. (For some reason not testing their existing system.)

    3) Existing system breaks (well, duh, should have tested first).

    How is that FF’s fault?

    Possible solutions to the problem:

    1) Microsoft typography rejig the font so that it is no longer a symbol font, but a normal font that uses unusual glyphs (horrible hack, but consistent with how Windows has historically handled fonts).

    2) Microsoft pester W3C to make Windows appear to be standard (or add an extra HTML tag to "fix" the issue).

    3) Microsoft deal with the fact that image libraries should not be packaged as fonts (be they Wingdings, Webdings or those postal barcode fonts that certian 3rd party products used to install.

  69. Kuwanger says:

    "[Company bought the font fifteen years ago, before this whole Internet thing showed up. They’ve used this font in all sorts of programs without any problem. And then they find that Firefox, for some reason, refuses to use their font. Maybe I’m the weirdo – I sort of take it as a given that if you install a font, it should be available for programs to use. That’s why we have operating systems with font management. -Raymond]"

    I understand your argument, but I think you’re missing the point.  Web browsers aren’t do-it-all interfaces, Microsoft’s push to make Internet Explorer one not withstanding.  Web browsers are primarily there to provide a platform-independent information platform.  It happens that for something like the internet, this is very appropriate, given the very many platforms that exist in the networked world.

    But, in a homogenous intranet, where everyone has the same font installed, platform-independence isn’t nearly as relevant.  So, those steps that further the aim of creating a consistent platform can work against an intranet.  So, Firefox (in its raw form) may very well be a bad idea for an intranet for the time being.  I don’t think anyone would claim that Firefox is appropriate everywhere.  And that’s one reason why I harped on the point that *any* standardization has to, at first, give consideration for usage.

    So, yes, Firefox and Opera are "special".  Internet Explorer really should be "special" too.  Assumptions on where and when fonts (or anything) will work make an ass out of … well, you get the idea.  Testing is the only thing that’s reliable and viable, even if it seems asinine (most of good science is asinine by that standard).  Any decisions should be made based on that testing.  And, of course, if you’re not happy with any of the options, you can always create your own solution (directly or indirectly).

    Having said all that, we out here on the internet don’t all use Internet Explorer or have symbol font installed.  If you really want us to see what was intended, you’ll have to take that into consideration.  And if you don’t think there’s enough of us to matter or you simply don’t think it’s worth your time, you’re probably right.  It is, after all, a blog you do for your own entertainment.

    Personally, the little quirks from time to time produced as a result don’t really bother me that much.  Such is life.

  70. will says:

    If all the talk and usage of wingding has not made you want to poke out your eyes….

    Two great sites for multiple monitor wallpaper are

    http://www.dualmonitorbackgrounds.com

    and http://www.mandolux.com/

    Mandolux also has some really nice 3 and 4 monitor wallpapers.

  71. CGomez says:

    "Web browsers aren’t do-it-all interfaces"

    Obviously never used or worked on a company intranet.  There are benefits to making the browser your application home.

  72. Marvin says:

    [ Company tries to build intranet site that uses the UPC font, and can’t. ]

    Sure they can, people do this all the time. Only the smallest amount of imagination is needed to do server-side rendering (and now you can save on font licensing costs too) or push the font into Unicode space reserved by your vendor for this purpose (Hey Raymond, there’s another TODO item, properly document Microsoft’s attitude to end-user use of vendor space) or just use the quirks mode to retain compatibility with obsolete and non-compliant browsers

    But Microsoft’s solution here is the one we’ve seen all too often before, the one that leaves you at the cliff with no time left. Too late now to agree that the project to build a bridge was a good idea. Now you’re going over the edge.

    This reminds me of the canned message on the v4 address exhaustion page. The grammar had to be changed because it used to show a predicted date by which negotiations for the post-exhaustion regime must begin, but eventually the date passed and, predictions of exhaustion being what they are, it has been steadily retreating further into the past ever since. So we’re now at the point where we can see the cliff, and we know the bridge won’t be built because we never agreed to start building it, but it’s too late to brake. We will definitely go over the edge, and no-one knows what will happen except that it’ll be bad.

    I can see how a market might get itself into this muddle, that’s why we have regulators, after all – but it should be embarrassing to Microsoft that a single company with a supposedly unified purpose can do the same to itself.

    [I think you overestimate the amount of software developer imagination that is available to a small business. -Raymond]
  73. Eric D. says:

    Im not sure about whether this works in each case listed above, but a screenshot that I pasted into mspaint served me as a template to place the pictures right.

  74. Ari says:

    For the different background images, the Nvidia drivers can do it. Usually. At least sometimes.

    I had a set up like that until recently. Sadly the Nvidia nview settings seem to get bunged up sometimes. By bunged up I mean that the settings seem fine, nview just doesn’t do what the setting tells it t do….. arrrrrrr!

    Redoing the settings (a few times) and restarting (a few times) makes it all work again. XP obviously isn’t really designed to use multiple monitors as extra utilities are required to make it work properly.

    On the ATI utility I don’t seem to remember being able to set different backgrounds (not sure though) but was WAY more stable with my twin monitor configuration.

    I also have one mac notebook now, there you see how multiple monitor configuration is suposed to work. You never see the extra complexity unless you connect a second monitor. Then a separate configuration panel pops up on EACH monitor, letting you customize easily.

    As I don’t always work with two monitors having such an easy way to make them work is a blessing.

    (as a bynote: I’m really surprised at how well the mac, XP box and Ubuntu box communicate, smooth as silk any which way)

    Apart from all that, this blog has helped me out on numerous issues, sometimes just to understand why something happens that way in XP, thank you Raymond.

  75. Kuwanger says:

    @CGomez:

    >Web browsers aren’t do-it-all interfaces

    Obviously never used or worked on a company intranet.  There are benefits to making the browser your application home.

    Perhaps you should, you know, read my whole post?  Web browsers are for the internet.  Ie, they’re for vast non-homogenous networks.  Intranets, ie wholly owned networks, can very trivially be homogenous, for which web browser considerations need not apply.  Hence, the use of a web browser in an intranet is potentially a hack.  It’s especially so when one choses a web browser or modifies a web browser to work with features of a homogenous intranet that violate the principle of what a web browser is meant to be.

    Or, in short, web browsers, as information platforms, do so much that some people decided to extend them to the point of doing nearly anything.  So, yes, quasi-web browsers can be very useful on an intranet.  But, then they can break in potentially nasty ways on the internet.  I don’t see a problem with quasi-web browsers.  I just don’t see why one would complain about a web browser because it doesn’t exhibit quasi-web browser behavior (except, I guess, because one has been so misinformed to believe that the quasi-web browser one uses is actually a web browser that one has unreasonable expectations of web browsers).  If you want to use a quasi-web browser, use it.

Comments are closed.


*DISCLAIMER: I DO NOT OWN THIS CONTENT. If you are the owner and would like it removed, please contact me. The content herein is an archived reproduction of entries from Raymond Chen's "Old New Thing" Blog (most recent link is here). It may have slight formatting modifications for consistency and to improve readability.

WHY DID I DUPLICATE THIS CONTENT HERE? Let me first say this site has never had anything to sell and has never shown ads of any kind. I have nothing monetarily to gain by duplicating content here. Because I had made my own local copy of this content throughout the years, for ease of using tools like grep, I decided to put it online after I discovered some of the original content previously and publicly available, had disappeared approximately early to mid 2019. At the same time, I present the content in an easily accessible theme-agnostic way.

The information provided by Raymond's blog is, for all practical purposes, more authoritative on Windows Development than Microsoft's own MSDN documentation and should be considered supplemental reading to that documentation. The wealth of missing details provided by this blog that Microsoft could not or did not document about Windows over the years is vital enough, many would agree an online "backup" of these details is a necessary endeavor. Specifics include:

<-- Back to Old New Thing Archive Index