エディットボックスのフォーカス取得を禁止したい。

[戻る]
なべ [E-Mail] 2002/06/20(木) 16:04:02
シリアル通信の送受信データをエディットボックスへ表示するプログラムを作成しています。

エディットボックスは、プロパティで「読み取り専用」をクリックしているのですが、エディットボックス上でマウス
をクリックするとカーソル位置はその位置へ移動してしまう様で、次の送受信データをその位置に書き込
んでしまいます。

フォーカスの取得を禁止すればいいのかな?と思っているのですが、その方法が解りません。
EnableWindow(FALSE)とすれば一応目的は達成されるのですがグレー表示になってしまい、うま
くありません。

ちなみに、データの表示は送受信時にReplaseSelを使用してテキストデータとして書き足しています。

開発環境は、VisualC++ 6.0 でダイアログベースのプログラムです。

ご多忙中申し訳ありませんが、宜しくご指導の程、御願い致します。

yas0302 2002/06/20(木) 17:37:33

BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
    if( pMsg->hwnd == m_edit1.m_hWnd )
    {    
        if( pMsg->message == WM_LBUTTONDOWN || 
            pMsg->message == WM_RBUTTONDOWN
            )
        {
            return TRUE ;
        }
    }
    return CDialog::PreTranslateMessage(pMsg);
}

こんなん、どーでしょう?
他に、もっといい方法がありそうですが。。。

dairygoods 2002/06/20(木) 17:45:31
ReplaseSelの直前に、
SetSelでカーソルを最後に持っていくのではダメでしょうか?

なべ [E-Mail] 2002/06/20(木) 17:57:46
dairygoodsさん

私もその方法を試みたのですが、最終のカーソル位置を指定するにはどうすれば良いのでしょ
う?

int n;

m_ed1.GetWindowText(ss);
n = ss.GetLength();
m_ed1.SetSel(n,n);

とやったら、うまくいきませんでした。
使い方おかしいですか?

dairygoods 2002/06/20(木) 18:25:24
> m_ed1.GetWindowText(ss);
> n = ss.GetLength();
> m_ed1.SetSel(n,n);
>
> とやったら、うまくいきませんでした。

正しいように見えますが、どうなってしまうのでしょう?

なべ [E-Mail] 2002/06/20(木) 18:46:54
[[解決]]
お騒がせしました。
ただのコーディングミスでした。

掲題の問題は、yas0302さんに教わった方法で対策し、dairygoodsさんに教わった方法は別件
の対策でそれぞれ利用させて頂くことにしました。

今回は、色々と勉強になりました。

ありがとうございました。

駄犬 [E-Mail] 2002/06/20(木) 18:51:01
エディットボックスである必要がなければ、スタティックコントロールを使う手もありかと。

なべ [E-Mail] 2002/06/20(木) 20:17:52
ご意見ありがとうございます。

しかし、スクロールバーを使用したいのでNGだと思います。

スタティックコントロールでは、スクロールバー付きませんよね?

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