|
|
9 of 9 people found the following review helpful:
3.0 out of 5 stars
Good book, but in chronic need of a editorial overhaul, April 5, 2001
This book, the most detailed on GDI written in the last few years, is a phenomenal repository of low-level detail regarding the GDI subsystem. It also has excellent chapters on many aspects of GDI, complementing the official documentation. However, it is poorly edited, with awkward syntax, wrong English usage, and often-confusing organization of material. It is also not clear what is gained by discussing GDI and DirectX together, when they seem to be distinct in APIs, Windows dlls, and conceptual underpinnings.The first half of the book attempts to look 'under the hood'. Here is presented a curious and confusing mixture of GDI details, advanced spying tools and techniques, and accounts of spelunking experiences. None of this seems ordered in a logical manner - Pietrek, for example, saves the spelunking experiences to a chapter of its own, at the end of his book. Chapters have easy-to-follow analysis on the documented user-mode level, freely interspersed with unfamiliar and difficult discussions of the mostly undocumented Kernel-mode level. With no clear separation between the elementary and advanced material, it swings sharply from the pedantically clear, to the obscure unexplained. For example, after the excellent details of how to locate the GDI handle table, it merely tells you what the DC structure is, without telling you how it was deciphered. While we are given full details of API tracing in the conventional manner (a la Richter), with source code, we are only given the briefest abstract discussion of a new, unconventional API spying. In the latter case, there is a cursory mention that it is explored in unidentified 'quite a few magazine articles'. All of this is further obfuscated with presentations of C++ wrapper classes, when what is really required is a clear discussion of the relevant WinAPI functions. There is also quite a bit of repetition of material in different chapters (such as the structure of the GDI handle table), and some material is in strange places (such as the tool for tracking all GDI handles in the system, grouped by handle type, which appears in the chapter "Pixels"). The second half of the book leaves the undocumented and low-level stuff, to discuss vanilla GDI programming. The information here is well presented, well organized, and clear. It covers drawing pixels, lines, bitmaps, image processing, palettes, fonts, raster operations, printing, and finally DirectDraw. Almost no use whatsoever is made of the extensive 'under the hood' information painstakingly gathered in the first half. What is missing in the reams of C++ classes presented here are some classes to process the standard image formats other than bitmaps i.e. JPEGs, GIFs and PNGs. For JPEGs particularly, a good C++ class is sorely missing for all of us who have tried to read the cross-platform, cross-compiler, cross-eyed code distributed by the Independent JPEG Group. The final chapter on DirectDraw is a great disappointment. DirectDraw is simply too large a subject for a single chapter, and such a chapter would only serve some purpose if it could impart an intuitive understanding of DirectDraw concepts, such as what a 'surface' is, and how it compares to a GDI device context. Instead we are treated once again to a series of C++ wrapper classes, the sort of stuff that more properly belongs on Yuan's Web site, than in this already-overweight book. Regarding the tools on the CD - I could not start some of them from the Start menu. They (surprisingly) have an inconsistent GUI, and source code does not appear overly well commented. Even worse, the code makes extensive use of templates which obfuscate rather than illuminate the sample programs. Although 'proper' programmers are meant to be familiar with templates, many are not, and they have no place in a book that ostensibly is about GDI, rather than good programming practice. However, some of the tools are extremely useful and worth adding to your arsenal. Although billed as covering Win9x as well as WinNT, there seems to be little more than a cursory mention of the 9x family. This is a shame, as although developers may justifiably detest the Win9x family, it accounts for the overwhelming majority of home computers, and a good GDI book should cover it in depth. In particular, I was looking for 'under the hood' information on Win9x, both the 32-bit GDI32.dll, and the 16-bit GDI.EXE, down to which most GDI calls thunk. Unless I was sleeping, I saw none of this in Yuan's book, and have to revert back to Pietrek's Secrets for this kind of information. In summary, I think this is a superb book for detailed 'above the hood' GDI work. For those interested in GDI 'under the hood', there is excellent material, as well as good spelunking tools. However, I must say that I was quite disappointed with this book as a result of expectations raised too high by its claims, which end up obscuring the many good aspects of the book. It would gain from a rewrite, cutting out the chapter on DirectDraw, and correcting the worst of the faults that have crept in as a result of poor organization and editing.
Help other customers find the most helpful reviews
Was this review helpful to you?
|
|
|
|