エディットBOXの入力制限について – プログラミング – Home

エディットBOXの入力制限について
 
通知
すべてクリア

[解決済] エディットBOXの入力制限について


まさ
 まさ
(@まさ)
ゲスト
結合: 24年前
投稿: 64
Topic starter  

WindowsXP SP2
VC++6.0

ダイアログベースのアプリケーションを開発しております。
そこでお聞きしたいのですが、
エディットBOXがいくつか存在しており、数値のみ入力させたいのですが、
ある文字をコピーし、貼り付けをするとエディットBOXに入力されてしまいます。
(キーボードでの入力は受け付けないようチェックしております)

文字は入力不可という仕様なので、貼り付け不可能にしたいのですが、
何か良い実現方法がありましたら、教えて頂けると助かります。

宜しくお願い致します。


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

・CWnd::PreTransMessage( MSG* pMsg )をつかって、
・pMsg->message == WM_CHAR の時に、
・pMsg->wParam が数字であるかどうかを調べて、
・もし数字でなかったら即刻return TRUEする。

で行けると思います。


返信引用
まさ
 まさ
(@まさ)
ゲスト
結合: 24年前
投稿: 64
Topic starter  

回答有難うございました。
確かに貼り付けできなくなりました。

ただ、もう1点問題がありまして、、
右クリックからの貼り付けを選択すると
貼り付けができてしまいます・・。

これは、制限するのは難しいでしょうか・・。


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

エディットコントロールをサブクラス化して、
WM_PASTEをハンドルしてできないかな・・・?


返信引用
R-Cradle
 R-Cradle
(@R-Cradle)
ゲスト
結合: 22年前
投稿: 4
 

WM_PASTEのハンドラを追加して、クリップボードのデータを判定してみては。
具体的には、COleDataObjectを使ってクリップボードのデータを調べます。言葉では説
明しにくいので、
簡単なサンプルを。エラー処理は省いてありますので、参考程度に。

// 単純に不正な文字を含む貼り付けを無効にする例
COleDataObject obj;
if (obj.AttachClipboard() && obj.IsDataAvailable(CF_TEXT)) {
HGLOBAL hMem = obj.GetGlobalData(CF_TEXT);
LPCTSTR psz = (LPCTSTR)::GlobalLock(hMem);
CString sPaste(psz);
::GlobalUnlock(hMem);

// ここで、貼り付け文字列sPasteを判定する。

if (不正な文字は含まれていない)
Default();
else
MessageBeep((UINT)-1);
}


返信引用
R-Cradle
 R-Cradle
(@R-Cradle)
ゲスト
結合: 22年前
投稿: 4
 

sugarさんとニアミスしてしまいました。 orz
↑のサンプルは、sugarさんのおっしゃるように、サブクラス化してから追加してくださ
い。


返信引用
まさ
 まさ
(@まさ)
ゲスト
結合: 24年前
投稿: 64
Topic starter  

WM_PASTEのハンドラを追加して、
クリップボードのデータを判定する方法で解決いたしました。

sugarさん、R-Cradleさん、アドバイスどうも有難うございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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