Editの選択範囲の制限 – プログラミング – Home

通知
すべてクリア

[解決済] Editの選択範囲の制限


まひ
 まひ
(@まひ)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

いつもお世話になっております。

VC6.0、MFCを使用して、ダイアログベースのアプリを作成しています。
その中のEditBoxにテキストを表示した際に、選択できる文字数を1文字に制限したいのですが
どの様にすれば実現できるでしょうか?

よろしくお願いします。


引用未解決
トピックタグ
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

ベタだなぁ、と思いつつこんなの試してみました。

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型変数をマップする。


返信引用
まひ
 まひ
(@まひ)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

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()がうまく機能しないのです。
使用するに当たってこれ忘れてるんじゃない?っていう事はありますか?

よろしくお願いします。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

>>エディットコントロールにCMyEdit型変数をマップする。
>というところがわかりません。
私がやった手順は、
・Class Wozard > メンバ変数
・「コントロールID」リストから、エディットコントロールのリソースIDを選択して「変
数の追加」をクリック。
・「メンバ変数の追加」ダイアログで以下の通り入力。
 カテゴリ:コントロール
 変数のタイプ:CMyEdit
 変数名:適当に

です。多分まひさんのおっしゃるのと同じ結果になってます。

>使用するに当たってこれ忘れてるんじゃない?っていう事はありますか?
思い当たるところがあるとすれば「CMyEdit::OnMouseMove()でCEdit::OnMouseMove()を呼
んだ後に」行うべき処理を、呼ぶ前に書いてないか? ということくらいですが...。

あとはSetSel()の引数に望み通りの値が入っているかどうか、でしょうか。


返信引用
まひ
 まひ
(@まひ)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

tibさん出来ました!!
アドバイス本当にありがとうございました。

返事が遅れてすいませんでした。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました