C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

WndProc( )内でやってもいい処理について


(過去ログ 5 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■4971 / inTopicNo.1)  WndProc( )内でやってもいい処理について
  
□投稿者/ くろちゃん 二等兵(1回)-(2006/07/13(Thu) 22:10:55)

分類:[C#] 


分類:[C#] 

はじめまして。


入力制限付きのテキストボックスを作製する必要があり、
管理人様のライブラリにあるExTextBoxを参考にさせていただいてます。
ペーストも制御できてとても良いなぁと思っています。

この入力制限に加えて、
例えば実数で全体桁数、小数点以下桁数を指定できるといった細かい制限を可能にしたいと思っています。
もはやマスクに近い処理で、こういった処理のサンプルを探しても
普通はKeyPress()等で実装するようでした。

しかし、出来るだけ通常のTextBoxと同様に入力できるようにしたく、
やはり貼り付け時も処理したいのです(欲)

例)
numeric(5,2)用の制限をかける
現在の入力値が"123.45"である
クリップボードに"67"の文字列が入っている
"3.4"の部分を選択し、"67"を貼り付け
結果:"126"
このような場合、現状の文字列も操作する必要があります。

そこでWndProc()内で、
必要な場合のみTextBoxのTextプロパティを直接編集し、
base.WndProc()は呼ばずにreturnすることで、
思い通りの結果は得られたのですが、とても不安です、、、

WndProc()内でTextプロパティを直接編集するという、
このような事をしても問題ないものなのでしょうか。
当然上位のWndProc内で定義されている
WM_CHARやWM_PASTE時の処理をすっとばしてしまう影響がでますでしょうか・・・

ちなみにTextChangeイベントではちらつくので使用したくないのです。
もしWndProc()内でTextプロパティを直接編集することに問題があるとしたら、
この場合、描画を制御するしか解決策はないものでしょうか。

初心者なので、恐るべき行為や勘違いをしているかもしれません。
よろしくお願いします。

0
引用返信 編集キー/
■4972 / inTopicNo.2)  Re[1]: WndProc( )内でやってもいい処理について
□投稿者/ まどか 大尉(176回)-(2006/07/13(Thu) 23:23:02)

分類:[C#] 

何をやってもいいか悪いかよりも、
Baseへ返さなくてよい場合と返す場合がきちんと振り分けされているかが重要だと思います。
#必ず振り分けるという意味ではありません。

0
引用返信 編集キー/
■4975 / inTopicNo.3)  Re[2]: WndProc( )内でやってもいい処理について
□投稿者/ くろちゃん 二等兵(2回)-(2006/07/13(Thu) 23:39:11)

分類:[C#] 

No4972に返信(まどかさんの記事)
> 何をやってもいいか悪いかよりも、
> Baseへ返さなくてよい場合と返す場合がきちんと振り分けされているかが重要だと思います。
> #必ず振り分けるという意味ではありません。

まどかさん、ありがとうございます。
その、返さなくてよい場合と良くない場合の切り分けがよくわからないんです。
入力制限がかかり結果何も文字が追加されない場合はreturnして問題ないと思うのですが、
自分がやりたい処理の場合、新しい文字が追加される場合でもreturnすることがあるのでどうなのかなと思っています。

ちなみにMessage.MsgにWM_NULLを入れなおしてbase.WndProc()を呼ぶと
どういうメリットがあるのでしょうか。


0
引用返信 編集キー/
■4982 / inTopicNo.4)  Re[3]: WndProc( )内でやってもいい処理について
□投稿者/ くろちゃん 二等兵(3回)-(2006/07/14(Fri) 12:20:54)

分類:[C#] 

追記

Text値を直接編集するので、その後にModifiedフラグを自分で立てないといけませんでした。

こうした問題が他にもあるかなぁと思っています。

0
引用返信 編集キー/
■4986 / inTopicNo.5)  Re[3]: WndProc( )内でやってもいい処理について
□投稿者/ まどか 大尉(178回)-(2006/07/14(Fri) 22:05:53)

分類:[C#] 

> 自分がやりたい処理の場合、新しい文字が追加される場合でもreturnすることがあるのでどうなのかなと思っています。
>
> ちなみにMessage.MsgにWM_NULLを入れなおしてbase.WndProc()を呼ぶと
> どういうメリットがあるのでしょうか。

メッセージにより違うということが言えるのではないでしょうか。
つまり、Baseを呼び出すということはオリジナルのメッセージ処理へ突入するわけで
条件により何らかの処理がおこなわれるか、結果的にどのステップも実行されないかは
そのメッセージの実装に依存します。
またWndProcの返り値によりメッセージの連鎖にも影響があります。

> Text値を直接編集するので、その後にModifiedフラグを自分で立てないといけませんでした。
> こうした問題が他にもあるかなぁと思っています。

前記も含めてですが、
ウィンドウズメッセージを独自に処理することはOSにパッチをあてるようなもんですので
そのメッセージだけでなく関連するメッセージ結局のところOSの仕様について熟知している必要があります。
そこらへんはPlatformSDKやSPYなどを駆使して理解するしかないと思います。

今回の件のみの回答をお望みなら、それを知っている方の回答を待ってください。
私はわかりませんです。。。

0
引用返信 編集キー/
■4992 / inTopicNo.6)  Re[4]: WndProc( )内でやってもいい処理について
□投稿者/ くろちゃん 二等兵(4回)-(2006/07/17(Mon) 12:11:38)

分類:[C#] 

> ウィンドウズメッセージを独自に処理することはOSにパッチをあてるようなもんですので
> そのメッセージだけでなく関連するメッセージ結局のところOSの仕様について熟知している必要があります。
> そこらへんはPlatformSDKやSPYなどを駆使して理解するしかないと思います。
>
> 今回の件のみの回答をお望みなら、それを知っている方の回答を待ってください。

ありがとうございます^^
もっと詳しく調べてみます。

なんかWM_CHARやWM_PASTEメッセージを流さず、直接テキスト値を変更するのって、
テキストボックスと関係のないイベントでテキストボックスの文字列を編集するのと同じようなもんだと思えてきたんですが。。。


0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -