CIPAddressCtrlでIP設定時に000が0に省略されないようにセットするには? – プログラミング – Home

通知
すべてクリア

[解決済] CIPAddressCtrlでIP設定時に000が0に省略されないようにセットするには?

固定ページ 1 / 2

こう
 こう
(@こう)
ゲスト
結合: 23年前
投稿: 79
Topic starter  

環境
OS:WIN2000
VC++.NET

度々お世話になります。

CListCtrlから以下のようにIPアドレスを取得します。
csIpData = m_List.GetSelData(0);
この時のcsIpDataには192.168.000.001と入っています。

CIPAddressCtrlを使用し、
上記のcsIpDataのIPアドレスをIP Address Controlにセットすると、
192.168.0.1と0が省略されてセットされてしまいます。

0が省略されずにセットする方法をご教授下さい。
よろしくお願いします。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 上記のcsIpDataのIPアドレスをIP Address Controlにセットすると、
> 192.168.0.1と0が省略されてセットされてしまいます。

どうやってセットするんですか? コードが見たい。
# (文字列でなく)4つの数をセットするしか方法がないのなら、たぶんムリ。
# 「0埋め3ケタで表示しろ」と指図できない限り。


返信引用
こう
 こう
(@こう)
ゲスト
結合: 23年前
投稿: 79
Topic starter  

>επιστημηさん
返信ありがとうございます。
現在のコードは以下のようになっています。
現在とその前でも結果は同じでした。

--現在
CString csIpData;
csIpData = m_List.GetSelData(0);

CString csIp1, csIp2, csIp3, csIp4;
csIp1 = csIpData.Mid( 0, 3 );
csIp2 = csIpData.Mid( 4, 3 );
csIp3 = csIpData.Mid( 8, 3 );
csIp4 = csIpData.Mid(12, 3 );
csData.Format(%03s.%03s.%03s.%03s, csIp1, csIp2, csIp3, csIp4);
m_Ip.SetWindowText( csData );

--その前
CString csIpData;
csIpData = m_List.GetSelData(0);
m_EastIp.SetWindowText(csIpData);

よろしくお願いします。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

VC++6.0 Enter SP6(Windows Xp Pro SP2)ですが、デフォルトでダイアログを作成し、
CIPAddressコントロールとボタンのみ配置して、

void CIPAddCtrlTestDlg::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CIPAddressCtrl* pIPAddCtrl
= ( CIPAddressCtrl* )this->GetDlgItem( IDC_IPADDRESS1 );
pIPAddCtrl->SetWindowText( _T( 192.168.000.001 ) );
}

と、記述して試してみましたが、きちんと 192.168.0.1 と表示されました。

.NET 環境で、これだけの同じように作っても再発するのか確認してくれますか?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

m_IpがCIPAddressCtrlクラスのインスタンスなら
SetWindowTextを使うのではなくてSetAddressを使うべきだろうし、
CIPAddressCtrlクラスの説明に0詰めを行うようなスタイルが
説明されていないのであれば、無理でしょう。

どうしても0詰めしたいのであれば、自前でCEditを使ってコントロールする
とかしないと無理だと思います。
それこそサブクラス化して自分で処理を書き足すような事をすれば、
出来るかもしれませんけれど、その為にはCIPAddressCtrlの実装を
理解しておく必要があると思いますよ。


返信引用
こう
 こう
(@こう)
ゲスト
結合: 23年前
投稿: 79
Topic starter  

>Blueさん
返信ありがとうございます。

確認ですが、
000を0と表記したいのではなく、
000を000のまま表記したいです。

現状、Blueさんの書いていただいたとおり、
192.168.000.001は192.168.0.1と出力されています。

省略されないようにするにはどうすればよろしいでしょうか。

よろしくお願いします。


返信引用
こう
 こう
(@こう)
ゲスト
結合: 23年前
投稿: 79
Topic starter  

>PATIOさん
返信ありがとうございます。

SetAddressを使用してみましたが、
これも無理でした。

>自前でCEditを使ってコントロールする
とありますが、どのように扱うのでしょうか。

よろしくお願いします。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> 000を000のまま表記したいです。
そういうことね、、、CIPAddressCtrlをそのまま使っている以上無理でしょう。
PATIO さんのおっしゃるとおり自分でその機能を作りこむしかないですね。


返信引用
こう
 こう
(@こう)
ゲスト
結合: 23年前
投稿: 79
Topic starter  

>Blueさん
返信ありがとうございます。

やはり無理なんですね。

時間がかかりそうなのであきらめます。
ありがとうございました。

敬具


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

Spy++でしらべてみたとこと IPアドレスコントロール には4つの エディットボックスが
あるようです。
表示だけでしたら、FindWindowExかなんかで、3番目のエディットボックスのハンドル
を取得して、それに対して直接SetWindowTextを呼べば 000 と表示されます。

一応適当に
void CIPAddCtrlTestDlg::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
CIPAddressCtrl* pIPAddCtrl = ( CIPAddressCtrl* )this->GetDlgItem(
IDC_IPADDRESS1 );

HWND hWnd1 = ::FindWindowEx( pIPAddCtrl->GetSafeHwnd(), NULL, NULL, NULL );
HWND hWnd2 = ::FindWindowEx( pIPAddCtrl->GetSafeHwnd(), hWnd1,NULL, NULL );
HWND hWnd3 = ::FindWindowEx( pIPAddCtrl->GetSafeHwnd(), hWnd2,NULL, NULL );
HWND hWnd4 = ::FindWindowEx( pIPAddCtrl->GetSafeHwnd(), hWnd3,NULL, NULL );

::SetWindowText( hWnd1, _T( 001 ) );
::SetWindowText( hWnd2, _T( 000 ) );
::SetWindowText( hWnd3, _T( 168 ) );
::SetWindowText( hWnd4, _T( 192 ) );
}


返信引用
こう
 こう
(@こう)
ゲスト
結合: 23年前
投稿: 79
Topic starter  

>Blueさん
返信ありがとうございます。

上記で可能になりました。
ありがとうございます。

今後ともよろしくお願いします。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

セットだけなら良いんですが、編集が入ったら元の木阿弥になりませんか?
編集しないと言う前提ならいいかもしれませんけれど。

編集がかかったときも0詰めしたいのならやっぱり手間をかける必要があるのではと
思います。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> 編集が入ったら元の木阿弥になりませんか?
ユーザが 001 とうてばそのとおりになるのは IPアドレスコントロールのデフォルトの
動きです。

ですので、考慮すべきは、プログラム側で設定するところだけだと思います。
(SetWindowText,SetAddress)


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

いえ、1と打った時も0詰めにしたいのかなと思ったので
そこまで考慮に入れる必要がないなら設定だけでよいと思います。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>いえ、1と打った時も0詰めにしたいのかなと思ったので
そういうことですね。

やるとしたら、編集中ではなくフォーカスが外れたらぐらいでよさそうですね。
(123 と入れたいのに 001 になって入力できなくなったらウザ杉ですからね)

といっても、サブクラス化なのかな。。。メンドそ。
だったら、自作のコントロールを作成したほうがよいのかも。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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