exactly what kk put, you see the problem is that if the width of the area the text is being drawn in is too small it scales the text to fit inside it, you can set the width really high but i find it easier to just automate it then you dont really bump into those problems, as for the buttons, images of the keyboard keys would be great, also how about spicing up a custom banner in an image program for the controls title? its amazing what a few images can do for a window, if you need any help just ask

edit:
to add the images you can simply make your code as follows:
def refresh
self.contents.clear
self.contents.font.color = normal_color
self.contents.font.size = 20
self.contents.draw_text(50, 0, 70, 32, "CONTROLS")
@bitmap = RPG::Cache.picture("IMAGENAME")
self.contents.blt(0, 0, @bitmap, Rect.new(0, 0, @bitmap_width, @bitmap_height), 255)
self.contents.draw_text(70, 70, 100, 32, "Up Arrow - Move Up")
@bitmap = RPG::Cache.picture("IMAGENAME")
self.contents.blt(0, 0, @bitmap, Rect.new(0, 0, @bitmap_width, @bitmap_height), 255)
end
@bitmap is the image to draw, RPG::Cache.picture roots to the picture directory in your project folder so if you wanted to get an image from the battlers folder it would look like this: RPG::Cache.battler
"self.contents.blt(0, 0, @bitmap,
Rect.new(0, 0, @bitmap_width, @bitmap_height), 255)" this draws the image onto the window ill explain what each segment does:
self.contents.blt(X1, Y1, IMAGE, Rect.new(X2, Y2, WIDTH, HEIGHT), OPACITY)
X1 = the x postion in the window
Y1 = the y postion in the window
IMAGE = the image to draw in ourcase @bitmap
Rect.new creates a rectangle to draw the content in
X2 = the x position of the rect (from the last x)
Y2 = the y position of the rectangle (from the last y)
WIDTH = the rects width, in this case we want it to be @bitmap_width
HEIGHT = the rect height in this case we want it to be @bitmap_height
OPACITY = the transparency of the image, min = 0, max = 255
that should get you going