Win32API質問箱 Build16

このエントリーをはてなブックマークに追加
やはりブロックしたくないならUIスレッドとロボット制御スレッドを分離した方が…
>>926
そうか、SetMapModeを設定したものを出力した時に、
縮小しているように見えたのは、DPIの設定が出来ていたということでしたか。
GetDeviceCaps(memhdc,LOGPIXELSX)が96のままだったので見過ごしていました。
納得しました。ありがとうございます。

ちなみに、この返り値96を変更するAPIはあるんでしょうか?
>>951
>「あんたのプログラムの動作」だよ。

それは要するに、メッセージや呼び出す API 一つ一つに常に注意して、
これ以降の処理はモーダルな動作に入るかどうかに気を配りながら
コーディングするしかない、という意味と解釈して良い訳ですか?

その点数が少ないのなら、そのような方針でも良いのですが、
もしそのような箇所が何十種類、何百種類も出てくると手に
負えなくなるのが目に見えるので。

本来、最初にスレッドを使うことを考えたんですが、それをやらずに
済むのならやりたくないので、もっと楽な方法がないか尋ねたんですが・・・
スレッドを使うことに抵抗があること自体、あまりにもスキル不足。
それはポインタがわからなくて関数化することに抵抗があるのと同じくらいの論外だ。
>>953
できない、システム依存。
画面の設定の詳細から変更した値が返る
>>955
スキル云々より移植性の問題が大きいのですが。
(シングルタスクの実行環境も考慮して実装している為)
元々言語自体に組み込まれているのなら
私も使う事に何のためらいもないのですが。
boostのthreads使えばいいじゃないか
>>957
・シングルタスクの実行環境
・モーダルな処理がある
・定期的な処理をする必要がある

普通に考えたら、何かあきらめないと無理だと思う。
>>957
ハァ? スレ違いか???????????????????????????????????
>(シングルタスクの実行環境も考慮して実装している為)

意味不明。
タイマーでも使えばいいんじゃねーの?
>>961
DOS とかも視野に入れてるってことだろ。
だったらなおさらスレッドにしたほうが良いだろ
イベント式じゃないOSだったらどうするんだよ
>>956
そうでしたか。ありがとうございました。
>>963
あぁ、明らかなスレ違いってことか。
擬似スレッドを自分で実装して、使うしかないな。
がんばれ。
>>963
Win32sとか
969高校生:04/02/22 10:31
SHBrowseForFolder()をつかってディレクトリを選択させようとしています。
この関数の結果を絶対パスにする方法はありませんか?

GetOpenFileName()なら、カレントディレクトリが変わっているので、
GetFullPathName()が使えたのですが、それもできません。
スレッドもまともに扱えないような人が作ったものを、
様様なOSで提供したとしても誰も欲しがらない。
そもそもシングルタスクって、いったい何のOSをターゲットにしてるんだ。

どうしてもマルチプラットフォームにしたいなら、それぞれで組め。
とりあえずWindowsではスレッドだ。それ以外に無い。
971デフォルトの名無しさん:04/02/22 12:08
Buttonを押すメッセージを送りたいのですが、うまくいきません。
SendMessage(hwndBtn, WM_LBUTTONDOWN, 0, 0);
SendMessage(hwndBtn, WM_LBUTTONUP, 0, 0);
なにがいけないのでしょうか?
972971:04/02/22 12:16
hwndBtnはEnumChildWindowsを使って取得しました。
GetWindowTextを使ってキャプションを見る限りは正しく
取得できていると思います。
>>969
SHBrowseForFolder()の返り血をSHGetPathFromIDList()で処理する。
974高校生:04/02/22 13:06
>>973
thanks you!

ところで、MSDNによると、
>The calling application is responsible for freeing the returned PIDL by using the Shell allocator's IMalloc::Free method.

これを呼び出したアプリケーションは、戻り値のPIDLを、シェルアロケーターのIMalloc::Freeメソッドを用いて解放する責任を負う。

とありますが、こんなかんじですか?

  LPITEMIDLIST p;
  p = SHBrowseForFolder(...)
//必要な処理
  IMalloc::Free(p);

もし解放しない場合は、メモリリークしますか?
>>974
::CoTaskMemFree()でどうぞ
976デフォルトの名無しさん:04/02/22 14:20
タスクトレイに常駐させる場合、
アイコンでなく文字列を表示させることはできますか?

ツールチップではなく、
「日付と時刻の調整」のように、
トレイに文字列を表示させたいのです。
文字をビットマップ化してください
SetMenuを実行するとRuntimeError216が発生して悩んでいます。
解決方法のご教授お願いします。

関連するソースは以下の通りです(Delphi 6 personal)。
hM := CreateMenu;
AppendMenu(hM,MF_STRING,IDM_FILE,'&File');
SetMenu(FHandle,hM);
※FHandleはクラスメンバでWndProcでウィンドウハンドルは代入済みです。

リソースで記述したメニューでも、
ウィンドウクラス登録時にwc.lpszMenuNameで設定した場合は、問題ないのですが、
WM_CREATEでLoadMenu、SetMenuで登録しようとするとやはりRuntimeError216が発生してしまいます。
979976:04/02/22 15:55
>>977
そうします
>>978
delphi刷れ池
>>978
CreateWindowで設定しないのはどうして?
CreateProcessで外部のコンソールアプリを実行して、その標準出力の内容を
ログとして出力したいのですが、実現方法(標準出力の取り込み方法)をご教授
願えないでしょうか。
パイプ
>>976
TClockのソースでも参考にすれ。
985978:04/02/22 17:29
>>980
C++でも起こるんですけど(^^;
(この場合はcpu100%に...)
Borland製(DelphiとBCC5.5.1)だから?

>>981
ウィンドウクラスで設定しておけば、問題ないのですが、
RuntimeError216が出る理由が解かるのでは?と思って聞きました。
>971
使ったこと無いけど"BM_CLICK"?
987デフォルトの名無しさん:04/02/22 22:52
やっとバグがとれたよ・・・。この喜びをみんなにも分かってほしい・・・。
じゃ、コードどっかにうpして。
>>989
ありがとうございます。
パイプを使うのですね。試してみます。
>>990
前スレか、前前スレあたりでコンソールからのパイプについては
私が質問&研究しまくった。
ログあさってくれ。

結局他人のツールは、パイプされるのを意識して作られた(flushが所々で行われている)ツール以外は、
リアルタイム取得が無理であきらめた。
>リアルタイム取得が無理であきらめた。
あきらめるもなにも受け取ったバッファをコールバックで
通知するようなインターフェースにしとけばいいだけの話では。
いや、多分そういうことじゃなくてバッファリングの話じゃない?
>>991は無効にできるのを知らなかったのだと思われ。
ライブラリレベルでのバッファリングは親アプリから制御できないだろ
新スレ立った?
>>985
ウィンドウクラスで設定しなくても、CreateWindowでダミーのメニューを与えておき、
あとで置き換えれば上手く行きませんか?
CreateWindowで与えないと、ウィンドウクラスのメニューしか使えなくなる気がします。
新スレ、誰か頼む。
998デフォルトの名無しさん:04/02/23 02:19
次スレ立てますた・・・。

http://pc.2ch.net/test/read.cgi/prog/1077470292/
999
1000たねむら:04/02/23 02:21
1000とはぞっとしない由、本来なら担当者を怒鳴りつけるところだが、
もそもそと苦言を呈しておく。

新スレ http://pc2.2ch.net/test/read.cgi/tech/1077470361/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。