[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now


Forcing dialogs to use a certain font

Posted on 1998-08-04
Medium Priority
Last Modified: 2013-12-03
I would like to use a specific font in all of my dialog boxes. The reason this is important to me is that I want to avoid the problem associated with dialog box layout when users choose "large fonts" in the display control panel.

When my application starts up, I create a font with the following code:

       s_DefaultFont = CFont::FromHandle((HFONT) GetStockObject(DEFAULT_GUI_FONT));
      PetzAssert (s_DefaultFont);
      LOGFONT fontStruct;
      s_DefaultFont->GetLogFont (&fontStruct);
      fontStruct.lfHeight = -11;
      fontStruct.lfWeight = 400;
      s_DefaultFont = new CFont;
      s_DefaultFont->CreateFontIndirect (&fontStruct);

I then call SetFont on all of the controls I put in my dialog boxes. However, this font seems to get overridden when I test my application under "Large Fonts". Can you tell me how I can force all my application's dialogs to use the font I created above? Or, do you have a better solution to the large font problem?

Brett Levine
Question by:circuit
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions

Expert Comment

ID: 1320229
Forcing the font won't do it, the font size is controlled by windows and if want to change you have to reboot (dumb huh). you will still get controls that are out of place. The only way to make sure everything stays in the proper relative postition is to set it explicitly.

use m_OBJECT.MoveWindow(118,143, 53,23); for your buttons, text areas, drop boxes, ect. You have to go thorough and figure out the x,y,width,height for each control, have fun :)

I spent a long time on this and this IS the easiest way to get around this problem.

Author Comment

ID: 1320230
Actually, all my controls *are* specified in the manner you mentioned (ie in pixels, not dialog units), in code. The code snippet I included does create a font of the size I want (in this case, 11 point), but I can't seem to get that font to be used when the user's fonts are set to Large Fonts (via control panel). Any idea why it won't use my small font?


Expert Comment

ID: 1320231
well.. like I said. thats controlled by windows and cannot be dynamically changed. Alternativly, you can GetSystemMetrics() find out if it is set to small or large fonts then change your font accordingly. Now that you've clarified I had the same problem, in most cases I just left it, but in some cases I had to do what I mentioned above.

good luck
Survive A High-Traffic Event with Percona

Your application or website rely on your database to deliver information about products and services to your customers. You can’t afford to have your database lose performance, lose availability or become unresponsive – even for just a few minutes.


Expert Comment

ID: 1320232
These font problem messed up my life for 3 months. The problem
with window even though you ask for a font with particular metrics you are not guarenteed to get it.There is a font example
program in VC++ samples compile it and run. that program will help you find what are possible fonts you can create on one machine.

But there is a catch there also not all machines have same font.

after you decided on the metrics and font name.

In initdialog
1.Create a font and get a handle to it.
2.Get the window handle of your controls box.
3.Send a message WM_SETFONT to all the controls with
  the font handle.
The point is font with the metrics you call CreateFontIndirect()
should exist on the PC.

So use the font program run in all resolutions with large and
small font settings. find out a font which exists in all cases.

I don't exactly remember but I think I finally decided on "Small Font" .

Tell me if this helps..

Expert Comment

ID: 1320233
one more thing if windows cannot create a font with the metrics you asked it does not return FALSE. It returns nearest possible fit. BE careful about this feature/bug/pitfall!!!!.

Accepted Solution

Answers2000 earned 300 total points
ID: 1320234
Don't do it with code,  do it with resources.

In Dev Studio bring up the dialog (by double clicking on it's name in the resource tree).  The dialog box is display.  Right click outside of any controls on some background part of the dialog and pick properties (VC5) or just double click on the background of the dialog (VC4).  On the General Tab is a "Font" button.  You can force the font from here.  Only one font per dialog with this method.

One final point, make sure you use a font which comes with Windows, or you will get different results on machines that have different fonts installed.

Featured Post

Will your db performance match your db growth?

In Percona’s white paper “Performance at Scale: Keeping Your Database on Its Toes,” we take a high-level approach to what you need to think about when planning for database scalability.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this article, I'll describe -- and show pictures of -- some of the significant additions that have been made available to programmers in the MFC Feature Pack for Visual C++ 2008.  These same feature are in the MFC libraries that come with Visual …
Introduction: Database storage, where is the exe actually on the disc? Playing a game selected randomly (how to generate random numbers).  Error trapping with try..catch to help the code run even if something goes wrong. Continuing from the seve…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…

656 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question