シリアル通信の送受信データをエディットボックスへ表示するプログラムを作成しています。
エディットボックスは、プロパティで「読み取り専用」をクリックしているのですが、エディットボックス上でマウス
をクリックするとカーソル位置はその位置へ移動してしまう様で、次の送受信データをその位置に書き込
んでしまいます。
フォーカスの取得を禁止すればいいのかな?と思っているのですが、その方法が解りません。
EnableWindow(FALSE)とすれば一応目的は達成されるのですがグレー表示になってしまい、うま
くありません。
ちなみに、データの表示は送受信時にReplaseSelを使用してテキストデータとして書き足しています。
開発環境は、VisualC++ 6.0 でダイアログベースのプログラムです。
ご多忙中申し訳ありませんが、宜しくご指導の程、御願い致します。
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);
}
こんなん、どーでしょう?
他に、もっといい方法がありそうですが。。。
ReplaseSelの直前に、
SetSelでカーソルを最後に持っていくのではダメでしょうか?
dairygoodsさん
私もその方法を試みたのですが、最終のカーソル位置を指定するにはどうすれば良いのでしょ
う?
int n;
m_ed1.GetWindowText(ss);
n = ss.GetLength();
m_ed1.SetSel(n,n);
とやったら、うまくいきませんでした。
使い方おかしいですか?
> m_ed1.GetWindowText(ss);
> n = ss.GetLength();
> m_ed1.SetSel(n,n);
>
> とやったら、うまくいきませんでした。
正しいように見えますが、どうなってしまうのでしょう?
お騒がせしました。
ただのコーディングミスでした。
掲題の問題は、yas0302さんに教わった方法で対策し、dairygoodsさんに教わった方法は別件
の対策でそれぞれ利用させて頂くことにしました。
今回は、色々と勉強になりました。
ありがとうございました。
エディットボックスである必要がなければ、スタティックコントロールを使う手もありかと。
ご意見ありがとうございます。
しかし、スクロールバーを使用したいのでNGだと思います。
スタティックコントロールでは、スクロールバー付きませんよね?