いつもお世話になっております。
VC6.0、MFCを使用して、ダイアログベースのアプリを作成しています。
その中のEditBoxにテキストを表示した際に、選択できる文字数を1文字に制限したいのですが
どの様にすれば実現できるでしょうか?
よろしくお願いします。
ベタだなぁ、と思いつつこんなの試してみました。
CEditを派生させてCMyEditを作る。
CMyEditのメッセージマップに「WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE」を加える。
CMyEditのメンバ変数に「bool m_bIsSelecting」を加える。
CMyEdit::CMyEdit()でm_bIsSelectingをfalseに初期化。
CMyEdit::OnLButtonDown()でbIsSelectingにtrueにセット。
CMyEdit::OnLButtonUp()でbIsSelectingにfalseにセット。
CMyEdit::OnMouseMove()でCEdit::OnMouseMove()を呼んだ後に、
m_bIsSelectingがtrueなら
CEdit::GetSel()で選択範囲を取得。
CEdit::GetLine()でエディットボックスの内容を取得。
選択開始位置にある文字が全角か半角かを判断して、
半角→選択終了位置に選択開始位置+1をセット。
全角→選択終了位置に選択開始位置+2をセット。
CEdit::SetSel()で選択範囲を設定。
エディットコントロールにCMyEdit型変数をマップする。
tibさんお返事ありがとうございます。
早速やってみようと思ってのですが、私の勉強不足で
>エディットコントロールにCMyEdit型変数をマップする。
というところがわかりません。
ヘッダーに
CMyEdit m_MyEdit;
を追加して、
void CxxxDlg::DoDataExchange(CDataExchange* pDX)
{
Dialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CxxxDlg)
DDX_Control(pDX, IDC_MYEDIT, m_MyEdit); ←これを追加
//}}AFX_DATA_MAP
}
ってことでいいのでしょうか?
あと、もしこれで合っているとしたら、CEdit::SetSel()がうまく機能しないのです。
使用するに当たってこれ忘れてるんじゃない?っていう事はありますか?
よろしくお願いします。
>>エディットコントロールにCMyEdit型変数をマップする。
>というところがわかりません。
私がやった手順は、
・Class Wozard > メンバ変数
・「コントロールID」リストから、エディットコントロールのリソースIDを選択して「変
数の追加」をクリック。
・「メンバ変数の追加」ダイアログで以下の通り入力。
カテゴリ:コントロール
変数のタイプ:CMyEdit
変数名:適当に
です。多分まひさんのおっしゃるのと同じ結果になってます。
>使用するに当たってこれ忘れてるんじゃない?っていう事はありますか?
思い当たるところがあるとすれば「CMyEdit::OnMouseMove()でCEdit::OnMouseMove()を呼
んだ後に」行うべき処理を、呼ぶ前に書いてないか? ということくらいですが...。
あとはSetSel()の引数に望み通りの値が入っているかどうか、でしょうか。
tibさん出来ました!!
アドバイス本当にありがとうございました。
返事が遅れてすいませんでした。