お世話になります、まかろにです。
連続書き込みっぽくてすいませんです。
エディットボックスについての質問ですが
マウスでエディットボックスを選択した際
そこに表示されてる値を一気に全選択したいのです。
(IEのアドレス部分を選択したときに青く全選択状態になりますよね?
あんな感じで)
それにはどのようにすればよいのでしょうか?
よろしくお願い致します。
すいません。開発環境を書き忘れていました。
WindowsXP VC++6.0 MFC です。
WM_SETFOCUSでEM_SETSELすればよいと思います。
MFCの場合は
OnSetfocusでSetSelすればよいかと
レスありがとうございます。
早速試してみたのですが…うまくいきません。
CEdit* p_edit = (CEdit *)GetDlgItem(IDC_EDIT1);
p_edit->SetSel(0, -1);
としているのですが。
ちなみに、GetSel()を試してみたところ、先頭位置・終了位置共に
0が返ってきました。
このエディットボックスはダイアログバーに置かれているのですが
その辺りも関係あったりするのでしょうか?
p_edit->SetWindowText(…);
などは普通に動いてくれているのですが。
よろしくお願いします。
自己レス申し訳ないです。
GetSel() に関してはちょっと勘違いしてました、すいません。
しかし、SetSel() は相変わらずうまくいきません。
マニュアルには 先頭0で最後をー1に指定したら全選択と書いてあるのですがね。
念のため LineLength() とかしてみたら、ちゃんと返ってきていました
( コントロールのテキストが初期値は 0.0000000 なので 長さ8 という感じで )
ご助言よろしくお願いします。
p_edit->SetSel(0, -1);
の前に
m_edit->SetFocus();
を入れてみては?
レスありがとうございます。
SetFocus() を直前に入れてみたのですが、変わりませんでした。
報告だけですいません…
エディットのクリックイベント処理はこんな風になっています。
# イメージです。
void CEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
if (フォーカスがない) {
フォーカスをセット(WM_SETFOCUS発生);
}
クリックした位置にカレットを移動;
}
なので、OnSetFocusでカレット位置を調整しても意味がありません。
エディットをサブクラス化して
OnLButtonDownを独自のものに変更する必要があるでしょう。
失礼いたしました。
dairygoodsさんのが、正解です。
お手間を取らせまして、すみませんでした。
レスありがとうございます。
返事が遅れて申し訳ありません。
dairygoods さんの言われる、エディットをサブクラス化して
OnLButtonDownを独自のものに変更する というのが
若干ピンとこないので、詳しく説明していただいてもよろしいでしょうか?
お手数おかけしますが、よろしくお願いいたします。
> 若干ピンとこないので、詳しく説明していただいてもよろしいでしょうか?
とりあえず、「サブクラス化」について調べてみてください。
# どこまでピンと来るのか教えていただけると、
# ありがたいのですが。
レスありがとうございます。
とりあえずサブクラス化というものを勉強してみます。
その上で何かありましたら、また質問させていただきます。
結果も報告させていただきますので、未解決ということで・・・