• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 416
  • Last Modified:

Caption of a Form

In VB4, how can I have the Caption of a Form not in upper left side (as usually), but in the middle? (I also do not like the solution  to type Spaces in the Caption Properties to move the Caption to the center)
1 Solution
Hi giann,

Try this:


Richie_SimonettiIT OperationsCommented:
The best way to do it is draw your own caption in the window.
Pls look for the article in MSDN

HOWTO: Draw a Custom Window Caption
ID: Q99046

This will give you enough information. But the code is in C, so you should convert it to Visual Basic

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Mike TomlinsonMiddle School Assistant TeacherCommented:
The short answer is that there is no way to center a caption on the form without adding spaces, either at design time, or in the resize event to keep it centered.

The long answer is that you can subclass your form and draw the non client area (title bar) yourself.  This has many headaches that go along with it.
The answer you don't want to hear is that the reason it's not easy to do this in VB is because having a window's caption left justified is a Windows GUI standard.  
Richie_SimonettiIT OperationsCommented:
The drawback is: cost is too high for a little award.
giannAuthor Commented:
The code that R_Rajesh suggests works. It centers the form caption.
But the problem is that when I change (by right click on my screen) the windows theme in  screen properties from classical windows to Windows Xp, then the Caption of the Form moves a little more right and it is not centered any more.
(Otherwise I would have no problem to type spaces)
Mike TomlinsonMiddle School Assistant TeacherCommented:
The reason for this is that the code makes a guess as to how big the control box on the left, and the min/max/close buttons on the right are, by using the hard coded number 1300.

If WindowState <> vbMinimized Then
    If Width < iCap + 1300 Then Width = (iCap + 1300)
        Caption = String((Width - (iCap + 1300)) / (2 * i), " ") & txt
End If

When you change themes, the actual size of these controls changes and the code breaks.  In fact, if you take out the min/max buttons without changing themes the centering will be off.

The point is, there is no way to center the text exactly under all conditions.

Well, technically, you can predict any case and make it centered. But it's really a lot to go through -- API again! There's a function, I think, called GetSystemMetrics() and it returns a bunch of information about "anything" "measureable" in Windows. You can get the size of the min/max/close buttons, do the necessary calculations, and center accordingly using spaces. No one would ever want to do that, I tell you.
Mike TomlinsonMiddle School Assistant TeacherCommented:
You are right DeuceEE, I'm sure there is a way to correctly calculate the necessary number of spaces to center the caption.

My point was that there isn't a precise way to center the text using only the values returned from the Form.Width property combined with the width of the caption from the TextWidth() function.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Train for your Pen Testing Engineer Certification

Enroll today in this bundle of courses to gain experience in the logistics of pen testing, Linux fundamentals, vulnerability assessments, detecting live systems, and more! This series, valued at $3,000, is free for Premium members, Team Accounts, and Qualified Experts.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now