キー入力状態のエディトボックスからフォーカスを奪いたい – プログラミング – Home

キー入力状態のエディトボックスからフォ...
 
通知
すべてクリア

[解決済] キー入力状態のエディトボックスからフォーカスを奪いたい


ソイレントグリーン
 ソイレントグリーン
(@ソイレントグリーン)
ゲスト
結合: 17年前
投稿: 65
Topic starter  

何時もお世話になっております、宜しくお願いします。

プログラムは、①~③の状態で遷移をします
① 親ダイアログ上で、キー入力(0~9)あり
② DoModal()でエディトボックス(サブクラス有り)を持つ、子ダイアログが起動
③ 最初に入力した、数字にフォーカスを当て、キー入力状態となる

【環境】
Windows XP SP-2 / VisualStudio2005 / MFC

【問題点】
最初に入力した一文字に、フォーカスが、かかってしまい、実際に文字が、
入力されるのは二文字目以降となってしまいます。

【このようにしたい】
最初に入力した、一文字目にフォーカスを与えず、且つ、カーソル位置は、
一文字の直後におき、即二文字目を入力可能な状態にしたい。

このように動作させることは、可能でしょうか?
もし可能であれば、方法をご教示願えないでしょうか。


引用未解決
トピックタグ
ソイレントグリーン
 ソイレントグリーン
(@ソイレントグリーン)
ゲスト
結合: 17年前
投稿: 65
Topic starter  

【訂正】
フォーカスと表現していますが、正しくは文字が反転した状態のことです、
上手く説明できなくてごめんなさい。


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

EM_SETSEL (CEdit::SetSel) でできます。


返信引用
ソイレントグリーン
 ソイレントグリーン
(@ソイレントグリーン)
ゲスト
結合: 17年前
投稿: 65
Topic starter  

RAPTさん、いつもお世話になっております。
エディットボックスをサブクラス化した部分の、メッセージハンドラを受ける部分で、
下記の様に実装しましたら、一文字目は反転表示されていますが、
続けてキー入力を行うと、一文字目の反転が解除されて、
直後に二文字目を入力することが、できました。

先に【このようにしたい】で書きました、振舞いとは若干異なりますが、
十分に目的を果たすことができました、どうもありがとうございました。

// コンストラクタ
CNumberEditBox::CNumberEditBox() : dwSelection(-1), bNoScroll(FALSE)
{
}

// CNumberEditBox メッセージ ハンドラ

void CNumberEditBox::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {
CEdit::SetSel(dwSelection, bNoScroll);
SetLimitText( 4 );
if( nChar == VK_BACK ||
nChar == VK_DELETE ||
nChar == VK_TAB )
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
return;
}
// 0~9以外の場合は、何も行わずに終了。
// 0~9までは、既存のハンドラ呼び出し。
if( !( nChar >= '0' && nChar <= '9') )
{
return;
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

SetSel で開始位置、終了位置ともに、現在入力されてる文字の長さを与えてやる
ことで、選択範囲なし・カーソルは末尾、という状態を実現できます。

たとえば、現在入力されている文字が1文字であれば、SetSel( 1, 1, TRUE ); とか。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました