SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Five Things Every Win32
Developer Should Know

Raymond Chen
(raymondc@microsoft.com)
FUN412
Windows User Experience
Microsoft Corporation
Five Topics
 Performance
   What you learned in school is wrong
   Playing friendly with others
 User interface issues
   The many faces of large fonts
   Parent and owner windows (review)
   Asynchronous input and synchronized input
Community Resources At PDC
 Other talks
   FUN319: Power-Aware Applications
   (Thu 5:15pm – note room change)
     An important “tax”
   FUN421: Garbage Collection Inside Out
   (Fri 1pm)
     Memory from the managed perspective
 Fundamentals Track lounge
   I’ll be there all day today
 Ask The Experts: System Internals
Talks You May Have Missed
(watch the DVD)
  FUN405: Programming with
  Concurrency, Part 2
    The dangers of trying too hard
  FUN307: Test Automation and
  Accessibility
Community Resources After PDC
 MSDN dev center:
 http://msdn.microsoft.com/windowsxp/
 Newsgroups:
 microsoft.public.win32.programmer.*
 Forums: forums.microsoft.com/msdn/
   New forum category: Windows Vista Development
 Essays on Win32:
 http://blogs.msdn.com/oldnewthing
Five Topics
 Performance
 What  you learned in school is
   wrong
   Playing friendly with others
 User interface issues
   The many faces of large fonts
   Parent and owner windows (review)
   Asynchronous input and synchronized input
Performance Bottlenecks
 CPU speed is no longer the limiting factor
 Latency is what kills you
 (May not be true but it’s “true enough”)
Typical Latencies
 WAN (1e9-2e9)
 Floppy, CD-ROM (1e9)
 LAN (1e7-1e8)
 Hard drive (1e7)

 Main memory (25-50)
 L2 cache (6-10)
 L1 cache (1-2)
 CPU (1)
Pointers Are Expensive
 Pointers by their nature point elsewhere
 Not in the same cache line
 Usually not even on the same page
 CPUs and OSs don’t predict pointers well
 It’s the page faults, stupid (especially at
 startup)
 The Common Language Runtime (CLR)
 knows this
O(n) Can Beat O(log n)
 How big is n anyway?
 A simple array maximizes value from each
 page fault (every byte is used)
 Also friendlier to cache lines and L2
 Linked lists, binary trees cost the most
 (only a few bytes used)
 A factor of 100 is hard to overcome
 The CLR Base Class Library (BCL) knows
 this
Five Topics
 Performance
   What you learned in school is wrong
 Playing     friendly with others
 User interface issues
   The many faces of large fonts
   Parent and owner windows (review)
   Asynchronous input and synchronized input
What If Two Programs Did This?
 You aren’t the only program running.
 We’re all in this together.
Polling
 Prevents CPU from sleeping, monitor from
 blanking, drive from spinning down, etc.
 Keeps pages present
 Effect is magnified on Terminal Servers
The Thread Pool
 Use WT_EXECUTELONGFUNCTION as
 necessary.
 Clean up behind yourself
   If you create windows, destroy them.
   If you initialize COM, uninitialize it.
 Don’t leave unfinished business
   ShellExecuteEx DDE (use
   SEE_MASK_FLAG_DDEWAIT)
   SendMessageCallback
Remote Desktop /
Terminal Services
 Your video card is very slow
 Disable animations
 (SPI_GETxxxANIMATION)
 Suppress unnecessary background
 operations
 Very similar to power management
Adapt to Hardware Capabilities
 Scale features up or down based on
 hardware
   Don’t need to cater to baseline machine
   Set defaults intelligently
 New for Windows Vista™: IWinsat
 The mechanism Windows uses to decide
 whether to enable visual effects
 To appear in Beta 2
 winsatfb@microsoft.com
Hardware Metrics
 Graphics capability
 Gaming capability
 System memory bandwidth
 Processor throughput
   Based on realistic computations
 Disk sequential read throughput

 Computed on first boot, on hardware
 change, and on demand (e.g. app setup)
 Calibrate against actual hardware
Five Topics
 Performance
   What you learned in school is wrong
   Playing friendly with others
 User interface issues
 The    many faces of large fonts
   Parent and owner windows (review)
   Asynchronous input and synchronized input
The Many Faces Of Large
Fonts
 Large font scheme
 High DPI
Large Font Scheme
 The size of screen
 elements
   Caption, menu,
   message box,
   status bar, icon
   labels
 No effect on
 anything else
High DPI
 Changes the mapping between point
 and pixels
 Affect all point-based computations
 (primarily fonts and consequently
 dialog boxes)
Visual Comparison
Bitmap Scaling In Dialogs




SS_BITMAP         SS_BITMAP |      SS_BITMAP |
              SS_REALSIZECONTROL SS_CENTERIMAGE
 No scaling        Stretched        Centered
Dealing With High DPI
 Font metrics scale non-linearly
   Visually inspect your dialogs
 Bitmaps need to be adjusted
   Author for common DPI (96, 120, 144, 192)
   Stretch or center static images if no perfect
   match available
   Stretching down is better than stretching up
 “High DPI is the new multimon”
High-DPI Devices




Sony VAIO U71
                                     Toshiba M200                         IBM T221:
•   6”
                                     •   12”                              •   24”
•   800x600
                                     •   1400x1050                        •   3840x2400
•   ≈166 DPI
                                     •   ≈144 DPI                         •   ≈200 DPI
•   ≈US$2700
                                     •   ≈US$2400                         •   ≈US$8000


    Source: PRS325: Windows Presentation Foundation ("Avalon"): Advanced Graphics (Part 1): “2D, 3D and
    Text”
High DPI In Windows Vista
 “Large font scheme” is gone
 DWM emulates 96 DPI by default
  Will stretch your output to actual DPI
  Opt out via SetProcessDPIAware
  (recommended, but requires thorough testing)
 Windows Presentation Foundation already
 designed to be DPI-agnostic
  pixel-based objects (bitmaps and videos
  mostly) still require attention
Guidance for Windows Vista™
PRS319: Building Applications That
 Look Great in Windows Vista™
  In room 152, next!
  New common controls (including Task Dialog)
  Client glass
  The Aero philosophy
  Designing for the new “look”
Five Topics
 Performance
   What you learned in school is wrong
   Playing friendly with others
 User interface issues
   The many faces of large fonts
 Parent  and owner windows
   (review)
   Asynchronous input and synchronized input
Parents And Owners
 Child windows are constrained by
 their parent
 Ownership is a relationship among
 top-level windows
 Most window-creation functions take a
 “parent or owner, depending” parameter
 Other UI functions take an owner
Parent/Owner Confusion
 GetParent() returns parent or owner
 GetAncestor() is clearer
 Documentation often casual about
 distinction between parent and owner
Parent And Owner Diagrams
          Visual                                 Window tree

                                                   Desktop
          Desktop

notepad
                                     find          notepad          simple
 edit        find
          edit      OK            edit      OK       edit
                         simple




                                                     Owner “tree”

                                                 notepad       simple

                                                  find
Reparenting And Orphans
 Only top-level windows can be owners
 If you pass a child window as owner, its
 top-level parent is used instead
 Consequently, reparenting a child window
 abandons its owned windows
HWND SetWindowOwner(HWND hwnd, HWND hwndOwner)
{
assert(!(GetWindowStyle(hwnd) & WS_CHILD));
assert(!(GetWindowStyle(hwndOwner) & WS_CHILD));
return (HWND)SetWindowLongPtr(hwnd,
             GWLP_HWNDPARENT, (LONG_PTR)hwndOwner);
}
Pitfalls Of Ownership
 Multiple visible top-level unowned windows
 on a single thread = red flag
 Choosing a random window as owner is
 not a solution
 Cross-thread ownership leads to input
 synchronization
Five Topics
 Performance
   What you learned in school is wrong
   Playing friendly with others
 User interface issues
   The many faces of large fonts
   Parent and owner windows (review)
 Asynchronous   input and
   synchronized input
