mcrblog

vcpp-ml

2001年10月

31

[vcpp 00056149] CFileDialogで複数選択するときの問題

きたざわです。

「ファイルを開く」処理でCFileDialogを使ったときの
複数選択について質問します。

たくさんのファイルを選択できるようにするために、
ファイル名を格納するバッファを拡張しました。

********
CFileDialog   dlg;

// ~ 略
dlg.m_ofn.lpstrFile      = 10000;
dlg.m_ofn.nMaxFile     = FILEBUFSIZE;
*********

のようにです。
でも、これで10000文字まで増やしたとしても
それを超えたらメモリを破壊してしまいますよねぇ。
これを回避する方法はありませんか?

1.任意の長さの文字列を取得できるようにする方法
2.もしくは、選択されたファイルの文字数を監視して落ちないようにする方法

を知っている方がいらっしゃったら教えてください!
できることなら、1.の解決方法の方が好ましいのですが・・・
2.の方法の場合は、CFileDialog::OnLBSelChangedNotify()のタイミングで
選択されたファイル名をカウントすればできそうな気がするのですが、
「いや、もっと簡単な方法があるよ」とかがあれば教えていただきたいです。

これって、FAQなのでしょうか?
誰でもぶちあたりそうな問題のような気がするのですが
解決方法が見当たりません。
私の調べ方が悪いのでしょうか??(T.T)

//////////////////////////////////////
北澤 美幸
k...@comtec.kicnet.co.jp
//////////////////////////////////////
31

[vcpp 00056149] CFileDialogで複数選択するときの問題

きたざわです。

「ファイルを開く」処理でCFileDialogを使ったときの
複数選択について質問します。

たくさんのファイルを選択できるようにするために、
ファイル名を格納するバッファを拡張しました。

********
CFileDialog   dlg;

// ~ 略
dlg.m_ofn.lpstrFile      = 10000;
dlg.m_ofn.nMaxFile     = FILEBUFSIZE;
*********

のようにです。
でも、これで10000文字まで増やしたとしても
それを超えたらメモリを破壊してしまいますよねぇ。
これを回避する方法はありませんか?

1.任意の長さの文字列を取得できるようにする方法
2.もしくは、選択されたファイルの文字数を監視して落ちないようにする方法

を知っている方がいらっしゃったら教えてください!
できることなら、1.の解決方法の方が好ましいのですが・・・
2.の方法の場合は、CFileDialog::OnLBSelChangedNotify()のタイミングで
選択されたファイル名をカウントすればできそうな気がするのですが、
「いや、もっと簡単な方法があるよ」とかがあれば教えていただきたいです。

これって、FAQなのでしょうか?
誰でもぶちあたりそうな問題のような気がするのですが
解決方法が見当たりません。
私の調べ方が悪いのでしょうか??(T.T)

//////////////////////////////////////
北澤 美幸
k...@comtec.kicnet.co.jp
//////////////////////////////////////
31

[vcpp 00056148] Re: ダイアログベースアプリでのメニュー更新のみ解決しました.

にしかわです。

Yasuhiro.Kambe wrote:
"[vcpp 00056145] Re: ダイアログベースアプリでのメニュー更新のみ解決しました.":
>1,現状Dialogの画面にツリー,リストコントロールを実装.
>  リスト、ツリーはエクスプローラのようにフォルダ階層とファイル一覧を表示

ふむ。
VC6だと、SDIでこの形式のアプリケーションのどんがらはウィザードで出来たりします。
フォルダとかファイルリストを自動でやってくれるわけではありませんので
その辺は自分でインプリメントしないと駄目ですけれど。

あといくつかうれしいことがあった様に思いますが、もうかなり前のことですから、
忘れてしまいました。


まぁお金がかかる話ですし。。。それに近いうちにVS.NETも出る事ですから。。
今VC6を検討するのはあまりいいことではないかなぁ。

ではでは。

---
西川真人 m...@nifty.com
         http://homepage1.nifty.com/nishikawa/mn/
31

[vcpp 00056148] Re: ダイアログベースアプリでのメニュー更新のみ解決しました.

にしかわです。

Yasuhiro.Kambe wrote:
"[vcpp 00056145] Re: ダイアログベースアプリでのメニュー更新のみ解決しました.":
>1,現状Dialogの画面にツリー,リストコントロールを実装.
>  リスト、ツリーはエクスプローラのようにフォルダ階層とファイル一覧を表示

ふむ。
VC6だと、SDIでこの形式のアプリケーションのどんがらはウィザードで出来たりします。
フォルダとかファイルリストを自動でやってくれるわけではありませんので
その辺は自分でインプリメントしないと駄目ですけれど。

あといくつかうれしいことがあった様に思いますが、もうかなり前のことですから、
忘れてしまいました。


まぁお金がかかる話ですし。。。それに近いうちにVS.NETも出る事ですから。。
今VC6を検討するのはあまりいいことではないかなぁ。

ではでは。

---
西川真人 m...@nifty.com
         http://homepage1.nifty.com/nishikawa/mn/
31

[vcpp 00056147] Re: 時刻合わせ

επιστημη@亀レス です。

--- "[vcpp 00056116] Re: <summary> 時刻合わせ" ---
--- from Keisuke Suzuki <k...@ssi.co.jp> at 2001/10/30 15:52:06 +0900 ---
>NTP(Network Time Protocol)でなんとかなりそうです。
>UNIX側にNTPサーバを立ててるか確認して、試してみます。

Rogue Wave 'Bobcat' (http://www.roguewave.com/developer/tac/)
 のおマケに付いてくるライブラリを使ってみたら、
SNTP-clientがたったの40行で書けちゃいました。

やっぱスゴイわ > Rogue Wave SourcePro

#include <winsock2.h>                 // htonl, ntohl
#include <iostream>                   // cout, endl
#include <winbase.h>                  // ZeroMemory
#include <rw/rwtime.h>                // RWTime
#include <rw/network/RWWinSockInfo.h> // RWWinSockInfo
#include <rw/network/RWInetAddr.h>    // RWInetAddr
#include <rw/network/RWSocket.h>      // RWSocket

struct NTP_packet {
  int     control_word;
  int     root_delay;
  int     root_dispersion;
  int     referencr_identifier;
  __int64 reference_timestamp;
  __int64 originate_timestamp;
  __int64 receive_timestamp;
  int     transmit_timestamp_seconds;
  int     transmit_timestamp_fractions;
};

#define NTP_HOST "ほげほげ.ぱよぱよ.ぺもぺも"
#define NTP_PORT 123

int main() {
  RWWinSockInfo info;

  RWSocket client;
  client.bind(RWInetAddr(10000, INADDR_ANY, SOCK_DGRAM)); // port 10000 は'てきとー'

  NTP_packet packet;
  ZeroMemory(&packet, sizeof(packet));
  packet.control_word = htonl(0x0b000000);

  client.sendto(reinterpret_cast<const char*>(&packet), sizeof(packet), 
                RWInetAddr(NTP_PORT, NTP_HOST123, SOCK_DGRAM));
  client.recvfrom(reinterpret_cast<char*>(&packet), sizeof(packet));

  std::cout << RWTime(ntohl(packet.transmit_timestamp_seconds) - 2208988800) << std::endl;

  return 0;
}

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...
記事検索
Amazon.co.jp
  • ライブドアブログ