|
|
2012/2/26(Sun) 15:06:26|NO.45065
UnicodeのCJK統合漢字にある文字を表示させたいのですが,
DrawTextWを使って以下のようにしたのですが化けてしまいます。
#uselib "user32"
#func global DrawTextW "DrawTextW" wptr,wptr,wptr,wptr,wptr
font "メイリオ", 24
wpoke lpString, 0, 134071
lpRect = 0, 0, ginfo_winx, ginfo_winy
DrawTextW hDC, varptr(lpString), -1, varptr(lpRect), 0
//http://msdn.microsoft.com/ja-jp/library/cc428474.aspx
redraw 1 //自動で再描画されない
pos 24, 0
mes "野家"
stop
(例は𠮷野家)
Unicodeのやたらマニアックな領域にある文字ですし,HSP上で表示するのは無理でしょうか?
|
|
2012/2/26(Sun) 16:57:44|NO.45067
/*二文字だから*/
#uselib "user32"
#func global DrawTextW "DrawTextW" wptr,wptr,wptr,wptr,wptr
font "メイリオ", 24
cnvstow w1,"野"
cnvstow w2,"家"
wpoke lpString, 0,w1
wpoke lpString, 2,w2
; wpoke lpString, 0, 134071
lpRect = 0, 0, ginfo_winx, ginfo_winy
DrawTextW hDC, varptr(lpString), -1, varptr(lpRect), 0
//http://msdn.microsoft.com/ja-jp/library/cc428474.aspx
redraw 1 //自動で再描画されない
pos 48, 0
mes "野家"
stop
|
|
2012/2/26(Sun) 20:04:54|NO.45073
𠮷野家の「𠮷」(俗に言う「つちよし」)の字を表示させたいのです…
あ,Windows Vista以降,もしくはXP以前でメイリオフォントが必要です。
|
|
2012/2/26(Sun) 20:35:43|NO.45074
私もよく分かっていないのですが、
どうやら U+????? の様な5桁のコードはサロゲートペアが必要なため
IME パッド の 文字一覧 で言う UTF-16 の方を指定する必要が有るみたいです。
#uselib "user32"
#func global DrawTextW "DrawTextW" wptr,wptr,wptr,wptr,wptr
font "メイリオ", 24
cnvstow lpString, "・・野家"
wpoke lpString, 0, 0xD842
wpoke lpString, 2, 0xDFB7
lpRect = 0, 0, ginfo_winx, ginfo_winy
DrawTextW hDC, varptr(lpString), -1, varptr(lpRect), 0
redraw
|
|
2012/2/26(Sun) 20:44:44|NO.45076
ああ,サロゲートペア拡張のキャラクターでしたね。
ありがとうございました。
|
|
2012/2/26(Sun) 21:18:48|NO.45080
すでに解決されていますが、
サロゲートペアを書き込むプログラム例を作ったので貼っておきます。
#module
//上位サロゲートを作成
#defcfunc getHighSurrogate int x
return( (((x >> 16) - 1) << 6) | ((x >> 10) & 0x3F) | 0xD800 )
//下位サロゲートを作成
#defcfunc getLowSurrogate int x
return((x & 0x3FF) | 0xDC00)
//サロゲートペア処理が必要かどうか
#defcfunc isSurrogatePair int x
return(0x10000 <= x)
//UnicodeをUTF-16エンコーディングでかきこむ
#deffunc pokeunicode var data,int offset,int x
if(isSurrogatePair(x)) {
wpoke data, offset, getHighSurrogate(x)
wpoke data, offset + 2, getLowSurrogate(x)
return 4
} else {
wpoke data, offset, x
return 2
}
return
#global
#uselib "user32"
#func global DrawTextW "DrawTextW" wptr,wptr,wptr,wptr,wptr
font "メイリオ", 24
pokeunicode lpString, 0, 134071
lpRect = 0, 0, ginfo_winx, ginfo_winy
DrawTextW hDC, varptr(lpString), -1, varptr(lpRect), 0
//http://msdn.microsoft.com/ja-jp/library/cc428474.aspx
redraw 1 //自動で再描画されない
pos 24, 0
mes "野家"
stop
|
|
2012/3/17(Sat) 14:55:05|NO.45456
チェック忘れ,age申し訳ない
|
|