Displaying+Unicode+text+in+a+control

//by Richard Russell, February 2012//

Versions 1.80 and later of [|LB Booster] provide built-in support to output Unicode text to the mainwin, and to the printer using LPRINT, but not to GUI controls. In the case of controls **other than** a TEXTEDITOR it is quite easy to support Unicode output using a little API code.

Below is listed a program to illustrate displaying Cyrillic text in a STATICTEXT control. The **SetTextUnicode** subroutine can also be used with a BUTTON, a CHECKBOX, a GROUPBOX, a RADIOBUTTON or a TEXTBOX (ensure that you select **Unicode Support** in the Options menu): code format="lb" global CP.UTF8 CP.UTF8 = hexdec("FDE9") nomainwin

statictext #w.s1, "", 10, 10, 300, 100 open "Unicode test" for window as #w hws1 = hwnd(#w.s1) call SetTextUnicode hws1, "Это демонстрация российского текста" wait
 * 1) w "trapclose [quit]"
 * 2) w "font Times_New_Roman 20"

[quit] close #w end

sub SetTextUnicode hwin, utf8$ calldll #kernel32, "MultiByteToWideChar", _ CP.UTF8 as long, 0 as long, _ utf8$ as ptr, -1 as long, _ 0 as long, 0 as long, ret as long bytes = 2 * ret calldll #kernel32, "GlobalAlloc", 0 as long, _ bytes as long, wide as long calldll #kernel32, "MultiByteToWideChar", _ CP.UTF8 as long, 0 as long, _ utf8$ as ptr, -1 as long, _ wide as long, ret as long, ret as long calldll #user32, "SendMessageW", _ hwin as long, _WM_SETTEXT as long, _ 0 as long, wide as long, ret as long calldll #kernel32, "GlobalFree", wide as long, _ ret as long end sub code