トップページ > 記事閲覧
DrawKeyInputStringについて
名前:wstn 日時: 2016/01/08 20:08

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ ChangeWindowMode(TRUE); SetGraphMode( 640, 480, 16 ); DxLib_Init(); SetFontSize( 80 ); SetFontSpace(0); SetFontCharCodeFormat(DX_CHARCODEFORMAT_UTF8); int hnd=MakeKeyInput(123,0,0,0); SetActiveKeyInput(hnd); SetKeyInputString( "abcdefg", hnd ); while(ProcessMessage()!=-1){ SetDrawScreen(DX_SCREEN_BACK); SetDrawArea( 0, 185, 320, 185 + 80 + 10 ); ClearDrawScreen(); DrawKeyInputString(0,185,hnd); ScreenFlip(); } return DxLib_End(); } 上記ソースを実行、IME-ONにして入力変換すると 入力中及び変換中の文字が切れて見えなくなってしまうのですが 右端までスクロール?する方法は無いでしょうか。 ※確定後は文字列右端までスクロール?して見えます。 変換文字列下線も左にズレているようです。 Win10、DXライブラリ v3.15e/v3.16 で同じ状況です。 又、IME変換候補ウィンドウの位置がディスプレイ右下角に貼り付いてしまい http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=3231 の通りにしても位置が変わらないのですが当時と仕様が変わったのでしょうか。
メンテ

Page: 1 |

Re: DrawKeyInputStringについて ( No.1 )
名前:管理人 日時:2016/01/10 03:01

> 上記ソースを実行、IME-ONにして入力変換すると > 入力中及び変換中の文字が切れて見えなくなってしまうのですが > 右端までスクロール?する方法は無いでしょうか。 IME入力中の文字列についてはスクロール処理に対応していないのですが、 こちらもスクロールに対応するのは若干対応に時間が掛かるので、 別のアプローチで解決するための機能を追加しました よろしければその機能を追加したこちらのバージョンをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 上記のバージョンでは以下の関数を追加しました // 文字列入力ハンドルの入力中文字列を描画する際の描画範囲を設定する int SetKeyInputDrawArea( int x1, int y1, int x2, int y2, int InputHandle ) ; SetDrawArea( 0, 185, 320, 185 + 80 + 10 ); で入力文字列の描画範囲を 制限されていますが、現在の仕様では ・入力中文字列 ・IME入力中文字列 ・IME変換候補 の3つ全てが SetDrawArea で指定された範囲内に表示しようとするので、 SetDrawArea で指定する範囲が狭いと本件のように表示上の不都合が発生します 対して、SetKeyInputDrawArea を使用して描画範囲を設定した場合、 ・入力中文字列 だけが SetKeyInputDrawArea で指定した範囲内に表示しようとするので、その他の ・IME入力中文字列 ・IME変換候補 については SetKeyInputDrawArea で指定した範囲に制限されずに表示されるようになります これで本件の表示上の不都合を解決できると思いますので、よろしければ試してみてください m(_ _;m 因みに載せていただいたプログラムを SetKeyInputDrawArea を使用する方式に変更した場合は 以下のようになります #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ ChangeWindowMode(TRUE); SetGraphMode( 640, 480, 16 ); DxLib_Init(); SetFontSize( 80 ); SetFontSpace(0); SetFontCharCodeFormat(DX_CHARCODEFORMAT_UTF8); int hnd=MakeKeyInput(123,0,0,0); SetActiveKeyInput(hnd); SetKeyInputString( "abcdefg", hnd ); SetKeyInputDrawArea( 0, 185, 320, 185 + 80 + 10, hnd ) ; while(ProcessMessage()!=-1){ SetDrawScreen(DX_SCREEN_BACK); ClearDrawScreen(); DrawKeyInputString(0,185,hnd); ScreenFlip(); } return DxLib_End(); } > 変換文字列下線も左にズレているようです。 ご指摘ありがとうございます、修正しました > 又、IME変換候補ウィンドウの位置がディスプレイ右下角に貼り付いてしまい > http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=3231 > の通りにしても位置が変わらないのですが当時と仕様が変わったのでしょうか。 いえ、仕様は当時と変わらず「SetDrawArea の範囲内に収めようとする」です ・初期位置ではIME変換候補ウインドウの下端が SetDrawArea の範囲から外れてしまう  場合はIME変換候補ウインドウを上にずらす ・初期位置ではIME変換候補ウインドウの右端が SetDrawArea の範囲から外れてしまう  場合はIME変換候補ウインドウを左にずらす という処理を行っています
メンテ
Re: DrawKeyInputStringについて ( No.2 )
名前:wstn_(解決) 日時:2016/01/10 12:00

ありがとうございます。 提供頂きましたテストバージョンで所望の挙動となる事を確認しました。 又、IME変換候補ウィンドウの件ですが、 Win7 でも動かしてみましたところWin10と挙動が違う事が判りました。 WIN7 :DXライブラリ側で描画。仕様通り。 WIN10:SetDrawAreaに関わらずWindows側が別ウインドウで表示。※DXライブラリ側は描画無 Win10はこのままでも見切れる事はない為、解決入れておきました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存