16-Bit: Synchronous Input
 Input is globally serialized
 Shared keyboard, mouse state
 One focus window, one active window,
 one capture, one caret, one input queue
 Changes to focus, etc. are synchronous
32-Bit: Asynchronous Input
  Input is per-thread
  Separate keyboard, mouse state
  Each thread gets its own focus window,
  active window, capture, caret
  Changes to focus are asynchronous with
  respect to windows from other threads
> as if it were the only thread in the system
AttachThreadInput
 Indicates that two threads want to return to
 the old 16-bit style of synchronized input
 Your fates are intertwined
Synchronous Focus
 A has focus, B calls SetFocus(hwndB)
 B must wait for A to release focus since
 input is now synchronous
 If A is hung, then B hangs too
Synchronous Input
 In the queue are two input messages, first
 a message for A, then a message for B.
 B calls GetMessage – sees message for A
 and says “I can’t process my input until A
 processes its input first”
 If A is hung, then B never processes input
The Life Of An Input Message
             Input Queue A    Message Queue A   Thread A



Raw Input    Input Queue B    Message Queue B   Thread B




                              Message Queue C   Thread C

            Input Queue C+D

                              Message Queue D   Thread D
Behind Your Back
 Owner/owned windows are implicitly
 attached
 Parent/child windows are implicitly
 attached
 Journal hooks are the wildcard
Dealing With Input Synchronization

  Keep slow operations off the UI thread
  Avoid cross-thread ownership
      Thread 1                  Thread 1

     Main window    Thread 2   Main window   Thread 2
                   Progress     Progress      Work
       Work




      Back to                    Back to
      normal                     normal


           Avoid                  Prefer
Final Notes
 Evaluation forms
 Fundamentals Track Lounge
 Ask the Experts
 Q&A
© 2005 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

Weitere ähnliche Inhalte

Was ist angesagt?

Design Patterns Presentation - Chetan Gole
Design Patterns Presentation -  Chetan GoleDesign Patterns Presentation -  Chetan Gole
Design Patterns Presentation - Chetan GoleChetan Gole
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Edureka!
 
Design Patterns & JDK Examples
Design Patterns & JDK ExamplesDesign Patterns & JDK Examples
Design Patterns & JDK ExamplesEnder Aydin Orak
 
Gaganjot Kaur- The Nx Workspace.docx
Gaganjot Kaur- The Nx Workspace.docxGaganjot Kaur- The Nx Workspace.docx
Gaganjot Kaur- The Nx Workspace.docxGaganjot kaur
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始めynaruta
 
Specifications pattern
Specifications patternSpecifications pattern
Specifications patternTung Nguyen
 
DDD 20121106 SEA Forum November
DDD 20121106 SEA Forum NovemberDDD 20121106 SEA Forum November
DDD 20121106 SEA Forum November増田 亨
 
Functional Domain Modeling - The ZIO 2 Way
Functional Domain Modeling - The ZIO 2 WayFunctional Domain Modeling - The ZIO 2 Way
Functional Domain Modeling - The ZIO 2 WayDebasish Ghosh
 
始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~
始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~
始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~貴志 上坂
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀増田 亨
 
Open Closed Principle kata
Open Closed Principle kataOpen Closed Principle kata
Open Closed Principle kataPaul Blundell
 
Introduction to React JS
Introduction to React JSIntroduction to React JS
Introduction to React JSArno Lordkronos
 
Clean code: SOLID (iOS)
Clean code: SOLID (iOS)Clean code: SOLID (iOS)
Clean code: SOLID (iOS)Maksym Husar
 

Was ist angesagt? (20)

Design Patterns Presentation - Chetan Gole
Design Patterns Presentation -  Chetan GoleDesign Patterns Presentation -  Chetan Gole
Design Patterns Presentation - Chetan Gole
 
React render props
React render propsReact render props
React render props
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
 
