Re: キー入力中のマウスによる操作 ( No.1 ) |
- 名前:管理人 日時:2014/07/28 01:13
> Dxlibでキー入力を行う際に、マウスでカーソルの位置を変更したり、
> 範囲選択を行ったり、ポップアップメニューを出してコピペ操作ができたりすることは可能でしょうか?
はい
> ポップアップメニューは自前でやることで可能な気がしますが、マウスによる範囲選択などは当たり判定も含め
> 難しいように思います。
WindowsOSの機能としてのポップアップメニューを扱う機能はDXライブラリにはないので
DXライブラリの描画機能を使用した独自のポップアップメニュー処理を実装していただくか、
WindowsOSのポップアップメニュー機能を扱うプログラムを独自に実装していただく必要がありますが、
挙げていただいた処理については現状のDXライブラリでも実現可能です
> 何か方法がありましたら教えてください。
選択処理やコピペ操作処理やポップアップメニュー処理を行うプログラムをそれぞれ組んでいただければ
実現可能なのですが、何か不明な点があるのでしょうか?
|
Re: キー入力中のマウスによる操作 ( No.2 ) |
- 名前:だんごさん(解決) 日時:2014/07/28 02:22
申し訳ないです。
何も考えず質問だけしてしまいました。
カーソル位置を設定したり選択状態にする関数があることを
調べずに投稿してしまいました。
失礼しました。
|
Re: キー入力中のマウスによる操作 ( No.3 ) |
- 名前:管理人 日時:2014/07/28 03:44
すみません、後から読み返して勘違いしていたことに気がつきました
「キー入力」が「MakeKeyInputによる文字列入力」のことを指していることに気付かず、
「独自に行っているエディタ的処理について、編集処理をキー入力とマウス入力両方で行えないか?」という主旨のご質問かと思い
「意図した動作をするようにプログラムを組めば実現できます」という漠然としたご返答をしていました
MakeKeyInput を使用した文字列入力について範囲選択やコピペ操作をマウスで行うようにすることができるかどうか?
というご質問だったのですね、失礼しました
リファレンスには在りませんが以下の関数で入力中の文字列の選択範囲を指定したり取得したりすることができます
// キー入力ハンドルの指定の領域を選択状態にする
// ( SelectStart と SelectEnd に -1 を指定すると選択状態が解除されます )
int SetKeyInputSelectArea( int SelectStart, int SelectEnd, int InputHandle ) ;
// キー入力ハンドルの選択領域を取得する
int GetKeyInputSelectArea( int *SelectStart, int *SelectEnd, int InputHandle ) ;
マウスで選択している文字の位置は、面倒ですが GetKeyInputString で取得できる
入力中の文字列の各文字がどの座標にあるかを1文字づつ GetDrawStringWidth で
調べることで一応判定することができます
「コピー」は選択範囲の文字列をクリップボードに格納する処理ですが、それは
GetKeyInputString で取得した文字列から GetKeyInputSelectArea で取得できる
部分だけを抜き出した文字列を以下のクリップボードに文字列を格納したり
取得したりするための関数を使用することで実現可能です
// クリップボードに格納されているテキストデータを読み出す
// ( DestBuffer:文字列を格納するバッファの先頭アドレス
// 戻り値 -1:クリップボードにテキストデータが無い
// -1以外:クリップボードに格納されている文字列データのサイズ( 単位:byte ) )
int GetClipboardText( char *DestBuffer ) ;
// クリップボードにテキストデータを格納する
int SetClipboardText( char *Text ) ;
「貼り付け」は GetClipboardText で取得した文字列を、GetKeyInputString で取得できる
文字列に対して以下のカーソルの位置を取得する関数 GetKeyInputCursorPosition で取得した
位置に挿入した文字列を SetKeyInputString で設定すれば実現可能です
// キー入力ハンドルの現在のカーソル位置を設定する
int SetKeyInputCursorPosition( int Position, int InputHandle ) ;
// キー入力ハンドルの現在のカーソル位置を取得する
int GetKeyInputCursorPosition( int InputHandle ) ;
「カット」についてですが、GetKeyInputString で取得できる文字列から
GetKeyInputSelectArea で取得できる選択範囲の文字列を抜き出し、抜き出した文字列を
SetClipboardText でクリップボードに、抜き出された後の文字列を SetKeyInputString で
入力中文字列としてセットするという形で実現できます
という感じでかなり泥臭い処理となってしまいますが、一応現状の機能だけでも実現可能です・・・ (- -;;
|
Re: キー入力中のマウスによる操作 ( No.4 ) |
- 名前:だんごさん 日時:2014/08/02 01:18
書き方が悪く申し訳ありませんでした。
現在カーソル位置の変更を行う関数を作っているのですが、
単純に文字列幅から文字数を割って、マウス座標を1文字分で割ることで設定でき
たのですが、全角半角の判定が行われないので混在している場合
とても面倒な処理になりそうです…。
とりあえず、何かありましたらまたご相談させていただきます。
|
Re: キー入力中のマウスによる操作 ( No.5 ) |
- 名前:だんごさん(解決) 日時:2014/10/03 18:46
すみません、マウスによる処理を書くよりもソフト自体のプログラムを優先していたので
今のところ手を付けていない状態です。
これからも自分で処理を書く見通しがありませんので、勝手ながら意見ということでお願いいたします。
|