HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0226
れみはるCJK統合漢字の表示6解決


れみはる

リンク

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上で表示するのは無理でしょうか?



この記事に返信する


fortunehill

リンク

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以前でメイリオフォントが必要です。



osakana

リンク

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申し訳ない



ONION software Copyright 1997-2021(c) All rights reserved.