■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build16
251 名前:247 :04/01/23 01:14
>>250
NTFSファイルシステムの機能として用意されているかもしれないということですね。
ありがとうございました。

252 名前:デフォルトの名無しさん :04/01/23 01:54
おまい、NTFSは何の略か言ってみろ。

253 名前:247 :04/01/23 03:37
>>252
「Exifフォーマット」も同じ間違いですね。すいやせん。


254 名前:デフォルトの名無しさん :04/01/23 10:18
jpegやpngをDDBなどに読み込んでビットマップのように表示したいのですがそのためのAPIとかはあるんでしょうか?
それ用のライブラリなんかを使わないとダメでしょうか?

255 名前:デフォルトの名無しさん :04/01/23 11:02
>>225
ユニークな識別子を作るというならCoCreateGuidがあるけど。

256 名前:デフォルトの名無しさん :04/01/23 11:23
>>254

Win98/2000以降ならBITMAPINFOHEADERのbiCompressionにBI_JPEG/BI_PNGで
SetDIBitsToDevice()でいけそうだという話もあるが、素直にlibjpeg/libpng使った
ほうが多分楽。

後はOleLoadPictureもその辺のフォーマットサポートしてた気もするが。

257 名前:デフォルトの名無しさん :04/01/23 11:27
jpeg/pngはディスプレイデバイスではサポートされてないそうだが

258 名前:254 :04/01/23 11:31
レスありがとうございます。
取り合えずlibjpeg/libpngでやってみようと思います

259 名前:デフォルトの名無しさん :04/01/23 12:59
GDI+が忘れられている・・・


260 名前:高校生 :04/01/23 15:52
インストールできました。
今までのサム君に加えて、マイク君とマリーちゃんが使えるようになりました。
だが、肝心のC++のチュートリアルサンプルが動かない。
コーヒーっていう音声認識のサンプルです。
CreateWindow時にエラーとなってしまいました。
さらにデバッガで追っていくと、
WM_CREATE時に、
初期化をしていて、そこでエラーになっているようです。
ISpRecoGrammar::LoadCmdFromResourceの戻り値が、-2147200942となっていました。。

SPERR_LANGID_MISMATCH 0x80045052 -2147200942
An attempt to load a CFG grammar with a LANGID different than other loaded grammars.

う〜む。どこで読み込んだものが、互いに違っているのか?
すでにあったコンパイル済みのものを動かしてもエラーになるし……。

261 名前:デフォルトの名無しさん :04/01/23 16:40
LanguagePackあてておかしくなったとか...

262 名前:高校生 :04/01/23 17:04
>>261
なるほど、確かにLanguagePackをあてています。
さて、どうすればいいのでしょうか?
コントロールパネルで標準の音声認識エンジンを変えればいいのでしょうか?
それとも、パックをアンインストールする必要があるのでしょうか?


263 名前:Win32SDK勉強中 ◆Win32BkCJ. :04/01/23 17:36
>>255
ハードウェアが変わらない条件下では何度呼び出しても
常に同じSerial Numberを生成するようにしたかったので、
CoCreateGuidは使えないんです。
せっかくレスいただいたのに、申し訳ありません。

264 名前:デフォルトの名無しさん :04/01/23 17:36
自分がDQNだとわかっているなら自制しろ

265 名前:233 :04/01/24 04:32
>>236-237
遅レスで申し訳ないです。
ありがとうございます。
GetNetworkParamsで取得できました。
探したらサンプルもありました。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/getnetworkparams.asp

266 名前:高校生 :04/01/24 11:17
コントロールパネルの音声認識に、新しいタブができていました。
プログラミング以前の質問、申し訳ありません。


267 名前:デフォルトの名無しさん :04/01/24 13:21
API じゃ無いけどここで良いかな?

たまーに Segmentation Violation なんかで異常終了してしまう DLL を呼ぶ
必要があるんだけど、この手の DLL 側の致命的エラーでアプリケーション
自体を異常終了させたくない時どうすれば良いですか? 出来れば「○○が
異常終了しました」とかポップアップ出して操作を続行させたいんですけど。


268 名前:デフォルトの名無しさん :04/01/24 13:26
Win32構造化例外を捕捉する。

269 名前:デフォルトの名無しさん :04/01/24 14:23
>>268
__try〜__except(...) って奴ですか? 調べてみます、どうもでした。

270 名前:デフォルトの名無しさん :04/01/24 15:07
> __try〜__except(...) って奴ですか? 調べてみます、どうもでした。
ちがぁ〜う! ちゃんと嫁。
>>268 は"Win32構造化例外"って、ちゃんと書いてんだろが。
C++例外とSEHを混同すんな。

271 名前:デフォルトの名無しさん :04/01/24 15:18
>>270
C++の例外はtry〜catch()〜だろ。
VC++だとcatch(...)でSEHまで捕捉されるけどな。


272 名前:デフォルトの名無しさん :04/01/24 16:33
プリンタの設定を変更したいのですが、VBからDocumentProperties APIを呼び出し、以下のように実行すると、
2回目のDocumentProperties で ERROR_INSUFFICIENT_BUFFER (システムコールに渡されるデータ領域が小さすぎま)というエラーが出ます。
この原因が分かりません。バッファのサイズは十分にとってあります。(そもそも bytDevMode はポインタ(byref) で渡しているのでデータ領域が分かるかどうかが疑問です。。。)
どのような原因が考えられるでしょうか?
もしご存知の方がいらっしゃいましたらよろしくお願いいたします。

' DEVMODE構造体のバッファサイズを取得
lngBufSize = _
DocumentProperties(Me.hWnd, _
lnghPrinter, _
Printer.DeviceName, _
ByVal vbNullString, _
ByVal vbNullString, _
0)
ReDim bytDevMode(lngBufSize - 1)
' 現在の設定を取得
lngWin32apiResultCode = _
DocumentProperties(Me.hWnd, _
lnghPrinter, _
Printer.DeviceName, _
bytDevMode(0), _
ByVal vbNullString, _
DM_OUT_BUFFER)


273 名前:デフォルトの名無しさん :04/01/24 16:45
>>272
bytDevMode (=DEVMODE 構造体) の dmSize を指定し忘れているんじゃないか ?

http://msdn.microsoft.com/library/en-us/gdi/prntspol_8nle.asp

274 名前:272 :04/01/24 17:29
>>273

ご回答ありがとうございます。
bytDevMode の dmSize (bytDevMode(36),(37))に値(=156)を入力して
みましたが、やはりうまくいかないようです。
DM_OUT_BUFFER を指定しているので構造体を取得するだけなので、
bytDevMode は初期値のまま(0クリア)で渡していました。
APIでは、こちらに渡すときに、サイズのチェックとかがあって
渡す必要があるのでしょうか?








275 名前:デフォルトの名無しさん :04/01/24 18:02
>>274
ちょっと、DocumentProperties の Declare 定義見せてくれる ?
あと、dmSize に値入れる時のエンディアンは問題ないよね ?

276 名前:272 :04/01/24 18:23
>>275

>ちょっと、DocumentProperties の Declare 定義見せてくれる ?
Declare 定義です。

Declare Function DocumentProperties Lib "winspool.drv" _
Alias "DocumentPropertiesA" _
(ByVal hWnd As Long, _
ByVal hPrinter As Long, _
ByVal pDeviceName As String, _
pDevModeOutput As Any, _
pDevModeInput As Any, _
ByVal fMode As Long) As Long

>あと、dmSize に値入れる時のエンディアンは問題ないよね ?
bytDevMode(36) = 156
bytDevMode(37) = 0
としました。おそらく大丈夫だと思います。


引数の渡し方の問題でしょうか?
bytDevMode は、受け取るときはdmSizeだけに値を入れたのですが、
他にも設定が必要な項目がありますか?