React lecture
React lectureReact lecture
React lecture
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design Patterns & JDK Examples
Design Patterns & JDK ExamplesDesign Patterns & JDK Examples
Design Patterns & JDK Examples
 
Gaganjot Kaur- The Nx Workspace.docx
Gaganjot Kaur- The Nx Workspace.docxGaganjot Kaur- The Nx Workspace.docx
Gaganjot Kaur- The Nx Workspace.docx
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始め
 
Modular programming in qbasic
Modular programming in qbasicModular programming in qbasic
Modular programming in qbasic
 
Specifications pattern
Specifications patternSpecifications pattern
Specifications pattern
 
Builder design pattern
Builder design patternBuilder design pattern
Builder design pattern
 
DDD 20121106 SEA Forum November
DDD 20121106 SEA Forum NovemberDDD 20121106 SEA Forum November
DDD 20121106 SEA Forum November
 
Functional Domain Modeling - The ZIO 2 Way
Functional Domain Modeling - The ZIO 2 WayFunctional Domain Modeling - The ZIO 2 Way
Functional Domain Modeling - The ZIO 2 Way
 
始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~
始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~
始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀
 
Open Closed Principle kata
Open Closed Principle kataOpen Closed Principle kata
Open Closed Principle kata
 
Flujos de trabajo y mejores prácticas en git
Flujos de trabajo y mejores prácticas en gitFlujos de trabajo y mejores prácticas en git
Flujos de trabajo y mejores prácticas en git
 
Revit glossary terms
Revit glossary termsRevit glossary terms
Revit glossary terms
 
Introduction to React JS
Introduction to React JSIntroduction to React JS
Introduction to React JS
 
Clean code: SOLID (iOS)
Clean code: SOLID (iOS)Clean code: SOLID (iOS)
Clean code: SOLID (iOS)
 

Andere mochten auch

中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
применение солнечной энергии для теплоснабжения объектов
применение солнечной энергии для теплоснабжения объектовприменение солнечной энергии для теплоснабжения объектов
применение солнечной энергии для теплоснабжения объектовIngvar Lav
 
Cong nghe fpga bao cao
Cong nghe fpga   bao caoCong nghe fpga   bao cao
Cong nghe fpga bao caoTuanutehy
 
Curiosity a Marson
Curiosity a MarsonCuriosity a Marson
Curiosity a Marsontothandras
 
Traffic_Exchange_Blueprint
Traffic_Exchange_BlueprintTraffic_Exchange_Blueprint
Traffic_Exchange_BlueprintTookins1949224
 
Современные материалы для пассивного дома
Современные материалы для пассивного домаСовременные материалы для пассивного дома
Современные материалы для пассивного домаIngvar Lav
 
Marketing communications for start ups - anthony de kerf - marketing camp
Marketing communications for start ups - anthony de kerf - marketing campMarketing communications for start ups - anthony de kerf - marketing camp
Marketing communications for start ups - anthony de kerf - marketing campPaul Wcislo
 
Town Hall with Congressman Patrick McHenry 2012
Town Hall with Congressman Patrick McHenry 2012Town Hall with Congressman Patrick McHenry 2012
Town Hall with Congressman Patrick McHenry 2012CongressmanPatrickMcHenry
 
Fod pre installation guide (5)
Fod pre installation guide (5)Fod pre installation guide (5)
Fod pre installation guide (5)JoeyAunan
 

Andere mochten auch (20)

中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
применение солнечной энергии для теплоснабжения объектов
применение солнечной энергии для теплоснабжения объектовприменение солнечной энергии для теплоснабжения объектов
применение солнечной энергии для теплоснабжения объектов
 
Australia animals
Australia animalsAustralia animals
Australia animals
 
Cong nghe fpga bao cao
Cong nghe fpga   bao caoCong nghe fpga   bao cao
Cong nghe fpga bao cao
 
Curiosity a Marson
Curiosity a MarsonCuriosity a Marson
Curiosity a Marson
 
Traffic_Exchange_Blueprint
Traffic_Exchange_BlueprintTraffic_Exchange_Blueprint
Traffic_Exchange_Blueprint
 
