エディットボックスの全選択

[戻る]
まかろに 2004/11/05(金) 15:00:41
お世話になります、まかろにです。
連続書き込みっぽくてすいませんです。

エディットボックスについての質問ですが
マウスでエディットボックスを選択した際
そこに表示されてる値を一気に全選択したいのです。
 (IEのアドレス部分を選択したときに青く全選択状態になりますよね?
  あんな感じで)
それにはどのようにすればよいのでしょうか?

よろしくお願い致します。

まかろに 2004/11/05(金) 15:02:22
すいません。開発環境を書き忘れていました。

WindowsXP VC++6.0 MFC です。

たく [E-Mail] 2004/11/05(金) 15:20:54
WM_SETFOCUSでEM_SETSELすればよいと思います。
MFCの場合は
OnSetfocusでSetSelすればよいかと

まかろに 2004/11/05(金) 18:00:48
レスありがとうございます。

早速試してみたのですが…うまくいきません。

CEdit*    p_edit = (CEdit *)GetDlgItem(IDC_EDIT1);

p_edit->SetSel(0, -1);

としているのですが。
ちなみに、GetSel()を試してみたところ、先頭位置・終了位置共に
0が返ってきました。
このエディットボックスはダイアログバーに置かれているのですが
その辺りも関係あったりするのでしょうか?

p_edit->SetWindowText(…);
などは普通に動いてくれているのですが。

よろしくお願いします。

まかろに 2004/11/05(金) 18:34:45
自己レス申し訳ないです。

GetSel() に関してはちょっと勘違いしてました、すいません。
しかし、SetSel() は相変わらずうまくいきません。
マニュアルには 先頭0で最後をー1に指定したら全選択と書いてあるのですがね。
念のため LineLength() とかしてみたら、ちゃんと返ってきていました
( コントロールのテキストが初期値は 0.0000000 なので 長さ8 という感じで )

ご助言よろしくお願いします。

へろ 2004/11/05(金) 19:40:59
p_edit->SetSel(0, -1);
の前に

m_edit->SetFocus();
を入れてみては?

まかろに 2004/11/05(金) 19:52:41
レスありがとうございます。

SetFocus() を直前に入れてみたのですが、変わりませんでした。
報告だけですいません…

dairygoods 2004/11/08(月) 11:58:22
エディットのクリックイベント処理はこんな風になっています。
# イメージです。

void CEdit::OnLButtonDown(UINT nFlags, CPoint point) 
{
  if (フォーカスがない) {
    フォーカスをセット(WM_SETFOCUS発生);
  }
  クリックした位置にカレットを移動;
}
なので、OnSetFocusでカレット位置を調整しても意味がありません。

エディットをサブクラス化して
OnLButtonDownを独自のものに変更する必要があるでしょう。

たく [E-Mail] 2004/11/08(月) 15:09:56
失礼いたしました。
dairygoodsさんのが、正解です。
お手間を取らせまして、すみませんでした。

まかろに 2004/11/09(火) 10:28:01
レスありがとうございます。
返事が遅れて申し訳ありません。

dairygoods さんの言われる、エディットをサブクラス化して
OnLButtonDownを独自のものに変更する というのが
若干ピンとこないので、詳しく説明していただいてもよろしいでしょうか?

お手数おかけしますが、よろしくお願いいたします。

dairygoods 2004/11/09(火) 11:37:24
> 若干ピンとこないので、詳しく説明していただいてもよろしいでしょうか?

とりあえず、「サブクラス化」について調べてみてください。

# どこまでピンと来るのか教えていただけると、
# ありがたいのですが。

まかろに 2004/11/10(水) 16:52:28
レスありがとうございます。

とりあえずサブクラス化というものを勉強してみます。
その上で何かありましたら、また質問させていただきます。
結果も報告させていただきますので、未解決ということで・・・

古いスレッドには追加発言できません。