277 名前:デフォルトの名無しさん :04/01/24 18:25
実行プログラム自身のファイル名を取得する方法を教えてください。
開発環境はVisualStudio C++で、非コンソールプログラムになります。

コンソールプログラムならば main関数の argv[0]がファイル名になりますが、非コンソール
プログラムの場合はどうすれば良いかと悩んでいるというわけです。

278 名前:デフォルトの名無しさん :04/01/24 18:33
>>277
GetModuleFileName

279 名前:デフォルトの名無しさん :04/01/24 18:42
>>278
こんなAPIがあったんですね。ありがとうございました。後日、試してみます。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdllpro/html/_win32_getmodulefilename.asp

280 名前:デフォルトの名無しさん :04/01/24 23:14
Win32APIに関係ないかもしれませんが、WindowsのProduct Idは、
全バージョンのWindowsにおいて、レジストリの
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
で取得することができますか?

281 名前:デフォルトの名無しさん :04/01/24 23:58
できま

282 名前:デフォルトの名無しさん :04/01/25 00:30
どっち(w

283 名前:デフォルトの名無しさん :04/01/25 00:46
未来永劫そうなるとは誰もいえない

284 名前:デフォルトの名無しさん :04/01/25 02:26
お聞きします。
通信系のプログラムをつくっていますが、
RS232Cを複数回線つかうと、
Win95上で動作させたときにくらべて
Win2000/XPで動作させたほうが遅くなります。
しかもWin95はPentium100Mで動作、
Win2000はPentium3で動作させているにもかかわらず、です。
何か対処策があるでしょうか。

285 名前:デフォルトの名無しさん :04/01/25 02:27
OSによって処理を分ける

286 名前:デフォルトの名無しさん :04/01/25 02:54
シリアルポートのコントローラ、ドライバ、BIOS設定が違うから。

287 名前:デフォルトの名無しさん :04/01/25 03:42
APIを使って、FTPからサブディレクトリを含む全てのファイル名を
取得したいんだけど、どうやったらいいですか?
FtpFindFirstFileとやらを使うってのは分かったんだけど
サブディレクトリ以下が取得できない( ´・ω・)
教えてくださいませ。

288 名前:デフォルトの名無しさん :04/01/25 10:30
自分で再帰的にたどるしかないだろう。
下手するとものすごい時間を取るだろうが。

289 名前:デフォルトの名無しさん :04/01/25 12:12
NetBios名をつかった通信はできるのでしょうか。
プロトコルはNetBeuiのみで、です。

290 名前:デフォルトの名無しさん :04/01/25 12:17
>>272
http://www.galliver.co.jp/writing/nikkei_tokushu/prn908/index.html
ここのコードを見る限り、dmSizeの指定は不要では?

Me.hWnd, lnghPrinter, Printer.DeviceName,ngBufSize,はちゃんと取得できてる?
Redim()の値を巨大(数万)にして試してみては。
ちなみに、我が家のプリンタだとDEVMODE構造体のサイズは1000バイトぐらいだったよ。
bytDevMode の配列の宣言はどうなってる?
あと、Option Base 1 にはしてないよね。



291 名前:デフォルトの名無しさん :04/01/25 12:18
>>287
APIでなくていいならNLST

292 名前:デフォルトの名無しさん :04/01/25 12:25
>>289
名前つきパイプ。Mailslot。

つか、「できますか?」って聞いてるってことは答えはbool値でいいのか?

293 名前:289 :04/01/25 12:43
292殿、ありがとうございました。
調べてみます。
質問の仕方も勉強しときます。。。

294 名前:デフォルトの名無しさん :04/01/25 13:13
>>289
マルチしたら後始末ぐらいしろ!

295 名前:デフォルトの名無しさん :04/01/25 13:22
使用するWin32APIについて教えていただきたく思い質問致します。
古いスタイルのオープンダイアログにおいて(OFN_ALLOWMULTISELECTをしていするオープンダイアログ)
右側にあるディレクトリを選択するツリービューを作成するにはどのようなWin32APIを使用すればいいのでしょうか。
ツリービューで自作しようと試みたのですが、あそこまで快適なものをつくるには私はあまりにもスキル不足です。
どうかご教授お願いします。

296 名前:デフォルトの名無しさん :04/01/25 16:14
>>295
IShellViewかIShellFolderでググルと答えが見つかるかも?


297 名前:デフォルトの名無しさん :04/01/25 19:02
>>288
どうやって再帰的にたどるんですか?
最初にファイルだけ取得して、その次にディレクトリみたいに
たどるんですか?ん?なんか訳分からなくなってきた。

298 名前:デフォルトの名無しさん :04/01/25 19:08
>>297
FtpFindFirstFile()とInternetFindNextFile()の組み合わせでディレクトリ内の
サブディレクトリを含めたファイルのリストが取得できる。
そのうち属性がディレクトリのものに対してそのディレクトリに移動して以下略。
WIN32_FIND_DATAについても調べろ。

299 名前:デフォルトの名無しさん :04/01/25 19:10
>297
ファイル/フォルダを再帰的にたどった経験は無いのか?

300 名前:297 :04/01/25 19:45
う〜む
下みたいに書いてみたけど、最初のサブディレクトリ見に行ったら終わっちゃう・・・
再帰が終わったあたりにFtpFindFirstFileをもう1回使ってみたら、今度は、
無限ループみたいになるよ。検索の開始位置って指定できるの?

Private Sub serFtpFile(strPath As String, lFtpSession As Long)
Dim lFindSession As Long
Dim lRs As Long
Dim tmpFileInfo As WIN32_FIND_DATA
Dim strTmp As String

mSerPath = strPath
lFindSession = FtpFindFirstFile(lFtpSession, mSerPath, tmpFileInfo, INTERNET_FLAG_RELOAD, 0&)

If lFindSession <> 0 Then
Do
mFtpFileNum = mFtpFileNum + 1
ReDim Preserve mFtpFileInfo(mFtpFileNum) As WIN32_FIND_DATA
mFtpFileInfo(mFtpFileNum) = tmpFileInfo

If tmpFileInfo.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY Then
DoEvents



301 名前:297 :04/01/25 19:46
続き

strTmp = strPath & StrConv(mFtpFileInfo(mFtpFileNum).cFileName, vbUnicode)
strTmp = left(strTmp, InStr(strTmp, vbNullChar) - 1) & "/"
lRs = InternetCloseHandle(lFindSession)
Call serFtpFile(strTmp, lFtpSession)

mSerPath = left$(mSerPath, InStrRev(mSerPath, "/", Len(mSerPath) - 1))

End If

lRs = InternetFindNextFile(lFindSession, tmpFileInfo)
If lRs = 0 Then Exit Do
Loop

End If
lRs = InternetCloseHandle(lFindSession)

End Sub

302 名前:297 :04/01/25 19:47
うわ、見難い・・・

303 名前:デフォルトの名無しさん :04/01/25 20:15
>>297
ローカルファイルだとこんな感じになるみたいだね。

http://www.sm.rim.or.jp/~shishido/subdir.html


304 名前:デフォルトの名無しさん :04/01/25 20:16
C言語からやり直しましょう

305 名前:デフォルトの名無しさん :04/01/25 20:26
Cかよ!

306 名前:デフォルトの名無しさん :04/01/25 21:12
>302-303

MFC でエクスプローラ風のFTPクライアントのサンプル作ったことあるけど、
再帰的処理はできずじまいだった。

ひとつのFTPセッションに対して複数の検索セッションを
作成することはできないような動作だった。

つまり Folder1/Folder2/Folder3 の階層があるとして、
Folder1 のファイル/フォルダを列挙している最中に、
再帰的に Folder2 のフォルダを列挙しようとしても
Folder1 ですでに検索セッションが使われているから
Folder2 の検索セッションの作成に失敗するみたいな。

以上、経験則です(根拠はありません)

307 名前:デフォルトの名無しさん :04/01/25 21:15
ポップアップメニュー(TrackPopupMenu)についての質問です。

ボタンを利用したメニュー(CreateToolbarEx)を作成しているのですが、
ポップアップメニューがモーダルなのか、
表示させたまま他のメニューを検知することが出来ずに悩んでいます。
(例えば「ファイル」のポップアップメニューを表示させたまま「編集」にマウスを移動させても、
「編集」のメニューが表示されないということです。)

専用のメッセージがあるのでしょうか?
それともポップアップメニュー側で何らかの処理をしなければならないのでしょうか?

(BCC + BCC Developer で作成しています。)


308 名前:297 :04/01/25 21:34
>>306
エー、そんな〜( ´・ω・)

309 名前:デフォルトの名無しさん :04/01/25 21:41
>>308
マルチセッションじゃなくてひとつの列挙が終わるまで待って次にいけばいいだけ

310 名前:306 :04/01/25 21:53
>308
まあ、そのサンプルではフォルダツリーを展開するタイミングでファイル、
ファイル/フォルダ一覧を列挙するようにしたから支障はなかったけどね。

まあ俺の経験則が事実だったとしても
フォルダ内のファイル/フォルダを列挙、検索セッションをクローズした後で、
サブフォルダを再起処理すれば、検索セッションは複数になることはないから
階層が深くなっても列挙できると思われ。

311 名前:306 :04/01/25 21:55
う、先を越された。。。

312 名前:デフォルトの名無しさん :04/01/25 22:00
FFFTPのソースでも見てみたら。

313 名前:デフォルトの名無しさん :04/01/25 22:19
API本に載ってた以下のコードで「未定義のシンボル item」という
コンパイルエラーが出ます。(コンパイラはBCC)

TVINSERTSTRUCT tvs;
tvs.item.mask = TVIF_TEXT;

試しに tvs.DUMMYUNIONNAME.item.mask = TVIF_TEXT;
と打ってみたらコンパイルが通ってプログラムも動いたのですが
ネットで検索してもどのサンプルコードも tvs.item.mask
という風になっているのでどこか自分が間違っていると思うのですが
どこが悪いんでしょう?


314 名前:デフォルトの名無しさん :04/01/25 22:31
>>313
#define _WIN32_IE 0x0300
こんなの使ったら出なくなるだろうね。 なんで共用体使ってるかは知りません。

315 名前:デフォルトの名無しさん :04/01/25 22:32
TVINSERTSTRUCT tvis;
CString str;

// ルートは1つだけの方が良いです。
tvis.hParent = TVI_ROOT;
tvis.hInsertAfter = TVI_FIRST;
tvis.itemex.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;;
tvis.itemex.pszText = "ルート";
tvis.itemex.iImage = 0;// 通常時の画像
tvis.itemex.iSelectedImage = 1;// アイテムが選択されたときの画像

俺のサンプルコードでは itemex 使ってるな。
VC++だけど。

316 名前:デフォルトの名無しさん :04/01/25 22:41
たぶんUNION周りの言語仕様に関係あるんでは?
構造体の定義を見ると、
#define _WIN32_IE 0x0300
だとUNIONが含まれないから、逆に
item を選べると思う。

317 名前:デフォルトの名無しさん :04/01/25 23:04
>>314-316
#define _WIN32_IE 0x0300 を試してみましたがうまくいかずです。
ちょっと簡単にわかりそうにないんでしばらく共用体名を入れて打ってみます。

318 名前:デフォルトの名無しさん :04/01/25 23:20
キーワードをURLエンコードしたのを検索エンジンのURLにつなげてブラウザに渡すツールを
作ってるんですが、SJISとEUCにはとりあえず対応できたのですがUTF-8に対応できないでいます。
文字列を UTF-8 に変換
http://www.geocities.co.jp/SilkRoad/4511/vb/utf8.htm
このページの人と同じくwin95でも使いたいのですが(できるだけ)win32apiだけをつかって
実現するにはどうしたらいいでしょう?BCCで、なんですが。

319 名前:デフォルトの名無しさん :04/01/25 23:27
UCS2だかUTF-16に変換した後
ルールに沿ってUTF-8にすればいい

320 名前:1/2 :04/01/25 23:49
現在、Win32 API で画像ビューアを作ろうとしています。
(使用するためというよりは、勉強のためです)

現在の仕様は

1. CreateDIBSection() でオフスクリーン(クライアント領域のコピー元)を作成。
  (BMP-A)
  ※ サイズは GetClientRect() で取得したサイズ分です。
2. 表示対象画像を CreateDIBSection() で作成した領域にロードする。
  (BMP-B)
3. ロード完了時に BMP-B をオフスクリーンである BMP-A に StretchDIBits() で
  転送する。
4. WM_PAINT メッセージではオフスクリーンである BMP-A を BeginPaint() で
  取得した物理デバイスコンテキストに対して StretchDIBits() で転送する。

以上のような感じで作っています。
初めは、オフスクリーンと呼ばれる物を介さず、ロード画像である BMP-B を
直接物理デバイスコンテキストに転送していたため、チラツキがあったのですが
この問題を解消する事ができました。

321 名前:2/2 :04/01/25 23:49
しかし、この状態でウィンドウのサイズを変更されると
オフスクリーンは、元の大きさのクライアント領域のサイズ分しか
持っていないためウィンドウサイズを大きくされると左上に寄って
表示されてしまいます。

色々考えて、現在のディスプレイの解像度分の大きさを確保すれば
どんなにウィンドウサイズを大きくしてもそれを超える事は無いと
思ったのですが、起動中に解像度を変更されたときの事なども
考慮しなくてはならなかったりと、苦戦中です。

そこで質問なのですが、画像ビューアなどのアプリケーションは
どんな仕組みで作っているのですか?
それとも、現在作成中の画像ビューアの仕様の考え方は
根本から間違っているのでしょうか?

いろいろ考えたのですが、なかなか良い方法が思いつきません。
よろしくおねがいします。

322 名前:デフォルトの名無しさん :04/01/26 00:03
ウィンドウのサイズが変更されたら裏画面作り直せばいいんでないの?

323 名前:318 :04/01/26 00:23
>>319
>UCS2だかUTF-16に変換した後
…それはどうやればいいのでしょう?

324 名前:デフォルトの名無しさん :04/01/26 00:25
>>323
そんくらい[win32api UTF-16 変換]くらいでぐぐれよ。
ttp://forums.belution.com/ja/vc/000/191/89.shtml ここでも見てろ

325 名前:297 :04/01/26 00:34
>>310
ヽ(´∀`)ノでけたー
ありがとー


326 名前:320 :04/01/26 01:18
>>322
レスありがとうございます。
タスクマネージャを起動しながらフリーの画像ビューアを動かして
メモリの動きを観察したのですが、画像オープン時にメモリに動きはありましたが
ウィンドウサイズを変更したり拡大や縮小を行ってもメモリに変化がなかったため
何か特殊な方法があるのかなと思い質問してみました。

良いお知恵をお持ちの方がいましたらよろしくおねがいします。

327 名前:デフォルトの名無しさん :04/01/26 09:31
>>326
普通の画像ビューワは裏画面使わず、元画像をStretchDIBitsで直接表示してると思うけど。

328 名前:デフォルトの名無しさん :04/01/26 12:53
モノが画像ビュワーなんだから、

・画像ファイルのサイズにあわせたDIBSectionを作ってそこに画像展開。
・描画要求があった場合適宜そこからBitBlt。

だろ、普通。
ちなみに最小ウィンドウサイズ以下の画像を読んだときは最小ウィンドウサイズに
あわせたDIBSectionを背景色で塗りつぶしてから画像展開、
最大ウィンドウサイズは画像サイズまでに制限、ということをしておくと
WM_ERASEBKGNDを省けるのでウィンドウリサイズ時のちらつきがほぼなくなる。

329 名前:デフォルトの名無しさん :04/01/26 15:04
VBプログラマ質問スレ(6.0以前) Part31から来ました

客先からメッセージボックスの変更以来がありました
"続行","再入力"と"続行","中止"です。
オリジナルでダイアログボックスを作ってはダメ
といわれました。どうすればキャプションを変更できるのでしょう?


330 名前:デフォルトの名無しさん :04/01/26 15:28
そんな客との取引をやめる。

331 名前:デフォルトの名無しさん :04/01/26 15:30
別スレッドからボタンのテキストを書き換える

332 名前:デフォルトの名無しさん :04/01/26 15:44
MB_CANCELTRYCONTINUE
で作ってあとは運用回避って仕様にしてもらう

333 名前:デフォルトの名無しさん :04/01/26 16:36
>>320
ビューポートとかそのあたりを調べてみたらいーと思う。

334 名前:デフォルトの名無しさん :04/01/26 17:43
すいません。
writefile関数を使ってファイルに出力しようとしているのですが

***********,
*******,
のように1つのデータをカンマで区切って改行させたいのですが
ご教授ください。
VC WindowsXPです。

335 名前:デフォルトの名無しさん :04/01/26 18:05
writefile("***********, \n*******, \n");

336 名前:デフォルトの名無しさん :04/01/26 18:18
>>334
Win32APIとは特に関係ないかと。
文字列バッファ確保して [,]を[,\n]に置き換えて保存。

あたりまえだが、WriteFileってバッファの内容をを保存する関数です。
バッファの内容を書き換えるのは自分自身。

337 名前:デフォルトの名無しさん :04/01/26 19:51
改行させたいなら\r\nにしないと化けるぞ

338 名前:デフォルトの名無しさん :04/01/26 21:23
質問があってここにきました。
まだまだ全然理解してないですけど、一応C2年目になる社会人プログラマーです。

http://www.ise-ics.co.jp/ics/system/virtualcomportcontents.htm

↑のモノに近いというか、まんまなんですけど
仮想的にシリアルポートを作るモノを作れと、先週から依頼されました。

自分の知識と周りの人に聞いてもお手上げ状態です。
説明しづらいですが、どこから入っていいか解からないので
何かアドバイスあればお願いします。

339 名前:デフォルトの名無しさん :04/01/26 21:36
>>338
この辺を取っ掛かりにしてみては?
http://allabout.co.jp/career/clerk/closeup/CU20030705A/

340 名前:一星 ◆lLk3AcE9Dg :04/01/26 21:40
 ここ投稿頻度すごいな……。

341 名前:デフォルトの名無しさん :04/01/26 21:45
>>338
第1段階:シリアルポートの通信を理解する
第2段階:ソケット通信を理解する
第3段階:両者のIFを橋渡しする

今どのへんなんだ?

342 名前:デフォルトの名無しさん :04/01/26 21:55
>>341
今はまだ、木曜までにスケジューリングするとこです。
3月半ば目処って言われてるけど、いかんせん先がまったく見えません。

自分はCしかわからないんですけど、どうなんでしょう…


343 名前:デフォルトの名無しさん :04/01/26 22:00
>>342
おまいのスキルおよび
どの程度のものを要求されてるかによる
338のリンク先みたいなレベルのだったら
ドライバ作らないといけないから結構きついぞ

344 名前:デフォルトの名無しさん :04/01/26 22:11
>>342
動作させる環境は分かってるの?
DDKは持ってる?

俺も結構きついんじゃないかと思う。


345 名前:デフォルトの名無しさん :04/01/26 22:18
>>343
ドライバ作ってくれと言われました。
ものとしては、リンク先のもので言えば
仮想シリアルポートの設定ってのだけできればいい感じなのです。

>>344
環境はWin2kですね。
DDKは確認してみないとわかりませんが、たぶんあると思います。
周りもきついって言ってますね…

会社でこのスレ見れればいいんですけど、2chはロックかかってるんですよねぇ…

346 名前:デフォルトの名無しさん :04/01/26 22:21
★スタンダード版価格

ライセンス数 シングル 3 5 10
定価 12,800 38,000 62,000 120,000
※消費税が別途かかります

347 名前:デフォルトの名無しさん :04/01/26 22:25
注文か

348 名前:デフォルトの名無しさん :04/01/26 22:29
そこのを相談したんですけど、金は出せないみたいに言われました

349 名前:338 :04/01/26 22:31
名前入れますね。
そこのってのは338のURLのです。

350 名前:デフォルトの名無しさん :04/01/26 22:38
>>348
10万かそこらの金が出せない?じゃぁあんたの人件費は誰が出すんだ?

351 名前:デフォルトの名無しさん :04/01/26 22:44
>>350
to C で売る製品に使いたいんじゃないの?
例えばFAX モデムを仮想化して、「インターネットで FAX が送れるサービス」とか。
そういう用途だと1ライセンス1万だとあれだよね。

352 名前:338 :04/01/26 22:54
>>350
予算の問題なのでしょうがないんです。

>>351
市販する製品ではないんですよね。

アプリ(PC1)----シリアルケーブル----データ管理アプリ(PC2)
現状がこういうのですが

アプリ(PC1)----ドライバ----データ管理アプリ(PC1)
このようにして使いたいそうなのです。



353 名前:デフォルトの名無しさん :04/01/26 23:07
>>352
シリアルポート複数ついてて、両端のアプリが使用ポート変えられるなら
アプリ(PC1/COM1)----シリアルケーブル----データ管理アプリ(PC1/COM2)
つー感じにできる気がするな。


354 名前:338 :04/01/27 00:31
>>353
ポートは両方のアプリとも変えられます。
ただ、シリアルケーブルを必要としない環境にしたいみたいです。


355 名前:デフォルトの名無しさん :04/01/27 00:43
つーか、アプリ書き換えるならともかく、それだけのために仮想シリアルドライバ作るって
絶対コスト計算間違ってるな。

356 名前:338 :04/01/27 00:48
やっぱり結構でかいんですかねぇ…
とりあえず今日は寝ます。
助言くださった皆さんありがとうございました。
明日進歩なかったらまた来るかも…
もしくは会社でなんとか見れればなぁ…

357 名前:デフォルトの名無しさん :04/01/27 01:05
大学のLANに穴あけるためだけに仮想Ether作った奴も
いることだし、お前もがんばれよ。

358 名前:デフォルトの名無しさん :04/01/27 01:34
>>357
大学のLANに穴あけるためなのか・・・

359 名前:デフォルトの名無しさん :04/01/27 01:56
質問です。

NTFSでハードリンクを使いDLLを2つに見せた場合のDLLのグローバルデータに関する物です。

そのハードリンクを使ったDLL達(A.DLL, B.DLL)にプロセス(P)がアタッチしたとします。

その時、A.DLLとB.DLLのグローバルデータは全く別物となるのでしょうか、それとも同じ領域
になってしまうのでしょうか。

スレ違い且つ実験しろって感じの質問で申し訳有りませんが…。

360 名前:デフォルトの名無しさん :04/01/27 02:01
>>359
別物
Win32プロセスについて勉強しろ

361 名前:デフォルトの名無しさん :04/01/27 02:04
まさかグローバル変数を共有させないように DLL を2つにしているとか?
ご苦労さん。

362 名前:359 :04/01/27 02:13
違うよ…。

#pragma なんちゃらってやると全てのプロセスでグローバルな変数が作れるじゃんさ…。

そっちのグローバルデータの事を言いたかった。正式な呼び方が分からなくてすまんか
った。

兎に角そっちのグローバルデータの場合に就いて聞きたい。

363 名前:デフォルトの名無しさん :04/01/27 02:14
>>362
>>360

364 名前:359 :04/01/27 02:18
そうだったんですか、どうも。

365 名前:デフォルトの名無しさん :04/01/27 03:13
なんか危なっかしいな。
素直にメモリマップドファイルで共有して、
共有したいプロセス間でオブジェクト名を
一致させた方が安全な気がするけど…


366 名前:デフォルトの名無しさん :04/01/27 03:15
>>359
質問するときは使用コンパイラとバージョンも書け
どのみち>>360だが

367 名前:デフォルトの名無しさん :04/01/27 08:46
仮想COMって結構簡単にできたきがしたけどなぁ...
数年前のインターフェースって雑誌に特集あったような気がする
バックナンバーしらべたらでてくるかもしれない

368 名前:デフォルトの名無しさん :04/01/27 11:49

質問なのですが、

かなりいろんなサイズのフォント作成して、
TextOutするアプリを作ってて、Win2kまではフツーに動く。

が、
XPで動かすとTextOut終わってフォントDeleteしても
仮想メモリが増え続けて、アプリを終わらせないと
戻らない。(リソースの明示的リークはないと思う)

こんな現象に出くわした人いますか?


369 名前:デフォルトの名無しさん :04/01/27 11:50
AllocConsole();で開いたコンソールウィンドウを、プログラムから最大化できるのでしょうか?

370 名前:デフォルトの名無しさん :04/01/27 12:36
>>368
原因がそれ以外にあることは考えられないですか?
別の解放忘れがないか確認はされてますよね?

371 名前:デフォルトの名無しさん :04/01/27 13:17
>>370
100%とはいいませんが、いらない要素を削って
あれこれテストプログラムを作成しても
再現してますので、別の理由ではないと思うんですが。

MSのExcelXPをWinXP上で起動して、セルに文字つっこんで
表示倍率変えまくったりしても程度の差こそあれ、
似たような現象が出て、仮想メモリサイズが
肥大化するんですよね。

何かのキャッシュとして裏で取られているのであれば、
破棄の方法が知りたいところなんですが。

372 名前:びら :04/01/27 13:27
携帯から失礼します。
VB.netとCで作るDLL間で構造体の配列の受け渡しをしたいのですが上手くできません。
どうすれば実現出来るか知っている方いますか?


板違いでしたらスイマセン

373 名前:369 :04/01/27 14:02
自己解決できました。

374 名前:デフォルトの名無しさん :04/01/27 14:30
>>371
OSのキャッシュの持ち方が違うんでね?
実害がなければほっとけば良いと思う。

>>372
同一スレッドならばポインタを渡してやれば良いだけだと思うんだが・・・
値渡しにしてみるとか、メモリマップドファイルを使うとか。


375 名前:デフォルトの名無しさん :04/01/27 14:39
XPは良い意味でも悪い意味でも厳格にいろんなもの取得してくるからねぇ
キャッシュもがっちりもってるかもしれない

376 名前:272 :04/01/27 15:22
>>290
ご回答ありがとうございます。

>Me.hWnd, lnghPrinter, Printer.DeviceName,ngBufSize,はちゃんと取得できてる?
一応、全部それらしい値がはいっていました。

>Redim()の値を巨大(数万)にして試してみては。
>bytDevMode の配列の宣言はどうなってる?

bytDevMode(731)でした。
bytDevMode(10000)で試してみましたが、結果は同じでした。

>あと、Option Base 1 にはしてないよね。
大丈夫でした。



377 名前:368,371 :04/01/27 15:32
>>374
困ってます。

アプリケーションの作りがあまりよくないのかも
しれませんが、マッピングモードを使わずに
無段階に表示倍率変更できるので、
気がつくと数100Mなんてことになってます。

表示方法を根本的に変更しないと対応不可ですかねぇ。

378 名前:デフォルトの名無しさん :04/01/27 15:37
>>374
どうして素直にP/Invokeのことを教えてあげないの?

379 名前:デフォルトの名無しさん :04/01/27 17:04
>>378
ピンボケって何ですか?

380 名前:374 :04/01/27 19:29
>>378
.NETだったんだね。見落としてたよ。


381 名前:デフォルトの名無しさん :04/01/27 22:18
>>356
別にデバイスドライバはでかくもないし、>>367 が書いてる通り COMM ぐらいならそんなに難しいわけじゃない。

ただ、お作法が普通のアプリケーションと違うし、何よりバグった時に OS もろとも死んじゃうことも多々あるわけだから、デバッグがちと大変。

「将来デバドラ作ることも多々あるから、今回は勉強だ〜。」とか言う目的があるならともかく、今回の目的のためだけに作るというなら >>355 が正しい。

382 名前:デフォルトの名無しさん :04/01/27 23:25
ユーザーモードドライバなんだからOSが死ぬことはないだろ

383 名前:デフォルトの名無しさん :04/01/28 03:13
ビットマップとかの画像を回転して(表示する角度を変えて)表示させたりするには自力でやらないと無理でしょうか?
そのためのAPIとかは無いでしょうか?

384 名前:デフォルトの名無しさん :04/01/28 06:39
Win32APIで開いたファイルハンドルから、fgets()で文字列を読みたいときは
どうすればいいのでしょうか?

fgets()相当のWin32APIはあるのでしょうか?
あるいは、HANDLE->FILE*へ変換することはできるのでしょうか?

おねがいします。

385 名前:デフォルトの名無しさん :04/01/28 07:58
>>384
最初からfopenで開けばええじゃないか

386 名前:デフォルトの名無しさん :04/01/28 08:56
>>384
SetFilePointer
ReadFile
あたりはどうですか?

387 名前:デフォルトの名無しさん :04/01/28 09:53
>>384
APIじゃないけど_open_osfhandleとfdopenでFILE*に変換できる

388 名前:デフォルトの名無しさん :04/01/28 10:44
>>383
自力でやらなくてもできるよ
APIあるよ

389 名前:デフォルトの名無しさん :04/01/28 12:10
教えてやれよケチンボゥ

390 名前:デフォルトの名無しさん :04/01/28 12:17
GDI+?

391 名前:デフォルトの名無しさん :04/01/28 12:19
>>383
NT/2000とかならPlgBltとか
9Xは知らない

392 名前:デフォルトの名無しさん :04/01/28 12:52
>>383
DirectXとか

393 名前:ゆう :04/01/28 14:02
質問です。

クライアントで「通常使用するプリンタ」に設定されているプリンタをサーバ側から取得する事って可能ですか?

394 名前:デフォルトの名無しさん :04/01/28 16:32
MCIからMPEG(動画)を再生できますか?

395 名前:デフォルトの名無しさん :04/01/28 16:54
mpgもaviも再生できたよ、確か

396 名前:デフォルトの名無しさん :04/01/28 18:16
APIのネームの前についている「Rtl」やら「Ldr」やらZWってのはどういう意味があるんでしょうか?
名前がプレフィックスだと言うところまでは分かったんですが、それ以上は・・・。

397 名前:デフォルトの名無しさん :04/01/28 18:31
それDDKじゃねーの?

398 名前:デフォルトの名無しさん :04/01/28 19:46
NTDLL.DLL を覗いたんかね

399 名前:384 :04/01/28 21:17
>>385,386,387
ありがとうございます。

_open_osfhandleとfdopenを調べてみます。

400 名前:デフォルトの名無しさん :04/01/29 09:58
DDEとして登録してある拡張子のファイルをダブルクリックしたとき、
エクスプローラはどういうコードを実行しているのでしょうか?

いろいろ調べてみたんですが難しいです。
ヒントだけでもお願いします。

401 名前:デフォルトの名無しさん :04/01/29 10:13
>>400
(゚Д゚)ハァ?
何がしたいのか正直に言ってみ?
エクスプローラと何か関係あるのか?


402 名前:400 :04/01/29 10:36
エクスプローラというより、ShellExecute()というべきだったかもです。

403 名前:デフォルトの名無しさん :04/01/29 11:13
>>402
レジストリ見てDDE設定があったらDDE通信するだけじゃネーノ?

404 名前:デフォルトの名無しさん :04/01/29 12:15
単にcommand filenameとして実行しているだけでは。実行ファイルにD&Dした時も同じ。

405 名前:デフォルトの名無しさん :04/01/29 12:38
漏れは未だに>400が何をしたいのかわからん。
DDE送りたいだけなら送ればいいし
ShellExecute()使いたければ使えばいいだけぢゃん。

406 名前:デフォルトの名無しさん :04/01/29 12:55
>>404

407 名前:デフォルトの名無しさん :04/01/29 13:03
>>396
RtlはRuntimeの略(Cランタイムの代わりにカーネルモードで使う関数など)
LdrはLoaderの略(モジュールのロード関係)
Zwは謎

408 名前:400 :04/01/29 13:18
DDEを送りたいです。
で、ShellExecuteと同じようにDDEを送るにはどうすればいいのかが
わからないのです。

409 名前:デフォルトの名無しさん :04/01/29 13:21
>>408
キーワード的には

 動的データ交換管理ライブラリ

かなぁ…

410 名前:デフォルトの名無しさん :04/01/29 13:42
>>400
適当に見当つけて "DDESPY" でググって見たらそれらしいものがヒットしたよ。
使ってみれば?

411 名前:400 :04/01/29 14:00
>>409,410
ありがとうございます。DDESPYを使いながらいろいろ調べてみます。

412 名前:396 :04/01/29 17:38
検索しても出てこないから困ってたんです。
407さんありがとうございましたー・・。

413 名前:デフォルトの名無しさん :04/01/29 19:19
質問です。
たとえば Filet="c:\test.txt"
として、これを
プログラムで使える形に"c:\\test.txt"にする方法を
ご教授願えませんでしょうか。

414 名前:デフォルトの名無しさん :04/01/29 19:33
\を\\にすればいい。

てゆうか\\なんかプログラムで使わねーがな。

415 名前:デフォルトの名無しさん :04/01/29 19:35
Windowsプログラム作っていたら、作っているフォルダに
RCa02372
RCa03936
RCb03936
Rca01756
などと言うファイルが知らない間に出来ていました。(拡張子なし)
全てのサイズが4.01KBでファイルの種類が”ファイル”と書いてあります。
これは何なのでしょうか?知らない間に出来ていたので少し気になります。

416 名前:デフォルトの名無しさん :04/01/29 19:39
>Windowsプログラム作っていたら
おまえのプログラムが作ったのかもしれないし
IDEが作ったのかもしれないし
何らかの管理プログラムが作ったのかもしれない

情報を小出しにするなボケ

417 名前:デフォルトの名無しさん :04/01/29 19:41
ああ、RCファイルね

418 名前:デフォルトの名無しさん :04/01/29 19:42
少し気になるぐらいだったら大丈V
俺は全然気にしないよ

419 名前:413 :04/01/29 19:43
失礼しました。
説明が足りませんでしたが
Filetの部分はシステムから得る文字列です。
OPENFILE構造体で
ofn.lpstrFile = Filet; として
このFiletの中身をc;\の部分にc:\\として
\を付加したいのですが、どなたかご教授お願いします。

420 名前:デフォルトの名無しさん :04/01/29 19:44
>>415
この前メールで届いたexeファイルを実行すると安全に削除できるよ!

421 名前:デフォルトの名無しさん :04/01/29 20:23
>>419
それでも全く説明が足りていない。
"C:\"がどこから来たのか。
最初から"C:\\"と書き込んでおけば良いだけでね?
それかCStringT::Replaceか?


422 名前:デフォルトの名無しさん :04/01/29 20:24
>>419
であれば、変換する必要など無い。
\\としなきゃいけないのはどんな場合かよく考えてみな。

423 名前:デフォルトの名無しさん :04/01/29 20:44
ファイルを開くダイアログでファイルを選択し、そのパスを取得。
それがFiletに収められる。(c:\test.txt)
VCでFiletの中身のc:\だとその文字列を
パスと指定してやっても動作しないので
c:\\test.txtといった形にしたい。


424 名前:デフォルトの名無しさん :04/01/29 20:46
>>423
それはおバカですなぁ

425 名前:デフォルトの名無しさん :04/01/29 20:48
win32のDibセクションについて教えてください。

ウィンドウに直接描画するときはWindowsがハードに図形描画命令などを送るんだと思うんですが
Dibセクション(メモリデバイスコンテキストに選択したやつ)にLineToなどを描画するときはソフトでビット配列に書きこむわけですか?
それとも一度ハードに送ったりするんですか? あとDDBを選択したmemDCに描画するときもソフトでやっているんですか?   疑問なのでおねがいします。


426 名前:デフォルトの名無しさん :04/01/29 20:49
煽り

427 名前:デフォルトの名無しさん :04/01/29 20:55
画像を90度回転させてBitbltみたいにコピーするAPIってありますか?

428 名前:デフォルトの名無しさん :04/01/29 20:55
>>425
どっちもソフト。

429 名前:デフォルトの名無しさん :04/01/29 21:17
実は無知なやつが

430 名前:デフォルトの名無しさん :04/01/29 21:30
>>425
もまいはGDIだのドライバだのの存在理由を否定しているわけだが

431 名前:デフォルトの名無しさん :04/01/30 01:55
ExtractAssociatedIcon という関連付けされたICONのハンドルを得るというAPIがうまくつかえない・・
---------------
HINSTANCE g_hInst;
HICON hIcon;
 ・
 ・
 ・
switch(uMsg){
case WM_COMMAND:
switch(wParam){
case IDC_BUTTON1:
hIcon = ExtractAssociatedIcon(g_hInst, "c:\\test.txt", 0); ←この行で強制終了になります。
---------------
c:\test.txtに関連付けられたEXEファイル(メモ帳)のアイコンハンドルを
取得したいのですが、どうすればいいのですか?
ちなみにIDC_BUTTON1はウインドウ上に作ったボタンのIDです。

WindowsXP VisualC++6.0です。

432 名前:デフォルトの名無しさん :04/01/30 02:02
今年度のバレンタイン大作戦

女性店員がレジにいるコンビニでチョコを買う

わざとチョコを受け取り忘れて店を出る

女性店員が走って渡しに来る「あの・・・これ・・・」

ちょっぴりバレンタイン気分

433 名前:デフォルトの名無しさん :04/01/30 02:08
>>431
ExtractAssociatedIconの3番目の引数は WORD型の変数へのポインタ を渡さなきゃいけないので0じゃだめです。

WORD IconID=0;
ExtractAssociatedIcon(g_hInst, "c:\\test.txt", &IconID); こんなかんじで。

434 名前:デフォルトの名無しさん :04/01/30 02:14
>>432
それいいね!

435 名前:デフォルトの名無しさん :04/01/30 02:16
>>434
こぴぺに…
いまさら…

436 名前:431 :04/01/30 02:17
>>433
すばやいレス感謝します。おかげで正常に動きました。

HELPの LPWORD lpiIcon と書かれているところに引っ掛かってはいたのですが、
WORDで宣言して、0を代入して&WORDでアドレスにすればいいわけですね。
LPWORD IconID; で宣言したらどうすりゃいいのかなーと悩んではいました。

437 名前:デフォルトの名無しさん :04/01/30 08:50
>>431
そういう指定のAPIたくさんあるから解決できてよかたね

438 名前:425 :04/01/30 08:58
ありがとうございます。

439 名前:デフォルトの名無しさん :04/01/30 14:52
質問です。
DirectXGraphicsなプログラムを作っていて、必要が出てきて「猫でもわかる〜」を見ながら、
リストビューをつけました。
リストはウィンドウにうまく張り付いて表示されるように出来たのだけど、このリストを
クリックしてしまうと以降、親ウィンドウのキー入力やらマウス入力のメッセージが
来なくなってしまうんです。一度ほかのプログラムを最前面にしたりすると直るんだけど。

どこを直したらいいですか?

440 名前:デフォルトの名無しさん :04/01/30 15:34
それAPIの質問でなくて自分のプログラムのバグだろ
スレ違いじゃね?初心者質問スレにソース貼って聞いてみれば?

441 名前:439 :04/01/30 16:04
>>440
それはもう間違いなくバグなのですけど、リストビューにキー入力を持って行かれない方法か、
あるいは親ウィンドウに速やかにキー入力を返却する方法自体が判らなくて調べもつかずに
弱っているのです・・・。

442 名前:439 :04/01/30 16:10
ああでも、おもくそ初心者な質問なので、初心者スレに逝った方が良さそうですね。


443 名前:デフォルトの名無しさん :04/01/30 17:21
SetFocus

444 名前:439 :04/01/30 17:28
>>443
キー入力が戻ってきました!何とかなりそうです。
心から感謝します!


445 名前:デフォルトの名無しさん :04/01/30 17:37
バグの隠蔽方法教えても仕方ないだろ

446 名前:427 :04/01/30 18:41
やっぱりバッファに書き出して配列いじくるしかないですか?

447 名前:デフォルトの名無しさん :04/01/30 19:00
>>445
バグの隠匿じゃないよ
エディット、リストやツリーのような標準コントロールのうちいくつかは
自分がクリックされたときにキーボードフォーカスを自身に設定するので
自作コントロールでキーボード入力を受けたければ
そのウインドウをフックしたりするか、もしくは適切なタイミングで
キーボードフォーカスを設定しなおす必要がある

448 名前:デフォルトの名無しさん :04/01/31 11:29
GetPrivateProfileStringA関数で文字列を取得した際に、
セミコロンのコメント部分まで読み込まれてしまいます。
どうすればコメント部分を省いて読み込んでくれますか?

449 名前:デフォルトの名無しさん :04/01/31 12:16
>>448
セミコロンてどこでも書けるの?行頭だけじゃ?

450 名前:デフォルトの名無しさん :04/01/31 20:43
あるEXEファイルが、コンソールアプリなのかWIN32アプリなのかを知るにはどうすればいいのでしょうか?

お願いします。

451 名前:デフォルトの名無しさん :04/01/31 20:49
>>450
ヘッダーを見る。

452 名前:デフォルトの名無しさん :04/01/31 20:50
PEオプションヘッダの中にあるSubsystemの値を見ればいい
IMAGE_SUBSYSTEM_WINDOWS_GUI
IMAGE_SUBSYSTEM_WINDOWS_CUI
dosアプリケーションかということなら、
通常のexeファイルはdosアプリかつwindowsアプリなので、差は無い

453 名前:450 :04/01/31 21:32
ありがとうございます。
早速チャレンジしてみます!

454 名前:デフォルトの名無しさん :04/01/31 23:55
たまにフリーソフトで見かける解像度変更ソフトで、
ChangeDisplaySettingsを使わずにリフレッシュレートを
設定している物があるんですが、
あれってどうやって実現しているのでしょうか?


455 名前:デフォルトの名無しさん :04/02/01 01:01
質問させていただきます。

今エディットボックスにどんどんと情報を追加表示していくプログラムを作っています。

「複数行」「垂直スクロールバー」「垂直オートスクロール」「改行を許可」でエディットボックスをつくり、
SetWindowTextで流し込んでいます。

・SetWindowTextだと全情報を転送してるのであまり効率が良くない気が。
 エディットボックスに文章を「追加する」APIはありませんでしょうか。

・改行して情報を追加しているのですが、やはり最新情報として一番下の行を眺めていたいもの。
 エディットボックスのスクロールバーを一番下まで下げる(内容も一番下までスクロールさせる)には
 どんな感じにすればいいのでしょうか。
 SetScrollPosでスクロールバーを下げるだけならできたのですが、
 内容がスクロールしてくれません。

両方今のところMFCを使わず済ませたく思っています。
よろしくお願いします。

456 名前:455 :04/02/01 01:09
すいません、今ふと思いついた検索ワードからたどっていったら、
うまく2番目のほうは発見できました。
SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_LINESCROLL, 0, 65536);
こんな感じでOKですね。

1番目の質問だけよろしくお願いします。

457 名前:デフォルトの名無しさん :04/02/01 01:19
>>456
おれはこんな感じでやったことあるよ。
これが最適かどうかは自信ないけど。

void AddText(const char *msg)
{
 int len;

 len = GetWindowTextLength(hWNd);
 SendMessage(hWnd, EM_SETSEL, len, len);
 SendMessage(hWnd, EM_REPLACESEL, 0, (LPARAM)msg);
}


458 名前:デフォルトの名無しさん :04/02/01 06:22
CWnd::SendDlgItemMessage

459 名前:デフォルトの名無しさん :04/02/01 07:59
UNZIP32.DLLで解凍プログラムを作っています。
仕様書を見るとUnZipSetOwnerWindow関数で設定したウィンドウハンドルに、
解凍の進行状況に関するwm_arcextractメッセージを送信するとあるのですが、
「wm_arcextract」がヘッダーで定義されていません。
また、UNZIP32.DLLからのメッセージが来るはずのウィンドウを監視したのですが、
それらしいものは受信していないようです。

解凍進行中における情報が時々刻々欲しいのですが、どのようにすればいいのでしょうか。

460 名前:デフォルトの名無しさん :04/02/01 08:01
>>455
ログの表示みたいなことがしたいんだったら
エディットボックスじゃなくてリストボックスという手も。

461 名前:455 :04/02/01 10:30
皆様ありがとうございました。
最終的にこんな感じになりました。

nPos = SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_GETSEL, 0, 0);
n = GetWindowTextLength(GetDlgItem(hWnd, IDC_EDIT1));
SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_SETSEL, n, n);
SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_REPLACESEL, 0, (LPARAM)(p.getComment() + n));
SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_SETSEL, LOWORD(nPos), HIWORD(nPos));

追加型だし、自動でスクロールしてくれるしGoodです。

462 名前:デフォルトの名無しさん :04/02/01 10:49
VC6の質問です。
私はDEBUGとRELEASEの出力フォルダを同じにしてるのですが、
これだと、Releaseビルドしたあと、デバッグできなくなります。

出力ファイルを削除するなどの処理をすればいいのですが、
これを自動化する方法はないでしょうか?

463 名前:デフォルトの名無しさん :04/02/01 10:52
↑同じにしてるのは .exe だけです。

464 名前:デフォルトの名無しさん :04/02/01 11:05
そりゃReleaseしたら、DebugExeが上書きされてしまうのだからデバッグできなくなるさ。
何故一緒にしてるのかはわからんが、絶対に分けるべき。
Releaseはその名の通りRelease時にしか使わないし。

465 名前:462 :04/02/01 11:16
はい、デバッグできなくなる理由はわかってるんです。

問題はリリースのEXEがあって、かつDEBUG構成でデバッグをはじめたときに、デバッグの
EXEを自動で作りなおすいい方法が見つからないことなのです。

466 名前:デフォルトの名無しさん :04/02/01 11:18
>>465
DEBUG用のEXEの名前を変えたらどう?

467 名前:462 :04/02/01 11:23
>466
それだと、iniファイルとかも変わってしまうので(私の場合)
ちょっとダメなのです。

468 名前:デフォルトの名無しさん :04/02/01 12:14
要は、「Releaseフォルダの中にある各種設定ファイルをデバッグの時にも使いたい」
ということなのかな?
そのためにDebugとReleaseを同じフォルダにしたいとか?

469 名前:デフォルトの名無しさん :04/02/01 12:16
各種設定ファイルは○○フォルダの中に置かないぞ。
デフォだと起動場所はdswファイルと同じ場所ということになっている。

debug/test.exe
release/test.exe
test.dsw
test.dsp
main.cpp
mode.ini


ちゃんとdebug/release両方同じ動作mode.iniが読める

470 名前:462 :04/02/01 12:56
>469
CurrentDirectoryがdswのある場所になるということですよね。
私の場合CurrentDirに関係なくEXEのあるフォルダになってしまっています。

あと、自分自身への引数つきのショートカットとかもあちこちにあって、
起動されるEXEを統一したいです。

471 名前:デフォルトの名無しさん :04/02/01 13:03
コマンドライン使えば?
パラメータありならデバッグモードとして判定して読み込むiniファイル名も変えればいいじゃん

472 名前:462 :04/02/01 13:04
>私の場合CurrentDirに関係なくEXEのあるフォルダになってしまっています。
iniファイルがです。

473 名前:デフォルトの名無しさん :04/02/01 13:18
>>469はカレントディレクトリにiniファイルがあるという前提で
コーディングしているのか。
結構危険なやり方だな。

474 名前:デフォルトの名無しさん :04/02/01 14:43
なんか発想が逆だな。
まず、リリースビルドとデバッグビルドでディレクトリ分けて作られるのを前提にして、
他の要因をリリースとデバッグで切り替えられるような機構を考えるべきだろう。

リリース版はともかくデバッグ版は自分の環境のみで動けばよいのなら、
デバッグ版に限れば絶対パスでiniファイルを読み込んでも良いんだよ
(チーム開発してるなら別だが)


475 名前:デフォルトの名無しさん :04/02/01 15:26
自分も、設定ファイルをdebugとreleaseで共用できないのが気に入らなくて、
- project
 - debug
 - release
 - config
っていう構成にして、exe から相対パスで "../config/*" を見に行くようにしてる。

476 名前:デフォルトの名無しさん :04/02/01 16:29
>>473
そ、そうなんですか?
今まで作ってきたツールもすべてカレントにiniがおかれているのを前提にしてました
(iniがなかったらデフォ設定で起動)

477 名前:デフォルトの名無しさん :04/02/01 16:41
このスレで言うのもなんだけど、俺はC++でProfile系APIをラップしたクラスを作って、
任意のフォルダを指定できるようにしてる。
もちろんデフォルトではexeと同じフォルダにiniを置くようにしてる。

478 名前:デフォルトの名無しさん :04/02/01 16:53
>>476
はっきり言って、カレントディレクトリは当てにならんよ。

479 名前:デフォルトの名無しさん :04/02/01 16:55
ファイルダイアログ使ってカレント変わったらあぼーんだな

480 名前:デフォルトの名無しさん :04/02/01 17:23
カレントじゃなくてモジュールの実行パスが欲しいんじゃないの?
作成中のプログラムのショートカット作成して、作成したショートカットのプロパティ
で作業ディレクトリ変えてみな。読めなくなるから。

GetModuleFileName で起動した exe のパスを取得して、そこから ini ファイルの
パスを作れ。


481 名前:デフォルトの名無しさん :04/02/01 17:29
>>480
過去ログみればわかるけどそういう話じゃない。

482 名前:デフォルトの名無しさん :04/02/01 18:39
バッチファイルでも作っておいて
ビルドのたびに相互に.iniをコピーすれば?
プロジェクトの設定の中のビルド後の処理で
呼び出すようにでもして。

483 名前:デフォルトの名無しさん :04/02/01 18:40
初心者です。
右上の最大化とか最小化とかのボタンが変な数字とかになってるんですけど、何処を書き換えたらなおりますか?

484 名前:デフォルトの名無しさん :04/02/01 18:42
>>483
『フォントキャッシュ』でgoogle

でも、何でこのスレ?

485 名前:デフォルトの名無しさん :04/02/01 18:46
ネタですか?
ネタじゃないなら初心者板へゴー!

486 名前:デフォルトの名無しさん :04/02/01 22:47
ダイアログボックス上のツリービューについて質問します。

ラベル編集中にENTERやESCを押すとダイアログボックス自体が終了してしまいます。
この動作は、ダイアログボックス上のエディットコントロールと同様の動作なので、
当然のことと思っていました。

しかし、MSDN Q130691では、バグ扱いです。
編集を終了するかキャンセルするのが正しいとしています。

本当にバグなんでしょうか。

487 名前:デフォルトの名無しさん :04/02/02 00:02
そりゃ、マウスなしで編集確定する手段がないのは困るぞな、もし。

488 名前:デフォルトの名無しさん :04/02/02 00:20
>>483
ttp://homepage2.nifty.com/winfaq/fontstrouble.html

って、このスレに来るのはまだ早いようだね。

489 名前:486Get!! :04/02/02 01:10
>>487
なるほど、「確定」ですね。
ありがとうございます。

490 名前:デフォルトの名無しさん :04/02/02 01:23
PathIsRelative()のサンプルを見て、こんなのを書いてました。
int _tmain(int argc, _TCHAR* argv[])
{
char Path[] = "任意のパス";
if(PathIsRelative(Path))
cout << Path << "相対パス";
else
cout << Path << "絶対パス";
return 0;
}
隣家がエラーを出しました。
test.obj : error LNK2019: 未解決の外部シンボル
__imp__PathIsRelativeA@4 が関数 _main で参照されました。
だそうです。
インクルードディレクトリを調べました。
ヘッダファイルは存在します。
LWSTDAPI_(BOOL) PathIsRelativeA(LPCSTR pszPath);
との記述があります。
また、
#define LWSTDAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
とあり、呼び出し規約はきちんとしているみたいです。
どうして変な風に修飾されてるんでしょうか。
何かすごく基本的なことを間違えてるんでしょうか?

491 名前:490 :04/02/02 01:36
ライブラリリンクしてなかった・・・。
スレ汚してすいませんでした

492 名前:486Get!! :04/02/02 02:02
>>487
なるほどという気になったのですが、さて、
ラベル編集に入るにはマウス操作が必要ですよね。
だから確定するときもマウスを前提にして良いのではないかと考え直しました。

それとも、マウス無しで編集に入る方法があるのでしょうか。

493 名前:デフォルトの名無しさん :04/02/02 02:06
タブオーダーとか?

494 名前:デフォルトの名無しさん :04/02/02 02:14
F2

495 名前:486Get!! :04/02/02 04:06
>>494
ダイアログボックスでは不可、エクスプローラで動作しました。
ということは、実装すべしということですか。。。。(SDK)

#「バグ扱い」は言い過ぎでした。VC6付属のヘルプではBUGになっていますが、
# ONLINEでは変更されていました。

496 名前:デフォルトの名無しさん :04/02/02 08:26
>>495
MSとかのキーボードになんかは右クリックの役割もってるやつあるじゃん。
Appキーっていうrの?右Ctrlの左にあるやつ。
エクスプローラなら、それからポップアップメニューから名前の変更(ラベルの編集)するってのもできるよ。
だから、特別実装するって必要もないのかな??とか。よくラベル編集するものならショートカットとしてF2で実装するとか。

#たまにエクスプローラのくせでF2押すことあるけど編集できないソフトだとちょっと萎え。

497 名前:デフォルトの名無しさん :04/02/02 09:16
replace関数を使おうとしているのですが
定義されていない識別氏と出てきます。
algorithmをインクルードしています。
また、void replace(_FI _F, _FI _L, const _Ty& _Vo, const _Ty& _Vn)
の引数をご教授願えませんでしょうか
VC6.0 XP環境です。

498 名前:デフォルトの名無しさん :04/02/02 09:20
選択されて(反転している状態)いるファイルの絶対パスを取得したいのですが、
どのような方法でやればよいでしょうか?
例えば、Cドライブのtmpフォルダ内のa.txtファイルが選択されていたら、
[c:\tmp\a.txt]を取得という感じです。

499 名前:デフォルトの名無しさん :04/02/02 09:37
>>424
理由いえない馬鹿。
>>432=>>434うざい
>>443
何が言いたい

500 名前:デフォルトの名無しさん :04/02/02 09:38
早く答えろよーーーーーーーーーーーーーー
寝てるんじゃねえよーーーーーーーーーーーーーqqw


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.