Mengelola beban
Mengelola bebanMengelola beban
Mengelola beban
 
Современные материалы для пассивного дома
Современные материалы для пассивного домаСовременные материалы для пассивного дома
Современные материалы для пассивного дома
 
Bunono Chilldren
Bunono ChilldrenBunono Chilldren
Bunono Chilldren
 
Export
ExportExport
Export
 
Aventura
AventuraAventura
Aventura
 
งานPbl 3
งานPbl 3งานPbl 3
งานPbl 3
 
Spyware
Spyware Spyware
Spyware
 
Deferred Action Elegibility
Deferred Action ElegibilityDeferred Action Elegibility
Deferred Action Elegibility
 
Renungan NATAL
Renungan NATALRenungan NATAL
Renungan NATAL
 
Deferred Action Elegibility
Deferred Action ElegibilityDeferred Action Elegibility
Deferred Action Elegibility
 
งาน Pbl 1
งาน Pbl 1งาน Pbl 1
งาน Pbl 1
 
Marketing communications for start ups - anthony de kerf - marketing camp
Marketing communications for start ups - anthony de kerf - marketing campMarketing communications for start ups - anthony de kerf - marketing camp
Marketing communications for start ups - anthony de kerf - marketing camp
 
Town Hall with Congressman Patrick McHenry 2012
Town Hall with Congressman Patrick McHenry 2012Town Hall with Congressman Patrick McHenry 2012
Town Hall with Congressman Patrick McHenry 2012
 
Fod pre installation guide (5)
Fod pre installation guide (5)Fod pre installation guide (5)
Fod pre installation guide (5)
 

Ähnlich wie Five Things Every Win32 Developer Should Know

Windows 7 @Microsoft CTD
Windows 7 @Microsoft CTDWindows 7 @Microsoft CTD
Windows 7 @Microsoft CTDAbhishek Sharma
 
The nitty gritty of game development
The nitty gritty of game developmentThe nitty gritty of game development
The nitty gritty of game developmentbasisspace
 
High DPI for desktop applications
High DPI for desktop applicationsHigh DPI for desktop applications
High DPI for desktop applicationsKirill Grouchnikov
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSkills Matter
 
Peyton jones-2011-parallel haskell-the_future
Peyton jones-2011-parallel haskell-the_futurePeyton jones-2011-parallel haskell-the_future
Peyton jones-2011-parallel haskell-the_futureTakayuki Muranushi
 
Casual Engines 2009
Casual Engines 2009Casual Engines 2009
Casual Engines 2009David Fox
 
Creating Multiscreen Apps using Adobe Flash Platform
Creating Multiscreen Apps using Adobe Flash PlatformCreating Multiscreen Apps using Adobe Flash Platform
Creating Multiscreen Apps using Adobe Flash PlatformHemanth Sharma
 
Yahoo! On Microsoft .NET 3.0 and Microsoft Expression
Yahoo! On Microsoft .NET 3.0 and Microsoft ExpressionYahoo! On Microsoft .NET 3.0 and Microsoft Expression
Yahoo! On Microsoft .NET 3.0 and Microsoft Expressiongoodfriday
 
Microsoft windows operating concept
Microsoft windows operating conceptMicrosoft windows operating concept
Microsoft windows operating conceptMi L
 
Windows 7 V2 Vineet
Windows 7 V2   VineetWindows 7 V2   Vineet
Windows 7 V2 Vineettechnext1
 
Prasentation Managed DirectX
Prasentation Managed DirectXPrasentation Managed DirectX
Prasentation Managed DirectXA. LE
 
13.30 hr Hebinck
13.30 hr Hebinck13.30 hr Hebinck
13.30 hr HebinckThemadagen
 
Windows 7 For Developers
Windows 7 For DevelopersWindows 7 For Developers
Windows 7 For Developersrsnarayanan
 
Dev-In-Town: Windows 7 by Jabez Gan
Dev-In-Town: Windows 7 by Jabez GanDev-In-Town: Windows 7 by Jabez Gan
Dev-In-Town: Windows 7 by Jabez GanQuek Lilian
 

Ähnlich wie Five Things Every Win32 Developer Should Know (20)

Windows 7 @Microsoft CTD
Windows 7 @Microsoft CTDWindows 7 @Microsoft CTD
Windows 7 @Microsoft CTD
 
The nitty gritty of game development
The nitty gritty of game developmentThe nitty gritty of game development
The nitty gritty of game development
 
High DPI for desktop applications
High DPI for desktop applicationsHigh DPI for desktop applications
High DPI for desktop applications
 
CLI313
CLI313CLI313
CLI313
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
Peyton jones-2011-parallel haskell-the_future
Peyton jones-2011-parallel haskell-the_futurePeyton jones-2011-parallel haskell-the_future
Peyton jones-2011-parallel haskell-the_future
 
Casual Engines 2009
Casual Engines 2009Casual Engines 2009
Casual Engines 2009
 
PyCon 2011: IronPython Command Line
PyCon 2011:  IronPython Command LinePyCon 2011:  IronPython Command Line
PyCon 2011: IronPython Command Line
 
Creating Multiscreen Apps using Adobe Flash Platform
Creating Multiscreen Apps using Adobe Flash PlatformCreating Multiscreen Apps using Adobe Flash Platform
Creating Multiscreen Apps using Adobe Flash Platform
 
Yahoo! On Microsoft .NET 3.0 and Microsoft Expression
Yahoo! On Microsoft .NET 3.0 and Microsoft ExpressionYahoo! On Microsoft .NET 3.0 and Microsoft Expression
Yahoo! On Microsoft .NET 3.0 and Microsoft Expression
 
INTRO TO COMPUTER
INTRO TO COMPUTERINTRO TO COMPUTER
INTRO TO COMPUTER
 
Microsoft windows operating concept
Microsoft windows operating conceptMicrosoft windows operating concept
Microsoft windows operating concept
 
Windows 7 V2 Vineet
Windows 7 V2   VineetWindows 7 V2   Vineet
Windows 7 V2 Vineet
 
Windows 7 V2
Windows 7 V2Windows 7 V2
Windows 7 V2
 
Prasentation Managed DirectX
Prasentation Managed DirectXPrasentation Managed DirectX
Prasentation Managed DirectX
 
windows 7
windows 7windows 7
windows 7
 
Basic computerskills
Basic computerskillsBasic computerskills
Basic computerskills
 
13.30 hr Hebinck
13.30 hr Hebinck13.30 hr Hebinck
13.30 hr Hebinck
 
Windows 7 For Developers
Windows 7 For DevelopersWindows 7 For Developers
Windows 7 For Developers
 
Dev-In-Town: Windows 7 by Jabez Gan
Dev-In-Town: Windows 7 by Jabez GanDev-In-Town: Windows 7 by Jabez Gan
Dev-In-Town: Windows 7 by Jabez Gan
 

Kürzlich hochgeladen

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 

Kürzlich hochgeladen (20)

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 

