The end of the scrollbar series

Date:September 17, 2003 / year-entry #68
Orig Link:
Comments:    60
Summary:Okay, that's basically the end of the scrollbar series. Do people actually like the idea of a coding series? It gets very few comments, and it's a lot of work to write, so if nobody actually cares I can just write about quick little things and not try to be coherent from day to day....

Okay, that's basically the end of the scrollbar series.

Do people actually like the idea of a coding series? It gets very few comments, and it's a lot of work to write, so if nobody actually cares I can just write about quick little things and not try to be coherent from day to day.

I guess that's what most blogs are like anyway.

If you like the idea of a coding series, what other topics would you like covered?

Comments (60)
  1. Kirk says:

    I just found your website and I find it to br great. It appears that you put a lot of work in to it and I find it to be useful. I personally like the coding series and now I have another webpage I can check regularly.

    Keep up the good work.

  2. Smelly says:

    Not to belittle your great work on the coding series, but I keep coming back for the history stuff. There’s a ton of code on the net, but not much in the way of the technical history of windows and win32.

  3. scrooks! says:

    I agree with "Smelly" — it’s the history stuff that I find to be a great read.

  4. Steve says:

    Personally the value I get from reading your stuff is in understanding "how stuff works" and getting the history behind why MS does some seemingly nonsensical things for what turns out to be very good reasons. teh scrollbar stuff is enlightening not because I’m writing scrollbar code but because it provides insight into proper UI coding.

    At any rate, whatever you write, I’ll read.

  5. Jacob (MVP) says:

    I just recently found your blog (through Scoble, of all people) and I love it. Not only is the coding series great, but I also enjoy the history. The coding series, for me, is valuable because I do a lot of work with Windows Forms. And, since Windows Forms has some gaps, I find myself needing to use the API to fill these gaps. Your coding series and the exposition of the problems and solutions helps me down that road.

    As far future ideas, how about "All things non-client" or "Drag and drop." Selfishly, though, I would like to learn about TVM_CREATEDRAGIMAGE as I can’t quite get it to work correctly.

  6. Fred says:

    The history stuff is very interesting but code samples are great also, especially on tricky stuff like scrollbars.
    Keep on posting both.
    As a previous comment says : whatever you write, I’ll read.

  7. boltzmann says:

    You rock, man. Keep it coming – coding and history as well.

  8. Damit says:

    I actually like both the coding and history series. Plus, it’s useful to find out things like how to code your own Win32-compatible scrollbars, in case I have free time and decide to re-implement a graphical library somewhere. =P

    Future series… maybe something about how to properly use a listview in threaded mode?

  9. Herb says:

    I just recently discovered this series/blog, originally for the historical blogs, but I also have been quite interested in the scrollbar series. It’s pretty amazing how difficult it is to get *all* the details right & still have code that’s not a nightmare. As far as any future ideas, nearly anything as an owner drawn control would seem to be subject to scrutiny, although I also like the drag-and-drop idea as well.

  10. Cray-1 says:

    The content is excellent. Very much like the idea of going into the historical side of MFC and the Win32 API’s. This and a book called ‘MFC Internals’ should be considered required reading. Especially liked the SetWindowText blog from a while back.

    Ideas for future topics, discussion, perhaps:
    How to correctly implement a docking windows, (ala .Net IDE).
    How it is that all the MS apps look nicer than bog standard MFC.
    When and why to use AfxRegisterWndClass, and perhaps a brief history of GDI to GDI+ ?

  11. sean says:

    Raymond, you are incredibly pedantic — and it’s great. The lesson that the little things matter is an important one in an industry that’s more taken with quick script hacks every day … your understanding of and attention to detail makes for great reading. Please keep it up.

  12. wayne says:

    I don’t even do Windows programming anymore… (but thanks to the Joelonsoftware link) I found this blog and it’s just unbelievably interesting. Keep up the good work.

  13. Kent says:

    I like your site a lot. I usually don’t post comments on blogs, but I do read your site whenever there is new content.
    Keep it up ! :)

  14. _brg_ says:

    I really like the coding – the stuff on ncclientresize was very interesting, as there is little documentation about this around.

    the scroll bar stuff overall was excellent and gave me an insight into how/why its works the way it does.

    I would like to see more some stuff on programming the shell (if thats in your area).

    really excellent – very usefull

  15. EAW says:

    The behind-the-scenes history stuff is fascinating (and I demand more!). It’s great to read the real answer to things you always wondered about (eg, the "System Tray").

    Also, I really enjoy knowing about the thought/design process that went into things we take for granted today (such as the taskbar), as a sort of "what might have been".

    As someone above said, there are plenty of resources out for code. I don’t know where else to find great historical info. Thanks for showing bits of the wizard behind the curtain.

  16. manilius says:

    I like your series. It’s really helpful and gives an deeper insight…keep doing them :)


  17. Ian Hanschen says:

    I find the insight pretty cool, this is one of the first blogs I check in the morning. What I’d really like are explanations on the various USER stuff, like for example why are some controls implemented completely in win32k? Is this fallover from when the WM sat in CSRSS due to the overhead of lpc, or is switching from user to kmode so expensive that it’s still beneficial? And like EAW said, the hystorical stuff is pretty cool.

  18. DavidK says:

    I read the site mainly for the history stuff. I haven’t read the scrollbar entries, but mostly because I just got through wrestling with my own scrollbar issues. After finally getting it right, I don’t want to learn anything that will make me go back and redo it (and possibly break it) :) MAN they can be a pain.

    But I am definitely interested in any future programming series you may have to offer. Keep up the great work.

  19. dxa says:

    I like the scrollbar series. I haven’t had the time to read all of them but the ones I have read were excellent. Scrolling is a tricky thing to get exactly correct and this series is close to the ultimate scrolling reference.

    One thing I’m curious about in regards to scrolling is the history of the invisible area that you have to keep the mouse in when dragging the thumb (or it jumps back to where you started).

  20. Alex says:

    I’ve been reading your site for the history, and have been skipping the scrollbar series.

  21. PeterM says:

    I like both the code and the history, but ESPECIALLY the the hsitory. Where else is someone documenting the details of how Windows ended up the way it is? People constantly complain that Windows is a mess, but fail to take into account that it wawsn’t written by stupid people. Lots of decisions got made for lots of reasons, and most of them are not obvious unless you’re in the tranches when it happens.

    As for suggestions, this is more history, but perhaps you could explain why the Windows sends WM_MOUSEMOVE messages to windows even when the mouse isn’t moving.


  22. Tim Sneath says:

    Just want to add my thanks for the detail you put into your blog. I’ve enjoyed both the in-depth scrollbars and the historical details – reminds me of the early chapters of Inside Windows 95, an old MS Press title which had screenshots of some of the early milestones en route to Chicago. It’s a book that’s aged well for all the wrong reasons!

  23. Art says:

    Along with everyone else, I want to commend you for your blog. Both the history and coding stuff has been great. I do want to second the vote for coding information regarding Drag-and-drop. Most examples I’ve come across use MFC and I’m primarily a Win32 API guy. Even a simple source and target implementation would be a great starting point.

    Thanks again!

  24. Murph says:

    I enjoy all your posts! The scrollbar series is excellent. I’ve been programming Windows since 3.0, and I learned a few things. Of course I realize it would be nice to get paid for writing the series. Your work is much appreciated.

  25. Neville says:

    Great blog! The history is interesting and entertaining (especially for those of us who have been around since before the beginning of time – before Win32).
    But the coding series is unique and very special. There are plenty of places to get basic API coding info, and almost all of them stop when they have just scratched the surface of a subject. But your coding series is one of the few I have found that explains how to do it exactly right, and why, in all it’s glorious detail.
    This is VARY RARE – especially is these days of "close enough is good enough", and when most magazine coding articles end with "this code is obviously not up to ‘production’ standard", but no-one will ever fill in those gaps. I would (and do) buy any book or magazine that publishes articles of this level and quality.
    Thank you for giving everyone an insight into some of what fills in those gaps. It is greatly appreciated, and I hope you can find the time to continue it at this level.

  26. Keep ’em coming Raymond, in so much as you can. The balance is good, and the history and technical pieces are both a joy to read. I’m not a C/C++ coder and only get into Windows APIs when VB fails me, but I’m still learning some new things and gaining some good insights.

    Thanks so much for making the effort!

  27. I read your scrollbars series and tried to understand it, the topic isn’t really my cup of tea though (I do libraries and web stuff).

    I absolutely love the historical stuff from older OS’ and such. Keep it coming!


  28. some says:

    Historical staff is just great! (as Joel has pointed ;)
    I have read only parts of scrollbars series. It was cool entry about maintaining and breaking abstraction of "covered window".

    BTW. could you tell history about:
    1. blank taskbar program bottons which are gone if you click them
    2. a program menu for "start" botton which allows (in 95) to move it or even close ;)
    3. why in open/save dialog you get gorisontal scrollbar even if all listed files are on screen (but one more will be out of frame)

  29. Mahesh says:

    Please keep the coding series. The scrollbar series is excellent. One article on any subject just scratches the surface. I like the depth the series go into.

    The history stuff is amusing but the coding series is useful!

  30. Anoop says:

    The blog is really interesting for the historical info. I’ve been wanting to follow the scrollbar series and get into it, but haven’t found the time to do so.
    I really like the historical stuff, but I think your mix of a coding article every few days is very nice.

  31. Pierre says:

    Great stuff, as always. I’d love you explore the XP theme related stuff…

  32. MaxVT says:

    The blog is great, and the coding stuff is a part of the greatness :)

    Don’t turn this into "what most blogs are like"… :)

  33. Jack says:

    Raymond, I think your blog is just great! Both the history and coding stuff. I drop by every day since 2 weeks, and so far there’s been new stuff every day. Keep it coming….

  34. Ktx says:

    Raymond — definitely fantastic blog. I’ve thoroughly enjoyed the code and the history. You made it on to my "Blogs to check daily" list, which is pretty short. Keep doing exactly what you’re doing!

  35. I love the history. Keep it coming. I’ve never been one of the ‘ms suck because they did it this way’ crowd. I’ve always suspected there were good reasons for the decisions made – and you confirm my opinion.

    You manage to convey the reality of software design – the compromises made and the whys. Good stuff and this is now a daily website.

  36. Eyal says:

    Great blog! I love the history stuff and also the code stuff, but i personally like code "quickies" :)
    Anyway – keep up the good work. The only reason i purchased NewsGator is to get immediate notifications on your blog!!

  37. Jason says:

    It’s all good stuff, but I really like the historical and behind-the-scenes information — very interesting stuff!

    BTW, your blog is why I took the time to learn blogging and RSS feeds. This is also the first time I’ve ever left a comment on a blog.

    Just to let you know there are probably a lot more like me. Keep it up!

  38. JM says:

    This kind of series are great!!
    Please, continue them.

    When I’ve a trouble with ScrollBars, first I came here and read it carefully. Allways I’ve get the answer.

    How about more foundation topics? Something like memory management, (virtual memory, heaps, stack, memory mapped files…), threads (synchronization, processes, fibers…) or other Win32 fundamental area.

    I love your history comments, too. It’s funny know the beginning of Win32.

    Take care

  39. AlisdairM says:

    Coding posts are invaluable, as you really know the topics that you write about! [And *good* Windows-specific GUI articles are few and far between, especially at this level]

    History stuff is fun and much easier to comment on, that probably explains the extra traffic. Frankly, I tend not to post comments on articles unless I disagree with something, so unless you start making deliberate mistakes….

  40. Jeff Stong says:

    Keep up the series — they are great!

  41. DavidK says:

    Another good reason to keep the coding stuff is in case my boss walks by, I can quickly scroll to a "work related" looking area of the web page :)

    One look at something like WM_NCCALCSIZE on my screen and he’ll assume I’m doing work.

  42. unton says:

    History bits is the main thing I like about your blog. Scrollbar series was quite intriguing too (yet somewhat overextended).

  43. Fabi says:

    I’ve found your page only recently, but I like both history and code.

    And since you’re asking: I’ve always wondered why it can’t be another thread that accesses CWnds, only the one that created it is allowed to do so. Like the comment in the MFC says:

    "Note: if either of the above asserts fire and you are writing a multithreaded application, it is likely that you have passed a C++ object from one thread to another and have used that object in a way that was not intended."

  44. Soeren says:

    I think both the history entries and the scrollbar series were excellent. The scroll-bar series because the focus was on how to create a high-quality interface as opposed to just passable.

  45. Vijay says:

    A truly fantastic blog ! The history as so many people have already mentioned has been one extremely amusing piece of information on which you don’t find any detail in the net. When people from MS share their insights on why things are the way they are in Windows and many of the commonly used software, the general awareness goes up !!

    Apart from that, i loved the scrollbar series .. i’ve done c++ windows programming and the depth of the series was too good.

    Awesome work man ! Keep it coming.

  46. J. Peterson says:

    This blog is great! Here’s a topic you could shed more light on:

    As a day job I work on a Really Large Windows Application. It takes Forever to launch. Word and Excel are also Really Large Windows Applications, but they launch instantly. How? [rising chorus:] "Because Microsoft cheats!"

    Just how does Microsoft "cheat" at getting office at getting Office apps to launch instantly. Can we cheat too?

  47. Raymond Chen says:

    Why is that everybody assumes cheating?

    The Office folks are really smart. Startup time is all about minimizing disk I/O. So analyze your startup code to death: Track every page fault and work to get rid of it.

    Delay initialization of everything that can be delayed. (The fastest code is code that doesn’t run at all.)

    Take all the functions that are called at startup and put them near each other in memory so you take fewer page faults. Use the /ORDER switch to do this. If you have a large function and only half of it is used at startup, break it into two functions, the part used at startup and the part that isn’t.

    Reorder your data so all the memory used by startup is kept near each other in memory.

    With CPUs as fast as they are, disk I/O is the limiting factor in app startup.

  48. AlisdairM says:

    To echo what Raymond says, do a search on ‘Working set’ and you should turn up a lot of material on useful optimisations.

    A ‘cheat’ that I use quite frequently [No I’m not with MS!] is to do as much initialisation as possible in background threads while giving the user something trivial but necessary to do. It is surprising how fast application appear to start when they perform all initialisation while you are starting at a log-in prompt ;¬ )

  49. Frederik Slijkerman says:

    Talking about startup times, isn’t it annoying that each new version of Photoshop (for example) takes more time to load? Photoshop also needs ages for seemingly trivial tasks such as "Sorting Font List…" I mean, even the stupidest sorting algorithm should be able to sort 100 font names in no time! :-)

  50. Paul May says:

    Actually I didn’t write windows code for a long time. But both of your historical and technical articles inspire me a lot. Thank joelonsoftware to point me this blog. Please keep going.

  51. Andreas Häber says:

    I like all the content here, it’s a very cool mix :)

    A suggestion to a new coding series is to show some cool tricks with shell extensions, like creating a namespace extension.

    IMO shell extensions is one of the coolest features in Windows :)

  52. Code Code Code! I love it! ..the history is entertaining too…

  53. I’ll chip in my two cents as well: I’d rather have you focus on the history stuff rather than the coding stuff, but, as they say, it’s your blog, do whatcha wanna do.

  54. e8johan says:

    I really love these down to earth, real life programming examples. Implementation code mixed with explanation of why things are done the way they are is great!

  55. Peter Torr says:

    I’ll add a "me too" comment. The history stuff is cool. I remember reading a "Windows 95 App of the Day" entry you wrote a long time ago… ;-)

  56. Mike Hearn says:

    You rock Raymond. This is easily one of the most interesting blogs around. Don’t assume "silent" == "not listening", we’re all here! You should get the gotdotnet admins to show you the site statistics ;)

  57. johnkn says:

    Great blog. I found the discussion of WM_NCCALCSIZE to be invaluable. (in fact, I think you may have explained a longstanding problem with window drift I had in the window docking code in ACID and Vegas).

    Thanks very much for taking the time to do this.

  58. RichB says:

    I would love a series of articles on focus management and fakemenu.

  59. Jules says:

    I’ve just found this blog (well, actually, I found it on Friday. Its just that I’ve only just finished reading it all!), and I have to say excellent work. Not many people write information about the Win32 API these days, it seems all tutorial type resources assume you’re either using MFC or .NET or something similar. As a hardcore C programmer, I find this blog very refreshing! :-)

    I have to second a couple of suggestions above – drag and drop would be good. I’ve implemented file drag and drop in one of my applications, but it would be nice to be able to drag and drop arbitrary data. I know I need to use a COM interface to do it, but it would be nice to have a nice, easy to follow example…

    Shell extensions also sounds good.

  60. DaveM says:

    Win32 programming seems to be out of place these days. It is quite refreshing to see someone who is still using the API that everything else is built on!

    Thanks and keep those series coming…

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