> 上記ソースを実行、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変換候補ウインドウを左にずらす
という処理を行っています