I wrote this program several years ago.
It allows you to make fully scalable "pictures" for font characters.
It's written in Free BASIC..
Since the font characters can vary in size , i couldn't figure out how to make an editor for it.
How would you cut & paste and copy lines of text?
What I have tried:
Free BASIC source code..
1 #define WIN_INCLUDEALL
2 #include once "windows.bi"
3 #include once "win\commdlg.bi"
4 #include "fbgfx.bi"
5
6 const MENUID_BASE = 100
7 enum MENUID_ENUM
8 MENUID_FILE_CLEAR = MENUID_BASE
9 MENUID_FILE_OPEN
10 MENUID_FILE_SAVE
11 MENUID_FILE_SAVE_AS_BMP
12 MENUID_FILE_SAVE_INPUT_AS_BMP
13 MENUID_FILE_EXIT
14 '===============================================================================
15 MENUID_BRUSH_SIZE_0_ZERO
16 MENUID_BRUSH_SIZE_0_1
17 MENUID_BRUSH_SIZE_0_2
18 MENUID_BRUSH_SIZE_0_3
19 MENUID_BRUSH_SIZE_0_4
20 MENUID_BRUSH_SIZE_0_5
21 MENUID_BRUSH_SIZE_0_6
22 MENUID_BRUSH_SIZE_0_7
23 MENUID_BRUSH_SIZE_0_8
24 MENUID_BRUSH_SIZE_0_9
25 '===============================================================================
26 MENUID_BRUSH_SIZE_ZERO_0
27 MENUID_BRUSH_SIZE_1_0
28 MENUID_BRUSH_SIZE_2_0
29 MENUID_BRUSH_SIZE_3_0
30 MENUID_BRUSH_SIZE_4_0
31 MENUID_BRUSH_SIZE_5_0
32 MENUID_BRUSH_SIZE_6_0
33 MENUID_BRUSH_SIZE_7_0
34 MENUID_BRUSH_SIZE_8_0
35 MENUID_BRUSH_SIZE_9_0
36 '===============================================================================
37 MENUID_GLYPH_X_4
38 MENUID_GLYPH_X_8
39 MENUID_GLYPH_X_10
40 MENUID_GLYPH_X_12
41 MENUID_GLYPH_X_14
42 MENUID_GLYPH_X_16
43 MENUID_GLYPH_X_18
44 MENUID_GLYPH_X_20
45 MENUID_GLYPH_X_22
46 MENUID_GLYPH_X_24
47 MENUID_GLYPH_X_26
48 MENUID_GLYPH_X_28
49 MENUID_GLYPH_X_30
50 MENUID_GLYPH_X_32
51 MENUID_GLYPH_X_48
52 MENUID_GLYPH_X_64
53 '===============================================================================
54 MENUID_GLYPH_Y_4
55 MENUID_GLYPH_Y_8
56 MENUID_GLYPH_Y_10
57 MENUID_GLYPH_Y_12
58 MENUID_GLYPH_Y_14
59 MENUID_GLYPH_Y_16
60 MENUID_GLYPH_Y_18
61 MENUID_GLYPH_Y_20
62 MENUID_GLYPH_Y_22
63 MENUID_GLYPH_Y_24
64 MENUID_GLYPH_Y_26
65 MENUID_GLYPH_Y_28
66 MENUID_GLYPH_Y_30
67 MENUID_GLYPH_Y_32
68 MENUID_GLYPH_Y_48
69 MENUID_GLYPH_Y_64
70 '===============================================================================
71 MENUID_RATIO_4
72 MENUID_RATIO_6
73 MENUID_RATIO_8
74 MENUID_RATIO_10
75 '===============================================================================
76 MENUID_COLOR_BLACK
77 MENUID_COLOR_BROWN
78 MENUID_COLOR_RED
79 MENUID_COLOR_ORANGE
80 MENUID_COLOR_YELLOW
81 MENUID_COLOR_GREEN
82 MENUID_COLOR_BLUE
83 MENUID_COLOR_VIOLET
84 MENUID_COLOR_WHITE
85 MENUID_COLOR_CUSTOM
86 '===============================================================================
87 MENUID_HELP_ABOUT
88 MAXMENUS
89 end enum
90 '===============================================================================
91 'setup menus
92 '===============================================================================
93 type TMENU : hnd as HMENU : end type
94 dim shared submenuTB(0 to MAXMENUS) as TMENU
95 dim shared as uinteger menuid
96
97 '===============================================================================
98 '===============================================================================
99 'variables
100 '===============================================================================
101 '===============================================================================
102 '===============================================================================
103 dim shared as integer MouseDown
104 dim shared as integer mouse_x=0
105 dim shared as integer mouse_y=0
106 dim shared as integer last_x =0
107 dim shared as integer last_y =0
108
109 dim shared as integer glyph_x = 32
110 dim shared as integer glyph_y = 32
111 dim shared as ulongint b_color = &H000000
112 dim shared as single b_size_01 = 0
113 dim shared as single b_size_10 = 0
114 dim shared as integer ratio = 10
115
116 'dim shared as ulongint bc
117 'dim shared as single bs_10
118 'dim shared as single bs_01
119
120 'drawing storage strings for saving and loading
121 dim shared as string glyph_size
122 dim shared as string xpos
123 dim shared as string ypos
124 dim shared as string brush_color
125 dim shared as string brush_size
126 dim shared as string connected
127
128 'toggle 0/1 for erasing or keeping storage strings
129 dim shared as integer clear_strings=0
130
131 'file name variables
132 dim shared as string file , ext , filename , File_type
133
134 'setup handle,messaging,structs
135 Dim shared hWnd As HWND
136 Dim shared msg as MSG
137 dim shared rct as RECT
138 dim shared pnt as PAINTSTRUCT
139 dim shared hDC as HDC
140
141 'setup glyph-grid objs
142 dim shared Glyph_Grid as HBITMAP
143 dim shared Glyph_Grid_Pen as HPEN
144 dim shared GridDC as HDC
145 dim shared glyphobj as HGDIOBJ
146 dim shared glyphpen_obj as HGDIOBJ
147
148 'setup font window objs
149 dim shared Font_Grid as HBITMAP
150 dim shared Font_Grid_Pen as HPEN
151 dim shared FontDC as HDC
152 dim shared fontobj as HGDIOBJ
153 dim shared fontpen_obj as HGDIOBJ
154
155 'setup output window objs
156 dim shared OutPut_Grid as HBITMAP
157 dim shared OutPut_Grid_Pen as HPEN
158 dim shared OutPutDC as hDC
159 dim shared OutPutobj as HGDIOBJ
160 dim shared OutPutpen_obj as HGDIOBJ
161
162 'setup help text
163 dim shared as string help_text
164 help_text = "Picto-Font Version 9.0 Feb / 2019 " +chr(13)+chr(10)
165 help_text+= "Email: Albert_Redditt@yahoo.com " +chr(13)+chr(10)
166 help_text+= " " +chr(13)+chr(10)
167 help_text+= "A Custom Font creation program. " +chr(13)+chr(10)
168 help_text+= "Curently there are no editors, " +chr(13)+chr(10)
169 help_text+= "for the programs output. " +chr(13)+chr(10)
170 help_text+= " " +chr(13)+chr(10)
171 help_text+= "Click on Glyph_X_Size And Glyph_Y_Size " +chr(13)+chr(10)
172 help_text+= "and select a grid size. " +Chr(13)+chr(10)
173 help_text+= " " +chr(13)+chr(10)
174 help_text+= "Click on Ratio to selcet a drawing zoom ratio. " +chr(13)+chr(10)
175 help_text+= " " +chr(13)+chr(10)
176 help_text+= "Click on File CLEAR_GLYPH to clear the grid. " +chr(13)+chr(10)
177 help_text+= " " +chr(13)+chr(10)
178 help_text+= "Click on Brush Color to set the brush color " +chr(13)+chr(10)
179 help_text+= " " +chr(13)+chr(10)
180 help_text+= "Click on Brush Size to set the brush size " +chr(13)+chr(10)
181 help_text+= " " +chr(13)+chr(10)
182 help_text+= "Right click somewhere on the picture to set " +chr(13)+chr(10)
183 help_text+= "the initial X/Y position. " +chr(13)+chr(10)
184 help_text+= " " +chr(13)+chr(10)
185 help_text+= "Left Click to connect the two points. " +chr(13)+chr(10)
186 help_text+= " " +chr(13)+chr(10)
187 help_text+= "Hold down a Button while moving to do FreeStyle." +chr(13)+chr(10)
188 help_text+= " " +chr(13)+chr(10)
189 help_text+= "The console screen will display the Bytes used so far."+chr(13)+chr(10)
190
191 '===============================================================================
192 '===============================================================================
193 'declare subs and functions
194 '===============================================================================
195 '===============================================================================
196 declare sub menu_separator( byval submenu as integer )
197 declare sub menu_append( byval submenu as integer, byval id as integer, byref title as string, byval flags as integer = 0 )
198 declare sub menu_insert( byval hmenu as HMENU, byval submenu as integer, byref title as string, byval flags as integer = 0 )
199 declare sub init_menus( byval hWnd as HWND )
200
201 declare sub getfilename()
202
203 declare Sub Load_Font(byval hWnd as HWND , byval rct as RECT)
204
205 declare sub Create_Glyph_Grid_And_Pen(byval hWnd as HWND)
206 declare sub Make_Grid(byval hWnd as HWND)
207 declare sub Delete_Glyph_Grid_And_Pen(byval hWnd as HWND)
208
209 declare Sub Create_Font_Grid_And_Pen(byval hWnd as HWND , byref bc as ulongint , byref bs_10 as single , byref bs_01 as single)
210 declare sub Delete_Font_Grid_And_Pen(byval hWnd as HWND)
211
212 declare Sub Create_Output_Grid_And_Pen(byval hWnd as HWND , byref bc as ulongint , byref bs_10 as single , byref bs_01 as single)
213 declare sub Delete_OutPut_Grid_And_Pen(byval hWnd as HWND)
214
215 declare sub Resize_Grids(byval hWnd as HWND)
216 declare Sub Select_Pens(byval hWnd as HWND , byref bc as ulongint , byref bs_10 as single , byref bs_01 as single)
217
218 declare sub Mouse_Update(byval hWnd as HWND , byval mouse as string , byval mouse_x as integer , byval mouse_y as integer )
219 declare sub Draw_Mouse(byval hWnd as HWND,byval mouse_x as integer,byval mouse_y as integer,byval last_x as integer,byval last_y as integer)
220
221 declare sub Bit_blt(byval hWnd as HWND)
222 declare sub Update(BYVAL hWnd as HWND , BYVal rct as RECT)
223 declare Sub ReDraw(byval hWnd as HWND , byval rct as RECT)
224 '===============================================================================
225 declare function WndProc ( byval hWnd as HWND , _
226 byval message as UINT , _
227 byval wParam as WPARAM , _
228 byval lParam as LPARAM ) as LRESULT
229 '===============================================================================
230 declare function WinMain ( byval hInstance as HINSTANCE , _
231 byval hPrevInstance as HINSTANCE , _
232 byref szCmdLine as string , _
233 byval iCmdShow as integer ) as integer
234 end WinMain( GetModuleHandle( null ), null, Command, SW_NORMAL )
235 '===============================================================================
236 '===============================================================================
237 'subs and functions below here
238 '===============================================================================
239 '===============================================================================
240 sub Create_Glyph_Grid_And_Pen(byval hWnd as HWND)
241 dim hdc as HDC
242 Glyph_Grid = CreateCompatibleBitmap(GetDC(hWnd) , glyph_x*ratio , glyph_y*ratio )
243 Glyph_Grid_Pen = CreatePen(PS_SOLID , 1 , &h00cf0000 )
244 GridDC = CreateCompatibleDC( hDC )
245 Dim As RECT Glyph_Grid_Rect = ( 0 , 0 , glyph_x*ratio , glyph_y*ratio )
246 SelectObject GridDC , Glyph_Grid
247 FillRect .GridDC , @Glyph_Grid_Rect , null
248 end sub
249 '===============================================================================
250 '===============================================================================
251 sub Delete_Glyph_Grid_And_Pen(byval hWnd as HWND)
252 dim hdc as HDC
253 SelectObject( GridDC, glyphobj )
254 SelectObject( GridDC, glyphpen_obj )
255 DeleteObject( Glyph_Grid )
256 DeleteObject( Glyph_Grid_Pen )
257 DeleteDC( GridDC )
258 end sub
259 '===============================================================================
260 '===============================================================================
261 sub Make_Grid(byval hWnd as HWND)
262 dim hdc as HDC
263 glyphobj = SelectObject( GridDC, Glyph_Grid )
264 glyphpen_obj = SelectObject( GridDC, Glyph_Grid_Pen )
265 for a as integer = 0 to glyph_x*ratio step (glyph_x*ratio) / glyph_x
266 for b as integer = 0 to glyph_y*ratio step (glyph_y*ratio) / glyph_y
267 lineto(GridDC,a,b)
268 MoveToEX(GridDC, a +(glyph_x*ratio) / glyph_x , b + (glyph_y*ratio)/glyph_y,0)
269 next
270 next
271 end sub
272 '===============================================================================
273 '===============================================================================
274 Sub Create_Font_Grid_And_Pen(byval hWnd as HWND , byref bc as ulongint , byref bs_10 as single , byref bs_01 as single)
275 dim hDC as HDC
276 Font_Grid = CreateCompatibleBitmap(GetDC(hWnd) , glyph_x*ratio , glyph_y*ratio )
277 Font_Grid_Pen = CreatePen( PS_SOLID , sqr(glyph_x*glyph_y)*(((bs_01*.01)+(bs_10*.1))*ratio ) , bc )
278 FontDC = CreateCompatibleDC( hDC )
279 Dim As RECT Font_Grid_Rect = ( 0 , 0 , glyph_x*ratio , glyph_y*ratio )
280 SelectObject FontDC , Font_Grid
281 FillRect .FontDC , @Font_Grid_Rect , null
282 '
283 fontobj = SelectObject( FontDC, Font_Grid )
284 fontpen_obj = SelectObject( FontDC, Font_Grid_Pen )
285 end sub
286 '===============================================================================
287 '===============================================================================
288 sub Delete_Font_Grid_And_Pen(byval hWnd as HWND)
289 dim hDC as HDC
290 SelectObject( FontDC, fontobj )
291 SelectObject( FontDC, fontpen_obj )
292 DeleteObject( Font_Grid )
293 DeleteObject( Font_Grid_Pen )
294 DeleteDC( FontDC )
295 end sub
296 '===============================================================================
297 '===============================================================================
298 Sub Create_Output_Grid_And_Pen(byval hWnd as HWND , byref bc as ulongint , byref bs_10 as single , byref bs_01 as single)
299 dim hDC as HDC
300 OutPut_Grid = CreateCompatibleBitmap(GetDC(hWnd), glyph_x , glyph_y )
301 OutPut_Grid_Pen = CreatePen(PS_SOLID,sqr(glyph_x*glyph_y)*(((bs_01*.01)+(bs_10*.1))*1 ),bc)
302 OutPutDC = CreateCompatibleDC(HDC)
303 Dim As RECT OutPut_Grid_Rect = ( 0 , 0 , glyph_x*ratio , glyph_y*ratio )
304 SelectObject OutPutDC , OutPut_Grid
305 FillRect .OutPutDC , @OutPut_Grid_Rect , null
306 '
307 outputobj = SelectObject(OutPutDC , OutPut_Grid )
308 outputpen_obj = SelectObject(OutPutDC , OutPut_Grid_Pen )
309 end sub
310 '===============================================================================
311 '===============================================================================
312 sub Delete_Output_Grid_And_Pen(byval hWnd as HWND)
313 dim hDC as HDC
314 SelectObject( OutPutDC, outputobj )
315 SelectObject( OutPutDC, outputpen_obj )
316 DeleteObject( OutPut_Grid )
317 DeleteObject( OutPut_Grid_Pen )
318 DeleteDC( OutPutDC )
319 end sub
320 '===============================================================================
321 '===============================================================================
322 sub Resize_Grids(byval hWnd as HWND)
323 Delete_Glyph_Grid_And_Pen( hWnd )
324 Delete_Font_Grid_And_Pen( hWnd )
325 Delete_OutPut_Grid_And_Pen( hWnd )
326 Create_Glyph_Grid_And_Pen(hWnd) : Make_Grid(hWnd)
327 Create_Font_Grid_And_Pen( hWnd , b_color , b_size_10 , b_size_01)
328 Create_OutPut_Grid_And_Pen( hWnd , b_color , b_size_10 , b_size_01)
329 ReDraw(hWnd,rct)
330 end sub
331 '===============================================================================
332 '===============================================================================
333 Sub Select_Pens(byval hWnd as HWND , byref bc as ulongint , byref bs_10 as single , byref bs_01 as single)
334 Font_Grid_Pen = CreatePen( PS_SOLID , sqr(glyph_x*glyph_y)*(((bs_01*.01)+(bs_10*.1))*ratio ) , bc )
335 fontpen_obj = SelectObject( FontDC, Font_Grid_Pen )
336 OutPut_Grid_Pen = CreatePen( PS_SOLID , sqr(glyph_x*glyph_y)*(((bs_01*.01)+(bs_10*.1))*1 ) , bc )
337 outputpen_obj = SelectObject( OutputDC, OutPut_Grid_Pen )
338 end sub
339 '===============================================================================
340 '===============================================================================
341 'mouse stuff below here
342 '===============================================================================
343 '===============================================================================
344 sub Mouse_Update(byval hWnd as HWND , byval mouse as string , byval mouse_x as integer , byval mouse_y as integer )
345
346 if mouse_x < 0 or mouse_x > (glyph_x*ratio) then return
347 if mouse_y < 0 or mouse_y > (glyph_y*ratio) then return
348
349 select case mouse
350 case "l_down" : MouseDown=1
351 case "l_up" : MouseDown=0
352 Case "r_down" : MouseDown=1 :last_x=mouse_x : last_y=mouse_y
353 case "r_up" : MouseDown=0 :last_x=mouse_x : last_y=mouse_y
354 Case "move" : if MouseDown=0 then return
355 end select
356
357 if MouseDown=1 then
358 glyph_size=right("00" + str(glyph_x),2) + right("00"+str(glyph_y),2)
359 xpos+ = right("000" + str(int(100/((glyph_x*ratio/(mouse_x+1))))),3)
360 ypos+ = right("000" + str(int(100/((glyph_y*ratio/(mouse_y+1))))),3)
361 brush_color+= right("00000000" + str(b_color),8)
362 brush_size += right("0" + str(b_size_10),1) + right("0" + str(b_size_01),1)
363
364 if mouse_x<>last_x or mouse_y<>last_y then
365 connected+="1"
366 else
367 connected+="0"
368 end if
369
370 color 14
371 print string(80,"=");
372 color 7
373 print "Glyph Size = " ; glyph_size
374 print "X Positions = " ; xpos
375 print "Y positions = " ; ypos
376 print "Brush Colors = " ; brush_color
377 print "Brush Sizes = " ; brush_size
378 print "Draw To = " ; connected
379 print "Bytes For CHR= " ; len(glyph_size)+len(xpos)+len(ypos)+len(brush_color)+len(brush_size)+len(connected)
380 color 14
381 print string(80,"=")
382 color 7
383
384 Draw_Mouse(hWnd, mouse_x , mouse_y, last_x ,last_y)
385 'Bit_blt(hWnd)
386
387 last_x=mouse_x
388 last_y=mouse_y
389
390 if mouse="move" then UpDate(hWnd,rct)
391
392 end if
393 end sub
394 '===============================================================================
395 '===============================================================================
396 sub Draw_Mouse(byval hWnd as HWND,byval mouse_x as integer,byval mouse_y as integer,byval last_x as integer,byval last_y as integer)
397 hDC = BeginPaint( hWnd, @pnt )
398 if mouse_x<>0 and mouse_y<>0 then
399 Select_Pens(hWnd,b_color,b_size_10,b_size_01)
400 'draw the line with the font_pen
401 MoveToEx(FontDC , ( last_x)-1 , ( last_y)-1 , 0)
402 LineTo(FontDC , (mouse_x)-1 , (mouse_y)-1)
403 'draw the line of the output
404 MoveToEx(OutputDC , ( last_x/ratio)-1 , ( last_y/ratio)-1 , 0)
405 LineTo(OutputDC , (mouse_x/ratio)-1 , (mouse_y/ratio)-1)
406 end if
407 EndPaint( hWnd, @pnt )
408 end sub
409 '===============================================================================
410 '===============================================================================
411 'BIT BLT and update below here
412 '===============================================================================
413 '===============================================================================
414 sub Bit_blt(byval hWnd as HWND)
415 dim hDC as HDC
416 hDC = BeginPaint( hWnd, @pnt )
417 'Transfer the GRID
418 BitBlt(hDC , 0 , 0 , glyph_x*ratio , glyph_y*ratio , GridDC , 0 , 0 , SRCCOPY)
419 'Transfer the FONT
420 BitBlt(hDC , 0 , 0 , glyph_x*ratio , glyph_y*ratio , FontDc , 0 , 0 , SRCAND)
421 'Transfer the OUTPUT
422 BitBlt(hDC ,(glyph_x*ratio)+60, 0 , glyph_x , glyph_y , OutputDC , 0, 0 , SRCCOPY)
423 EndPaint( hWnd, @pnt )
424 end sub
425 '===============================================================================
426 '===============================================================================
427 sub Update(BYVAL hWnd as HWND , BYVal rct as RECT)
428 InvalidateRect( hwnd, 0, TRUE )
429 UpdateWindow(hWnd)
430 end sub
431 '===============================================================================
432 '===============================================================================
433 'ReDraw() goes through strorage strings and replots the character.
434 '===============================================================================
435 '===============================================================================
436 Sub ReDraw(byval hWnd as HWND , byval rct as RECT)
437 dim hDC as HDC
438 dim as ulongint count_xy
439 dim as ulongint count_color
440 dim as ulongint count_size
441 dim as ulongint count_connected
442 dim as ulongint connect
443 dim as ulongint lx , ly ,mx , my , bc
444 dim as single bs_10 , bs_01
445
446 count_xy =1
447 count_color =1
448 count_size =1
449 count_connected =2
450 do
451 lx = (val(mid( xpos ,count_xy +0,3))/100) * (glyph_x*ratio)
452 ly = (val(mid( ypos ,count_xy +0,3))/100) * (glyph_y*ratio)
453 mx = (val(mid( xpos ,count_xy +3,3))/100) * (glyph_x*ratio)
454 my = (val(mid( ypos ,count_xy +3,3))/100) * (glyph_y*ratio)
455 bc =valulng(mid( brush_color,count_color , 8))
456 bs_10 = val(mid( brush_size ,count_size +0,1))
457 bs_01 = val(mid( brush_size ,count_size +1,1))
458 connect=val(mid( connected ,count_connected,1))
459
460 Select_Pens(hWnd,bc,bs_10,bs_01)
461
462 hDC = BeginPaint( hWnd, @pnt )
463 if connect=1 then 'two points are connected
464 MoveToEx(FontDC , (lx)-1 , (ly)-1 , 0)
465 LineTo(FontDC , (mx)-1 , (my)-1)
466
467 MoveToEx(OutPutDC , (lx/ratio)-1 , (ly/ratio)-1 , 0)
468 LineTo(OutPutDC , (mx/ratio)-1 , (my/ratio)-1)
469 else ' two points are not connected
470 MoveToEx(FontDC , (lx)-1 , (ly)-1 , 0)
471 LineTo(FontDC , (lx)-1 , (ly)-1)
472
473 MoveToEx(OutPutDC , (lx/ratio)-1 , (ly/ratio)-1 , 0)
474 LineTo(OutPutDC , (lx/ratio)-1 , (ly/ratio)-1)
475 end if
476 EndPaint( hWnd, @pnt )
477
478 count_xy +=3
479 count_color +=8
480 count_size +=2
481 count_connected +=1
482
483 loop until count_size>=len(brush_size)
484
485 last_x = lx
486 last_y = ly
487 mouse_x = mx
488 mouse_y = my
489
490 Update(hWnd,rct)
491 end sub
492 '===============================================================================
493 '===============================================================================
494 'File stuff below here
495 '===============================================================================
496 '===============================================================================
497 Sub Load_Font(byval hWnd as HWND , byval rct as RECT)
498 file = ""
499 file_type="pft"
500 getfilename()
501
502 if file <> "" then
503 open file for input as #1
504 line input #1,glyph_size
505 line input #1,xpos
506 line input #1,ypos
507 line input #1,brush_color
508 line input #1,brush_size
509 line input #1,connected
510 close #1
511
512 if glyph_x and glyph_y = 0 then
513 glyph_x=val( left(glyph_size,2))
514 glyph_y=val(right(glyph_size,2))
515 end if
516
517 print "Glyph Size = " ; glyph_size
518 print "X Positions = " ; xpos
519 print "Y positions = " ; ypos
520 print "Brush Colors = " ; brush_color
521 print "Brush Sizes = " ; brush_size
522 print "Draw To = " ; connected
523 print "Bytes For CHR= " ; len(glyph_size)+len(xpos)+len(ypos)+len(brush_color)+len(brush_size)+len(connected)
524 print string(78,"=")
525
526 Resize_Grids(hWnd)
527 end if
528 end sub
529 '===============================================================================
530 '===============================================================================
531 'wndProcess
532 '===============================================================================
533 '===============================================================================
534 function WndProc ( byval hWnd as HWND, _
535 byval message as UINT, _
536 byval wParam as WPARAM, _
537 byval lParam as LPARAM ) as LRESULT
538
539 function=0
540
541 mouse_x = LoWord(LParam)
542 mouse_y = HiWord(LParam)
543
544
545 select case( message )
546 '=======================================================================
547 case WM_CREATE
548 init_menus(hWnd)
549 Resize_Grids(hWnd)
550 '=======================================================================
551 case WM_PAINT
552 bit_blt(hWnd)
553 '=======================================================================
554 case WM_CLOSE
555 Delete_Glyph_Grid_And_Pen( hWnd )
556 Delete_Font_Grid_And_Pen( hWnd )
557 Delete_OutPut_Grid_And_Pen( hWnd )
558 DestroyWindow( hWnd )
559 '=======================================================================
560 case WM_DESTROY
561 Delete_Glyph_Grid_And_Pen( hWnd )
562 Delete_Font_Grid_And_Pen( hWnd )
563 Delete_OutPut_Grid_And_Pen( hWnd )
564 PostQuitMessage( 0 )
565 '=======================================================================
566 Case WM_LBUTTONDOWN : Mouse_Update(hWnd , "l_down" , mouse_x , mouse_y ) : UpDate(hWnd,rct)
567 Case WM_LBUTTONUP : Mouse_Update(hWnd , "l_up" , mouse_x , mouse_y ) : UpDate(hWnd,rct)
568 Case WM_RBUTTONDOWN : Mouse_Update(hWnd , "r_down" , mouse_x , mouse_y ) : UpDate(hWnd,rct)
569 Case WM_RBUTTONUP : Mouse_Update(hWnd , "r_up" , mouse_x , mouse_y ) : UpDate(hWnd,rct)
570 Case WM_MOUSEMOVE : Mouse_Update(hWnd , "move" , mouse_x , mouse_y )
571 '=======================================================================
572 case WM_COMMAND
573 select case loword( wParam )
574 '===================================================================
575 case MENUID_FILE_CLEAR
576 'reset variables to default
577 glyph_x = glyph_x
578 glyph_y = glyph_y
579 mouse_x=0 : mouse_y=0
580 last_x =0 : last_y =0
581 'clear the monitor output
582 cls
583 'zero our character storage strings
584 glyph_size=""
585 xpos=""
586 ypos=""
587 brush_color=""
588 brush_size=""
589 connected=""
590 'rebuild the glyphs
591 Resize_Grids(hWnd)
592 UpDate(hWnd,rct)
593 '===============================================================
594 case MENUID_FILE_OPEN : cls : Load_Font(hWnd,rct)
595 '===============================================================
596 case MENUID_FILE_SAVE
597 file = ""
598 file_type="pft"
599 getfilename()
600 if file <> "" then
601 open file for output as #1
602 print #1,glyph_size
603 print #1,xpos
604 print #1,ypos
605 print #1,brush_color
606 print #1,brush_size
607 print #1,connected
608 close #1
609 end if
610 '===============================================================
611 case MENUID_FILE_SAVE_AS_BMP
612 file = ""
613 file_type="bmp"
614 getfilename()
615
616 Dim As Any Ptr MYIMG
617 Dim As hDC MYDC
618 Dim As HBitmap MYBMP
619 Dim As BITMAPINFOHEADER MYBMPINFO
620
621 Dim As Integer sx, sy
622 Screenres 128,128,32
623 'Screeninfo sx, sy
624 sx = glyph_x
625 sy = glyph_y
626 MYIMG = ImageCreate(sx, sy)
627 'TMPWND = GetDesktopWindow()
628 'GetClientRect(TMPWND, @WNDRECT)
629 'WNDDC = GetDC(TMPWND)
630 MYDC = CreateCompatibleDC(OutPutDC)
631 MYBMP = CreateCompatibleBitmap(OutputDC, sx, sy)
632 SelectObject(MYDC, MYBMP)
633
634 With MYBMPINFO
635 .biSize = Sizeof(MYBMPINFO)
636 .biWidth = sx
637 .biHeight = -sy
638 .biPlanes = 1
639 .biBitCount = 32
640 .biCompression = BI_RGB
641 .biSizeImage = 0
642 End With
643
644 BitBlt(MYDC, 0, 0, sx, sy, OutputDC, 0, 0, SRCCOPY)
645 GetDIBits(MYDC, MYBMP, 0, sy, MYIMG + Sizeof(FB.IMAGE), Cptr(BITMAPINFO Ptr, @MYBMPINFO), DIB_RGB_COLORS)
646 Put (0, 0), MYIMG, Pset
647 BSave( file , MYIMG)
648 screen 0
649 'ReleaseDC(TMPWND,WNDDC)
650 DeleteDC(MYDC)
651 DeleteObject(MYBMP)
652 imagedestroy(MYIMG)
653 '===============================================================
654 Case MENUID_FILE_SAVE_INPUT_AS_BMP
655 file = ""
656 file_type="bmp"
657 getfilename()
658
659 Dim As Any Ptr MYIMG
660 Dim As hDC MYDC
661 Dim As HBitmap MYBMP
662 Dim As BITMAPINFOHEADER MYBMPINFO
663
664 Dim As Integer sx, sy
665 Screenres Glyph_x*ratio , glyph_y * ratio, 32
666 'Screeninfo sx, sy
667 sx = glyph_x*ratio
668 sy = glyph_y*ratio
669 MYIMG = ImageCreate(sx, sy)
670 'TMPWND = GetDesktopWindow()
671 'GetClientRect(TMPWND, @WNDRECT)
672 'WNDDC = GetDC(TMPWND)
673 MYDC = CreateCompatibleDC(FontDC)
674 MYBMP = CreateCompatibleBitmap(FontDC, sx, sy)
675 SelectObject(MYDC, MYBMP)
676
677 With MYBMPINFO
678 .biSize = Sizeof(MYBMPINFO)
679 .biWidth = sx
680 .biHeight = -sy
681 .biPlanes = 1
682 .biBitCount = 32
683 .biCompression = BI_RGB
684 .biSizeImage = 0
685 End With
686
687 BitBlt(MYDC, 0, 0, sx, sy, FontDC, 0, 0, SRCCOPY)
688 GetDIBits(MYDC, MYBMP, 0, sy, MYIMG + Sizeof(FB.IMAGE), Cptr(BITMAPINFO Ptr, @MYBMPINFO), DIB_RGB_COLORS)
689 Put (0, 0), MYIMG, Pset
690 BSave( file , MYIMG)
691 screen 0
692 'ReleaseDC(TMPWND,WNDDC)
693 DeleteDC(MYDC)
694 DeleteObject(MYBMP)
695 imagedestroy(MYIMG)
696
697 '===============================================================
698 case MENUID_FILE_EXIT
699 Delete_Glyph_Grid_And_Pen( hWnd )
700 Delete_Font_Grid_And_Pen( hWnd )
701 Delete_OutPut_Grid_And_Pen( hWnd )
702 PostMessage( hWnd, WM_CLOSE, 0, 0 )
703 '===============================================================
704 '===================================================================
705 'SIZES 1% to 9%
706 case MENUID_BRUSH_SIZE_0_ZERO : b_size_01=0
707 case MENUID_BRUSH_SIZE_0_1 : b_size_01=1
708 case MENUID_BRUSH_SIZE_0_2 : b_size_01=2
709 case MENUID_BRUSH_SIZE_0_3 : b_size_01=3
710 case MENUID_BRUSH_SIZE_0_4 : b_size_01=4
711 case MENUID_BRUSH_SIZE_0_5 : b_size_01=5
712 case MENUID_BRUSH_SIZE_0_6 : b_size_01=6
713 case MENUID_BRUSH_SIZE_0_7 : b_size_01=7
714 case MENUID_BRUSH_SIZE_0_8 : b_size_01=8
715 case MENUID_BRUSH_SIZE_0_9 : b_size_01=9
716 '===================================================================
717 'SIZES 10% to 90%
718 case MENUID_BRUSH_SIZE_ZERO_0 : b_size_10=0
719 case MENUID_BRUSH_SIZE_1_0 : b_size_10=1
720 case MENUID_BRUSH_SIZE_2_0 : b_size_10=2
721 case MENUID_BRUSH_SIZE_3_0 : b_size_10=3
722 case MENUID_BRUSH_SIZE_4_0 : b_size_10=4
723 case MENUID_BRUSH_SIZE_5_0 : b_size_10=5
724 case MENUID_BRUSH_SIZE_6_0 : b_size_10=6
725 case MENUID_BRUSH_SIZE_7_0 : b_size_10=7
726 case MENUID_BRUSH_SIZE_8_0 : b_size_10=8
727 case MENUID_BRUSH_SIZE_9_0 : b_size_10=9
728 '===================================================================
729 'GLYPH_X
730 Case MENUID_GLYPH_X_4 : glyph_x= 4:Resize_Grids(hWnd)
731 Case MENUID_GLYPH_X_8 : glyph_x= 8:Resize_Grids(hWnd)
732 Case MENUID_GLYPH_X_10: glyph_x=10:Resize_Grids(hWnd)
733 Case MENUID_GLYPH_X_12: glyph_x=12:Resize_Grids(hWnd)
734 Case MENUID_GLYPH_X_14: glyph_x=14:Resize_Grids(hWnd)
735 Case MENUID_GLYPH_X_16: glyph_x=16:Resize_Grids(hWnd)
736 Case MENUID_GLYPH_X_18: glyph_x=18:Resize_Grids(hWnd)
737 Case MENUID_GLYPH_X_20: glyph_x=20:Resize_Grids(hWnd)
738 Case MENUID_GLYPH_X_22: glyph_x=22:Resize_Grids(hWnd)
739 Case MENUID_GLYPH_X_24: glyph_x=24:Resize_Grids(hWnd)
740 Case MENUID_GLYPH_X_26: glyph_x=26:Resize_Grids(hWnd)
741 Case MENUID_GLYPH_X_28: glyph_x=28:Resize_Grids(hWnd)
742 Case MENUID_GLYPH_X_30: glyph_x=30:Resize_Grids(hWnd)
743 Case MENUID_GLYPH_X_32: glyph_x=32:Resize_Grids(hWnd)
744 Case MENUID_GLYPH_X_48: glyph_x=48:Resize_Grids(hWnd)
745 Case MENUID_GLYPH_X_64: glyph_x=64:Resize_Grids(hWnd)
746 'GLYPH_Y
747 Case MENUID_GLYPH_Y_4 : glyph_y= 4:Resize_Grids(hWnd)
748 Case MENUID_GLYPH_Y_8 : glyph_y= 8:Resize_Grids(hWnd)
749 Case MENUID_GLYPH_Y_10: glyph_y=10:Resize_Grids(hWnd)
750 Case MENUID_GLYPH_Y_12: glyph_y=12:Resize_Grids(hWnd)
751 Case MENUID_GLYPH_Y_14: glyph_y=14:Resize_Grids(hWnd)
752 Case MENUID_GLYPH_Y_16: glyph_y=16:Resize_Grids(hWnd)
753 Case MENUID_GLYPH_Y_18: glyph_y=18:Resize_Grids(hWnd)
754 Case MENUID_GLYPH_Y_20: glyph_y=20:Resize_Grids(hWnd)
755 Case MENUID_GLYPH_Y_22: glyph_y=22:Resize_Grids(hWnd)
756 Case MENUID_GLYPH_Y_24: glyph_y=24:Resize_Grids(hWnd)
757 Case MENUID_GLYPH_Y_26: glyph_y=26:Resize_Grids(hWnd)
758 Case MENUID_GLYPH_Y_28: glyph_y=28:Resize_Grids(hWnd)
759 Case MENUID_GLYPH_Y_30: glyph_y=30:Resize_Grids(hWnd)
760 Case MENUID_GLYPH_Y_32: glyph_y=32:Resize_Grids(hWnd)
761 Case MENUID_GLYPH_Y_48: glyph_y=48:Resize_Grids(hWnd)
762 Case MENUID_GLYPH_Y_64: glyph_y=64:Resize_Grids(hWnd)
763 '===================================================================
764 'drawing glyph ratios
765 case MENUID_RATIO_4 : ratio=4 : Resize_Grids(hWnd)
766 case MENUID_RATIO_6 : ratio=6 : Resize_Grids(hWnd)
767 case MENUID_RATIO_8 : ratio=8 : Resize_Grids(hWnd)
768 case MENUID_RATIO_10: ratio=10: Resize_Grids(hWnd)
769 '===================================================================
770 'COLORS
771 case MENUID_COLOR_BLACK : b_color=0
772 case MENUID_COLOR_BROWN : b_color=&H0b4080
773 case MENUID_COLOR_RED : b_color=&h0000aa
774 case MENUID_COLOR_ORANGE: b_color=&H0055ff
775 case MENUID_COLOR_YELLOW: b_color=&H00dada
776 case MENUID_COLOR_GREEN : b_color=&h00aa00
777 case MENUID_COLOR_BLUE : b_color=&haa0000
778 case MENUID_COLOR_VIOLET: b_color=&haa00aa
779 case MENUID_COLOR_WHITE : b_color=&Hffffff
780 '===================================================================
781 'CUSTOM COLORS
782 case MENUID_COLOR_CUSTOM
783 dim as CHOOSECOLOR cc
784 static as COLORREF customColors (0 to 15) = { &h00aaaaaa, &h00aaaaaa, _
785 &h00aaaaaa, &h00aaaaaa, _
786 &h00aaaaaa, &h00aaaaaa, _
787 &h00aaaaaa, &h00aaaaaa, _
788 &h00aaaaaa, &h00aaaaaa, _
789 &h00aaaaaa, &h00aaaaaa, _
790 &h00aaaaaa, &h00aaaaaa, _
791 &h00aaaaaa, &h00aaaaaa }
792 with cc
793 .lStructSize = sizeof(CHOOSECOLOR)
794 .lpCustColors = @customColors(0)
795 .Flags = CC_SOLIDCOLOR
796 end with
797 print ChooseColor( @cc )
798 b_color = (cc.rgbResult)
799 '===================================================================
800 case MENUID_HELP_ABOUT : MessageBox(hWnd,help_text,"Picto-Font Help",MB_OK)
801 end select
802 case else : return DefWindowProc( hWnd, message , wParam, lParam )
803 end select
804 return 0
805 end function
806 '===============================================================================
807 '===============================================================================
808 'WinMain
809 '===============================================================================
810 '===============================================================================
811 function WinMain ( byval hInstance as HINSTANCE, _
812 byval hPrevInstance as HINSTANCE, _
813 byref szCmdLine as string, _
814 byval iCmdShow as integer ) as integer
815 function = 0
816 dim appName as string = "Picto-Font"
817 dim wMsg as MSG
818 dim wcls as WNDCLASS
819 with wcls
820 .style = CS_HREDRAW or CS_VREDRAW
821 .lpfnWndProc = @WndProc
822 .cbClsExtra = 0
823 .cbWndExtra = 0
824 .hInstance = hInstance
825 .hIcon = LoadIcon( NULL, IDI_APPLICATION )
826 .hCursor = LoadCursor( NULL, IDC_ARROW )
827 .hbrBackground = GetStockObject( LTGRAY_BRUSH )
828 .lpszMenuName = NULL
829 .lpszClassName = strptr( appName )
830 end with
831 if( RegisterClass( @wcls ) = FALSE ) then
832 exit function
833 end if
834 ' Create window
835 hWnd = CreateWindowEx( 0, appname, _
836 "Picto-Font Version 9.0 Febuary | 2019", _
837 WS_OVERLAPPEDWINDOW, _
838 200, _
839 10, _
840 800, _
841 725, _
842 NULL, _
843 NULL, _
844 hInstance, _
845 NULL )
846
847 ShowWindow( hWnd, iCmdShow )
848 UpDateWindow( hWnd )
849 while( GetMessage( @wMsg, NULL, 0, 0 ) <> FALSE )
850 TranslateMessage( @wMsg )
851 DispatchMessage( @wMsg )
852 wend
853 function = wMsg.wParam
854 end function
855 '===============================================================================
856 '===============================================================================
857 sub getfilename()
858 dim ofn as OPENFILENAME
859 dim filename as zstring * MAX_PATH+1
860 with ofn
861 .lStructSize = sizeof( OPENFILENAME )
862 .hwndOwner = hWnd
863 .hInstance = GetModuleHandle( NULL )
864
865 if file_type="pft" then .lpstrFilter = strptr( !"Picto-Font Files , (*.pft)\0*.pft\0\0")
866 if file_type="bmp" then .lpstrFilter = strptr( !"BitMap Files , (*.bmp)\0*.bmp\0\0")
867
868 .lpstrCustomFilter = NULL
869 .nMaxCustFilter = 0
870 .nFilterIndex = 1
871 .lpstrFile = @filename
872 .nMaxFile = sizeof( filename )
873 .lpstrFileTitle = NULL
874 .nMaxFileTitle = 0
875 .lpstrInitialDir = NULL
876 .lpstrTitle = @"Save File"
877 .Flags = OFN_EXPLORER 'or OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST
878 .nFileOffset = 0
879 .nFileExtension = 0
880 .lpstrDefExt = NULL
881 .lCustData = 0
882 .lpfnHook = NULL
883 .lpTemplateName = NULL
884 end with
885 if( GetOpenFileName( @ofn ) = FALSE ) then
886 file = ""
887 return
888 else
889 dim ext as string
890 ext = right$(filename,4)
891 if file_type="pft" then
892 if ext <> ".pft" then
893 filename = filename + ".pft"
894 end if
895 end if
896 if file_type="bmp" then
897 if ext <> ".bmp" then
898 filename = filename + ".bmp"
899 end if
900 end if
901
902 file = filename
903
904 endif
905 end sub
906 '===============================================================================
907 '===============================================================================
908 'menu stuff below here
909 '===============================================================================
910 '===============================================================================
911 sub menu_insert( byval hmenu as HMENU, byval submenu as integer, byref title as string, byval flags as integer = 0 )
912 with submenuTB(submenu)
913 .hnd = CreatePopupMenu( )
914 InsertMenu( hmenu, submenu, MF_BYPOSITION Or MF_POPUP Or MF_STRING or flags, cuint( .hnd ), title )
915 end with
916 end sub
917 '===============================================================================
918 sub menu_append( byval submenu as integer, byval id as integer, byref title as string, byval flags as integer = 0 )
919 AppendMenu( submenuTB(submenu).hnd, MF_STRING or flags, id, title )
920 end sub
921 '===============================================================================
922 sub menu_separator( byval submenu as integer )
923 AppendMenu( submenuTB(submenu).hnd, MF_SEPARATOR, 0, NULL )
924 end sub
925 '===============================================================================
926 sub init_menus( byval hWnd as HWND )
927 dim menu as HMENU
928 menu = CreateMenu( )
929 'File
930 menu_insert( menu, 0, "&File" )
931 menu_append( 0, MENUID_FILE_CLEAR, "&CLEAR-GLYPH" )
932 menu_append( 0, MENUID_FILE_OPEN, "&Open")
933 menu_separator( 0 )
934 menu_append( 0, MENUID_FILE_SAVE, "&Save")
935 menu_append( 0, MENUID_FILE_SAVE_AS_BMP , "&Save as BMP")
936 menu_separator( 0 )
937 menu_append( 0, MENUID_FILE_SAVE_INPUT_AS_BMP , "&Save Input as BMP")
938 menu_separator( 0 )
939 menu_append( 0, MENUID_FILE_EXIT, "&Exit" )
940 'brush_size_01's
941 menu_insert(menu, 1, "&Brush Size 1's")
942 menu_append( 1,MENUID_BRUSH_SIZE_0_ZERO, "RESET ONES" )
943 menu_append( 1,MENUID_BRUSH_SIZE_0_1 , "1%" )
944 menu_append( 1,MENUID_BRUSH_SIZE_0_2 , "2%" )
945 menu_append( 1,MENUID_BRUSH_SIZE_0_3 , "3%" )
946 menu_append( 1,MENUID_BRUSH_SIZE_0_4 , "4%" )
947 menu_append( 1,MENUID_BRUSH_SIZE_0_5 , "5%" )
948 menu_append( 1,MENUID_BRUSH_SIZE_0_6 , "6%" )
949 menu_append( 1,MENUID_BRUSH_SIZE_0_7 , "7%" )
950 menu_append( 1,MENUID_BRUSH_SIZE_0_8 , "8%" )
951 menu_append( 1,MENUID_BRUSH_SIZE_0_9 , "9%" )
952 'brush_size_10's
953 menu_insert(menu, 2, "&Brush Size 10's")
954 menu_append( 2,MENUID_BRUSH_SIZE_ZERO_0, "RESET TENS" )
955 menu_append( 2,MENUID_BRUSH_SIZE_1_0 , "10%" )
956 menu_append( 2,MENUID_BRUSH_SIZE_2_0 , "20%" )
957 menu_append( 2,MENUID_BRUSH_SIZE_3_0 , "30%" )
958 menu_append( 2,MENUID_BRUSH_SIZE_4_0 , "40%" )
959 menu_append( 2,MENUID_BRUSH_SIZE_5_0 , "50%" )
960 menu_append( 2,MENUID_BRUSH_SIZE_6_0 , "60%" )
961 menu_append( 2,MENUID_BRUSH_SIZE_7_0 , "70%" )
962 menu_append( 2,MENUID_BRUSH_SIZE_8_0 , "80%" )
963 menu_append( 2,MENUID_BRUSH_SIZE_9_0 , "90%" )
964 'glyph_x
965 menu_insert(menu, 3, "&Glyph X Size")
966 menu_append(3,MENUID_GLYPH_X_4 ,"&4")
967 menu_append(3,MENUID_GLYPH_X_8 ,"&8")
968 menu_append(3,MENUID_GLYPH_X_10,"&10")
969 menu_append(3,MENUID_GLYPH_X_12,"&12")
970 menu_append(3,MENUID_GLYPH_X_14,"&14")
971 menu_append(3,MENUID_GLYPH_X_16,"&16")
972 menu_append(3,MENUID_GLYPH_X_18,"&18")
973 menu_append(3,MENUID_GLYPH_X_20,"&20")
974 menu_append(3,MENUID_GLYPH_X_22,"&22")
975 menu_append(3,MENUID_GLYPH_X_24,"&24")
976 menu_append(3,MENUID_GLYPH_X_26,"&26")
977 menu_append(3,MENUID_GLYPH_X_28,"&28")
978 menu_append(3,MENUID_GLYPH_X_30,"&30")
979 menu_append(3,MENUID_GLYPH_X_32,"&32")
980 menu_append(3,MENUID_GLYPH_X_48,"&48")
981 menu_append(3,MENUID_GLYPH_X_64,"&64")
982 'glyph_y
983 menu_insert(menu, 4, "&Glyph Y Size")
984 menu_append(4,MENUID_GLYPH_Y_4 ,"&4")
985 menu_append(4,MENUID_GLYPH_Y_8 ,"&8")
986 menu_append(4,MENUID_GLYPH_Y_10,"&10")
987 menu_append(4,MENUID_GLYPH_Y_12,"&12")
988 menu_append(4,MENUID_GLYPH_Y_14,"&14")
989 menu_append(4,MENUID_GLYPH_Y_16,"&16")
990 menu_append(4,MENUID_GLYPH_Y_18,"&18")
991 menu_append(4,MENUID_GLYPH_Y_20,"&20")
992 menu_append(4,MENUID_GLYPH_Y_22,"&22")
993 menu_append(4,MENUID_GLYPH_Y_24,"&24")
994 menu_append(4,MENUID_GLYPH_Y_26,"&26")
995 menu_append(4,MENUID_GLYPH_Y_28,"&28")
996 menu_append(4,MENUID_GLYPH_Y_30,"&30")
997 menu_append(4,MENUID_GLYPH_Y_32,"&32")
998 menu_append(4,MENUID_GLYPH_Y_48,"&48")
999 menu_append(4,MENUID_GLYPH_Y_64,"&64")
1000 'brush color
1001 menu_insert( menu, 5, "&Brush_Color" )
1002 menu_append(5,MENUID_COLOR_BLACK , "&Black" )
1003 menu_append(5,MENUID_COLOR_BROWN , "&Brown" )
1004 menu_append(5,MENUID_COLOR_RED , "&Red" )
1005 menu_append(5,MENUID_COLOR_ORANGE, "&Orange")
1006 menu_append(5,MENUID_COLOR_YELLOW, "&Yellow")
1007 menu_append(5,MENUID_COLOR_GREEN , "&Green" )
1008 menu_append(5,MENUID_COLOR_BLUE , "&Blue" )
1009 menu_append(5,MENUID_COLOR_VIOLET, "&Violet")
1010 menu_append(5,MENUID_COLOR_WHITE , "&White" )
1011 menu_separator( 5 )
1012 menu_append(5,MENUID_COLOR_CUSTOM, "&Custom")
1013 'ratio
1014 menu_insert(menu, 6, "&Glyph_Ratio")
1015 menu_append(6,MENUID_RATIO_4 , "&4" )
1016 menu_append(6,MENUID_RATIO_6 , "&6" )
1017 menu_append(6,MENUID_RATIO_8 , "&8" )
1018 menu_append(6,MENUID_RATIO_10 , "&10" )
1019 'help
1020 menu_insert( menu, 7, "&HELP" )
1021 menu_append( 7 ,MENUID_HELP_ABOUT , "&About" )
1022 '===============================================================================
1023 SetMenu( hWnd, menu )
1024 DrawMenuBar( hWnd )
1025 end sub