Suppose you have designed a dialog that are having a lot of controls, and you made it look perfect. Now your client says: “Oh, The font looks a bit small. Can you enlarge it a bit and keep up the same look and feel?”. So, what’s the big deal lets change the font size. OK, Changed? So what do you see? The size of the dialog including all the controls in it has changed according to the font size and everything got bigger. Now maintaining the same font size, you will need to resize and re-position all the controls in it one by one, which is really a hard thing.
Well, whats the reason behind this? Your resource file (.rc) uses something called dialog units to specify the position and size of the controls. This thing is completely dependent on the font size you set to the dialog, and that is the reason for the size of each control in the dialog even though there is no text in the same. ( refer the msdn doc: http://support.microsoft.com/kb/145994 to get a better understanding about dialog units)
One solution is to do all things dynamically, that is using SetWindowPos function to set the correct position and sizes in pixels. But that too is hard as if you already designed it. So I decided to create an application that parse your resource code block, identify the control co-ordinates and convert them in such a way that there will not be a size change according to the font size. All you have to do is:
- Run the application
- Input the previous font name and font size, the new font size and font name
- Open the resource file that has the code of the dialog
- Copy the code starting from the line below “BEGIN” statement up to the previous line of “END” statement
- Click “Convert” button, and you can see the co-ordinate adjusted code on the edit window on right side.
- Replace it to the resource file after comparing the original version (ideally using beyond compare).
Very simple. The application looks for and reads the first 4 comma separated integers in each line, which will obviously be the x,y, width and height values of a control. When it gets such a group of values, it will generate the values using the formula in the aforementioned doc. That means, you can also give the desired values in the format: “x,y,width,height” (not “left,top,right,bottom”) to get the converted value, which you will have to do in order to convert co-ordinates of the dialog which in code isn’t properly comma separated.
Note: If the text in new font does not fit in the previous control size, you will need to manually adjust the size of such controls in order for the text to fit in.