Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Button size algorithm

Button size algorithm

Scheduled Pinned Locked Moved C / C++ / MFC
algorithmsquestion
2 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    Chris Hills
    wrote on last edited by
    #1

    Does anyone know the algorithm used by ::MessageBox() to work out how big to make the buttons in the dialog box? It seems to depend on the font size chosen in Display Properties -> Advanced -> Item = Message Box. Information about the font is available in ncm.lfMessageFont after doing: NONCLIENTMETRICS ncm; memset(&ncm, 0, sizeof(ncm)); ncm.cbSize = sizeof(ncm); ::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0); but how does ::MessageBox() get from there to the default button width and height? I've had a look at all the Windows routines that give system information, but I can't find the answer. Cheers, Chris.

    P 1 Reply Last reply
    0
    • C Chris Hills

      Does anyone know the algorithm used by ::MessageBox() to work out how big to make the buttons in the dialog box? It seems to depend on the font size chosen in Display Properties -> Advanced -> Item = Message Box. Information about the font is available in ncm.lfMessageFont after doing: NONCLIENTMETRICS ncm; memset(&ncm, 0, sizeof(ncm)); ncm.cbSize = sizeof(ncm); ::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0); but how does ::MessageBox() get from there to the default button width and height? I've had a look at all the Windows routines that give system information, but I can't find the answer. Cheers, Chris.

      P Offline
      P Offline
      PJ Arends
      wrote on last edited by
      #2

      It is base on DialogBaseUnits. The buttons are sized in DialogBaseUnits, and the size in pixels is calculated using the MapDialogRect() function that converts from DialogBaseUnits to pixels depending on the font used.


      "You're obviously a superstar." - Christian Graus about me - 12 Feb '03 "Obviously ???  You're definitely a superstar!!!" mYkel - 21 Jun '04 Within you lies the power for good - Use it!

      1 Reply Last reply
      0
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      • Login

      • Don't have an account? Register

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • World
      • Users
      • Groups