Five Things Every Win32 Developer Should Know

  • 1. Five Things Every Win32 Developer Should Know Raymond Chen (raymondc@microsoft.com) FUN412 Windows User Experience Microsoft Corporation
  • 2. Five Topics Performance What you learned in school is wrong Playing friendly with others User interface issues The many faces of large fonts Parent and owner windows (review) Asynchronous input and synchronized input
  • 3. Community Resources At PDC Other talks FUN319: Power-Aware Applications (Thu 5:15pm – note room change) An important “tax” FUN421: Garbage Collection Inside Out (Fri 1pm) Memory from the managed perspective Fundamentals Track lounge I’ll be there all day today Ask The Experts: System Internals
  • 4. Talks You May Have Missed (watch the DVD) FUN405: Programming with Concurrency, Part 2 The dangers of trying too hard FUN307: Test Automation and Accessibility
  • 5. Community Resources After PDC MSDN dev center: http://msdn.microsoft.com/windowsxp/ Newsgroups: microsoft.public.win32.programmer.* Forums: forums.microsoft.com/msdn/ New forum category: Windows Vista Development Essays on Win32: http://blogs.msdn.com/oldnewthing
  • 6. Five Topics Performance What you learned in school is wrong Playing friendly with others User interface issues The many faces of large fonts Parent and owner windows (review) Asynchronous input and synchronized input
  • 7. Performance Bottlenecks CPU speed is no longer the limiting factor Latency is what kills you (May not be true but it’s “true enough”)
  • 8. Typical Latencies WAN (1e9-2e9) Floppy, CD-ROM (1e9) LAN (1e7-1e8) Hard drive (1e7) Main memory (25-50) L2 cache (6-10) L1 cache (1-2) CPU (1)
  • 9. Pointers Are Expensive Pointers by their nature point elsewhere Not in the same cache line Usually not even on the same page CPUs and OSs don’t predict pointers well It’s the page faults, stupid (especially at startup) The Common Language Runtime (CLR) knows this
  • 10. O(n) Can Beat O(log n) How big is n anyway? A simple array maximizes value from each page fault (every byte is used) Also friendlier to cache lines and L2 Linked lists, binary trees cost the most (only a few bytes used) A factor of 100 is hard to overcome The CLR Base Class Library (BCL) knows this
  • 11. Five Topics Performance What you learned in school is wrong Playing friendly with others User interface issues The many faces of large fonts Parent and owner windows (review) Asynchronous input and synchronized input
  • 12. What If Two Programs Did This? You aren’t the only program running. We’re all in this together.
  • 13. Polling Prevents CPU from sleeping, monitor from blanking, drive from spinning down, etc. Keeps pages present Effect is magnified on Terminal Servers
  • 14. The Thread Pool Use WT_EXECUTELONGFUNCTION as necessary. Clean up behind yourself If you create windows, destroy them. If you initialize COM, uninitialize it. Don’t leave unfinished business ShellExecuteEx DDE (use SEE_MASK_FLAG_DDEWAIT) SendMessageCallback
  • 15. Remote Desktop / Terminal Services Your video card is very slow Disable animations (SPI_GETxxxANIMATION) Suppress unnecessary background operations Very similar to power management
  • 16. Adapt to Hardware Capabilities Scale features up or down based on hardware Don’t need to cater to baseline machine Set defaults intelligently New for Windows Vista™: IWinsat The mechanism Windows uses to decide whether to enable visual effects To appear in Beta 2 winsatfb@microsoft.com
  • 17. Hardware Metrics Graphics capability Gaming capability System memory bandwidth Processor throughput Based on realistic computations Disk sequential read throughput Computed on first boot, on hardware change, and on demand (e.g. app setup) Calibrate against actual hardware
  • 18. Five Topics Performance What you learned in school is wrong Playing friendly with others User interface issues The many faces of large fonts Parent and owner windows (review) Asynchronous input and synchronized input
  • 19. The Many Faces Of Large Fonts Large font scheme High DPI
  • 20. Large Font Scheme The size of screen elements Caption, menu, message box, status bar, icon labels No effect on anything else
  • 21. High DPI Changes the mapping between point and pixels Affect all point-based computations (primarily fonts and consequently dialog boxes)
  • 23. Bitmap Scaling In Dialogs SS_BITMAP SS_BITMAP | SS_BITMAP | SS_REALSIZECONTROL SS_CENTERIMAGE No scaling Stretched Centered
  • 24. Dealing With High DPI Font metrics scale non-linearly Visually inspect your dialogs Bitmaps need to be adjusted Author for common DPI (96, 120, 144, 192) Stretch or center static images if no perfect match available Stretching down is better than stretching up “High DPI is the new multimon”
  • 25. High-DPI Devices Sony VAIO U71 Toshiba M200 IBM T221: • 6” • 12” • 24” • 800x600 • 1400x1050 • 3840x2400 • ≈166 DPI • ≈144 DPI • ≈200 DPI • ≈US$2700 • ≈US$2400 • ≈US$8000 Source: PRS325: Windows Presentation Foundation ("Avalon"): Advanced Graphics (Part 1): “2D, 3D and Text”
  • 26. High DPI In Windows Vista “Large font scheme” is gone DWM emulates 96 DPI by default Will stretch your output to actual DPI Opt out via SetProcessDPIAware (recommended, but requires thorough testing) Windows Presentation Foundation already designed to be DPI-agnostic pixel-based objects (bitmaps and videos mostly) still require attention
  • 27. Guidance for Windows Vista™ PRS319: Building Applications That Look Great in Windows Vista™ In room 152, next! New common controls (including Task Dialog) Client glass The Aero philosophy Designing for the new “look”
  • 28. Five Topics Performance What you learned in school is wrong Playing friendly with others User interface issues The many faces of large fonts Parent and owner windows (review) Asynchronous input and synchronized input
  • 29. Parents And Owners Child windows are constrained by their parent Ownership is a relationship among top-level windows Most window-creation functions take a “parent or owner, depending” parameter Other UI functions take an owner
  • 30. Parent/Owner Confusion GetParent() returns parent or owner GetAncestor() is clearer Documentation often casual about distinction between parent and owner
  • 31. Parent And Owner Diagrams Visual Window tree Desktop Desktop notepad find notepad simple edit find edit OK edit OK edit simple Owner “tree” notepad simple find
  • 32. Reparenting And Orphans Only top-level windows can be owners If you pass a child window as owner, its top-level parent is used instead Consequently, reparenting a child window abandons its owned windows HWND SetWindowOwner(HWND hwnd, HWND hwndOwner) { assert(!(GetWindowStyle(hwnd) & WS_CHILD)); assert(!(GetWindowStyle(hwndOwner) & WS_CHILD)); return (HWND)SetWindowLongPtr(hwnd, GWLP_HWNDPARENT, (LONG_PTR)hwndOwner); }
  • 33. Pitfalls Of Ownership Multiple visible top-level unowned windows on a single thread = red flag Choosing a random window as owner is not a solution Cross-thread ownership leads to input synchronization
  • 34. Five Topics Performance What you learned in school is wrong Playing friendly with others User interface issues The many faces of large fonts Parent and owner windows (review) Asynchronous input and synchronized input
  • 35. 16-Bit: Synchronous Input Input is globally serialized Shared keyboard, mouse state One focus window, one active window, one capture, one caret, one input queue Changes to focus, etc. are synchronous
  • 36. 32-Bit: Asynchronous Input Input is per-thread Separate keyboard, mouse state Each thread gets its own focus window, active window, capture, caret Changes to focus are asynchronous with respect to windows from other threads > as if it were the only thread in the system
  • 37. AttachThreadInput Indicates that two threads want to return to the old 16-bit style of synchronized input Your fates are intertwined
  • 38. Synchronous Focus A has focus, B calls SetFocus(hwndB) B must wait for A to release focus since input is now synchronous If A is hung, then B hangs too
  • 39. Synchronous Input In the queue are two input messages, first a message for A, then a message for B. B calls GetMessage – sees message for A and says “I can’t process my input until A processes its input first” If A is hung, then B never processes input
  • 40. The Life Of An Input Message Input Queue A Message Queue A Thread A Raw Input Input Queue B Message Queue B Thread B Message Queue C Thread C Input Queue C+D Message Queue D Thread D
  • 41. Behind Your Back Owner/owned windows are implicitly attached Parent/child windows are implicitly attached Journal hooks are the wildcard
  • 42. Dealing With Input Synchronization Keep slow operations off the UI thread Avoid cross-thread ownership Thread 1 Thread 1 Main window Thread 2 Main window Thread 2 Progress Progress Work Work Back to Back to normal normal Avoid Prefer
  • 43. Final Notes Evaluation forms Fundamentals Track Lounge Ask the Experts Q&A
  • 44. © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.