Win32API質問箱 Build31

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。

  ∧_∧
 ( ´∀`) < ぬるぽ

過去スレ、関連リンクは>>3くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
2デフォルトの名無しさん:2005/04/29(金) 17:10:04
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__∧∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1
3デフォルトの名無しさん:2005/04/29(金) 17:10:24
-過去スレ
Build30: http://pc8.2ch.net/test/read.cgi/tech/1112345886/
Build29: ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
Build28:ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
Build27:ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
Build26:ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
Build25:ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
Build24:ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
Build23:ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
Build22:ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/
Build15:ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/
Build14:ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:ttp://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやーごめんなさい。」に巻き込まれた模様
4デフォルトの名無しさん:2005/04/29(金) 17:13:16
5デフォルトの名無しさん:2005/04/29(金) 17:14:39
急速にスレの質が低下してまいりました
6デフォルトの名無しさん:2005/04/29(金) 17:35:21
>>5
ワロタ
7デフォルトの名無しさん:2005/04/29(金) 17:56:07
>>1-2
10 秒かよ
8デフォルトの名無しさん:2005/04/29(金) 18:06:30
>>5
これはテンプレ入りだな。
9デフォルトの名無しさん:2005/04/30(土) 00:54:04
Advenced Windows
10前スレ796:2005/04/30(土) 05:04:12
>>797,>>798
ご紹介のページを参考に、ReadProcessMemory()で、ゲームの、デフォルト?セグメントにはアクセスできましたが・・・

アク禁のエリアが所々あって、適当なアドレスでアクセスしようとするとすぐ不正な処理エラーが出ます。

それと、やはりプログラムが取得したセグメントは一般には一つではないですよね・・・

やはりOSのメモリ管理情報からこうした情報を取得しなければならない、と思いますが・・・

色々実験したところ、プログラムの起動直後には、レジスタFSに、何かの管理情報が書いてあるセグメントがセットされているようですが・・・自分のじゃないので簡単にはとれないし・・・
11デフォルトの名無しさん:2005/04/30(土) 05:47:30
>>10
だからして俺はXPが出たあとでもMEを使ってる時代があった
NT系は堅い
12デフォルトの名無しさん:2005/04/30(土) 09:20:55
>>前スレ796==チートツール作り
だろ。相手にすることないよ。
13前スレ796:2005/04/30(土) 10:43:11
>>12
??前スレでも別に普通に相手されてましたが???
14デフォルトの名無しさん:2005/04/30(土) 10:49:14
質問です。
シャアウェアをインストロールしたらレジスターが
書き換えられてディスクトップがぐちゃぐちゃになって、
エキスプローラでホルダーをクィックしても動かなく
なってしまいました。どうすればレジスターを修復で
きますか? ソフトはWindous95で機種はBMWの
アクティバです。接続環境はフレッシュISBNです。
 ヤッホーやゴーグルなどの検索で調べても解らないので
ツーチャンネルの皆様、ご指導よろしくお願いします。
15デフォルトの名無しさん:2005/04/30(土) 10:54:26
>>14
まず、お前自身のスピードを3倍にするところから始めるんだ。
16デフォルトの名無しさん:2005/04/30(土) 10:55:52
まず普通に言葉が書けるようになってから出直してきてください
17デフォルトの名無しさん:2005/04/30(土) 11:22:48
>>13
だから、ゲームのチートツール作りならこんなところで質問してないでゲ製に引っ込んでろって。
つーか、前スレ使い切れよ。
18デフォルトの名無しさん:2005/04/30(土) 12:54:30
実行バイナリいじっちゃえ
19デフォルトの名無しさん:2005/04/30(土) 13:16:39
>>14
ネタ?
20デフォルトの名無しさん:2005/04/30(土) 13:33:00
>>19
明らかにネタ。本人は否定するだろうが。
21デフォルトの名無しさん:2005/04/30(土) 19:26:25
新鮮な書籍コードってなんだよ
22デフォルトの名無しさん:2005/04/30(土) 19:44:09
現在定義されている環境変数を列挙するAPIを教えてください。
23デフォルトの名無しさん:2005/04/30(土) 19:49:29
Winに環境変数などというものは無い
24デフォルトの名無しさん:2005/04/30(土) 19:56:33
>>23
あるじゃん
25デフォルトの名無しさん:2005/04/30(土) 20:14:30
2622:2005/04/30(土) 20:39:02
サンクスです。実はなかなか厄介くさいですねぇ。
でもできることはできるっぽいんでやってみます。
27デフォルトの名無しさん:2005/04/30(土) 20:48:41
envp 使えば?
2822:2005/04/30(土) 20:56:47
WinMainでできます?
29デフォルトの名無しさん:2005/04/30(土) 21:57:28
>>28
出来ないわけがない。
30デフォルトの名無しさん:2005/04/30(土) 22:23:58
リッチエディットをただの文字数制限なしエディットボックスとして使いたいんだが、
Ctrl+Rで右揃えになったり、Ctrl+Vで違う書式のテキストが張り付いたりして気持ち悪い。
リッチエディット(2.0)のすべてのキーボードショートカットを無効にするのってどうしたらいい?
31デフォルトの名無しさん:2005/04/30(土) 22:43:26
サブクラス化してプロシージャ書けば?
32デフォルトの名無しさん:2005/04/30(土) 22:43:49
>>26
GetEnvironmentStrings一発で取れますよ。

>>10
俺も普通に相手してあげるよ。

ReadProcessMemory()でOK。
APIがダメなのではなく、お前さんの使い方が悪いんじゃないかな。

まぁその質問の仕方では、相手にされにくいわな。
33デフォルトの名無しさん:2005/05/01(日) 00:39:41
__argc とか__argvみたいに __envpがあるんじゃないの?
34デフォルトの名無しさん:2005/05/01(日) 04:54:18
お願いします。WindowsGUIでのプログラミングで、
使っているDLL(tar32.dll)に直接コマンドを送ったあと、
そのDLLは「結果を標準出力に出力している」、というのですが、
どこかに書き込んでいる様子は見えても
CUIでないせいで何もおきず、 " > "をつけてみたり"
SETSTDHANDLEを使って標準出力をファイルに変えてみても
取り出せませんでした。何か取り出す方法がありましたら
アドバイスお願いします。

35デフォルトの名無しさん:2005/05/01(日) 05:01:48
int main()
{
return WinMain(GetModuleHandle(NULL), 0, "", 0);
}
36デフォルトの名無しさん:2005/05/01(日) 05:56:41
>>34
tar32.dllが標準出力に出力?何か勘違いしてないか?
37デフォルトの名無しさん:2005/05/01(日) 06:09:21
>>36
ファイルを個別出力させるときに他のDLLと違ってファイルへの出力がなくて
標準出力への展開(-p オプション)だけになってしまうみたいで
http://openlab.jp/tsuneo/soft/tar32_1/old/tar32_1/SDK/TAR32SDK.TXT
http://openlab.jp/tsuneo/soft/tar32_2/tar32_2/sdk/Tar_cmd.txt
これしか-pオプションに関する説明がないし
APIにも無いのでDLLの標準出力をファイルハンドルにあわせるしか
ないかと思ったんですが それもダメで・・
38デフォルトの名無しさん:2005/05/01(日) 07:53:36
>>37
-xだけ指定すればファイルへ出力してくれそうに読めるが。
39デフォルトの名無しさん:2005/05/01(日) 09:12:14
>>37
> -p
>     アーカイブ中のファイルを標準出力(バッファ)に展開します。

これ、実際にはTar() の最後の引数で指定したメモリに出力される。
40デフォルトの名無しさん:2005/05/01(日) 15:31:30
質問です。

CreateFile()やSetFilePointer()等を使って、標準関数のfgets()のような
一行読み込みをする関数を作っているのですが、なかなかうまくいきません。
よければヒントだけでも教えてくれませんか?

環境は
OS : Windows2000
コンパイラ : VC6
です。
41デフォルトの名無しさん:2005/05/01(日) 15:41:40
ReadFile は使わないの?
4240:2005/05/01(日) 15:51:19
すいません。ReadFile()も使います。
while文でSetFilePointer()を使って一つずつポインタを進めていきながら、
ReadFile()で1バイトずつ文字を読み込んでいくような感じで書いているのですが
どうも上手くいきません。
43デフォルトの名無しさん:2005/05/01(日) 15:53:56
ReadFileした分は勝手にポインタ進むだろ
4440:2005/05/01(日) 16:00:25
>>43
そうだったんですか。それでおかしくなったのかもしれません。
もうちょっとがんばってみます。
45デフォルトの名無しさん:2005/05/01(日) 16:02:01
46デフォルトの名無しさん:2005/05/01(日) 16:02:49
キャッシュしか残ってなかったな...
47デフォルトの名無しさん:2005/05/01(日) 18:23:31
>>38 >>39
ありがとうございます。
-xだけだと指定に関係なく全ファイル展開になります。
>これ、実際にはTar() の最後の引数で指定したメモリに出力される。
Tar()の最終引数がDWORD dwSizeでバッファのサイズの値なんですが
これにメモリのポインタを入れればよいのでしょうか?

48デフォルトの名無しさん:2005/05/01(日) 18:47:41
APIそのものの質問じゃないのですが、
ここの人が詳しいかと思いまして

パラメータをレジストリに保存してダイアログで設定するようなアプリを作ったとき
常にレジストリを読むわけにはいきませんし
読み込みと書き込みの両方を考えて
メモリ上のパラメータとレジストリの値とはどのタイミングで同期をとるもんなんでしょう?
49デフォルトの名無しさん:2005/05/01(日) 18:50:07
起動時と終了時
50デフォルトの名無しさん:2005/05/01(日) 18:59:34
ダイアログを開いたときに読み込んで閉じるときに(必要なら)書き込む。
5148:2005/05/01(日) 19:02:19
同時に2つ立ち上がる可能性があるので
・起動時とダイアログを開いたときに読み込み
・終了時とダイアログを閉じたときに書き込み
・読み込み時にレジストリが見つからなかったときは
 メモリのパラメータをデフォルトの値にして
 書き込み時を待って反映させる

としようと思います。
5210:2005/05/01(日) 19:04:23
>>32
どうもです。チートツールってほどのものじゃない個人的なものなんですが・・・

以前に埋めに入っているスレで質問して誰も答えてくれなかったことがあるんで・・・

もちろんReadProcessMemory()は正常に動いてるのだとは思いますが・・・
4Gのアドレスのうち、全部があるはずはないですよね・・・
たしかにコード近辺、スタック近辺とあとよくわからないシステムエリア?近辺は読み取れるんですが、大方は読み取ろうとすると不正な処理ダイアログが出ます。
自分の領域ならばLDT読むとかいろいろ方法はあるとは思うんですが、他プログラムの領域なんで・・・

あと質問の仕方のまずい所を・・・?

>>33
私でしょうか?
__envp調べて見ます。

>>18
私のことですよね?
やはりその前に何の変数が何に使われているのか確認しないといけないので・・・
53デフォルトの名無しさん:2005/05/01(日) 19:06:06
>>52
Advanced Windows読め
54デフォルトの名無しさん:2005/05/01(日) 19:29:03
>>51
複数起動を仕様としたアプリ?
そうでないなら複数起動は制限しとくようにしたほうがいい気がするよ

55デフォルトの名無しさん:2005/05/01(日) 19:52:03
>>54
複数プロセスのアプリからロードされるプラグインDLL
なんですよ
5632:2005/05/01(日) 20:13:48
>>52
やろうとしていることが嫌われていることもあるが、それ以前に質問の仕方が悪い。

過去ログを見て、回答をもらえている質問者と、そうでない質問者の違いを見て、
何がいけないのか察してくれ。

それが面倒だったら、ここで質問するよりも、
チートツール作ってる人達のWebサイト見たほうが早い気がするよ。
57デフォルトの名無しさん:2005/05/01(日) 20:41:58
>>55
共有メモリを利用するという手はどうよ?
最初にプロセスにアタッチされたときにロードして、
すべてのプロセスから参照されなくなったときに保存すると。
58デフォルトの名無しさん:2005/05/01(日) 20:48:35
>>52
PEヘッダを見ればいいんだよ。
そしたらメモリ配置は全部わかる。
仕様はこのあたりが詳しい。
http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html
59デフォルトの名無しさん:2005/05/01(日) 20:50:56
>>57
いいかもしれないけど、そんなにクリティカルな情報でもないので
できたらやってみます

ところでDLLってプロセスのメモリ空間ごとにコピーされるんですよね
60デフォルトの名無しさん:2005/05/01(日) 20:54:56
それじゃあスタティックリンクと一緒じゃろ
61デフォルトの名無しさん:2005/05/02(月) 00:19:44
>>47
すまん。後ろから2番目だわ。
でも-xで指定ファイルの解凍ができるが。
6252:2005/05/02(月) 00:29:13
よく過去ログとか見ろって言われるんですが、現実にはなかなか最初から全部目を通せる人っていないと思うんですが・・・
ふつうの人はお金にも時間にも限界がありますから・・・
私もできたら本屋で売っている面白そうな本、全部買いたいですよ・・・

結局何が悪かったのかよくわからなかったのですが、とにかく悪いということなのでここで聞くのはあきらめます。皆さんどうもありがとうございました。

>>58
おお!これですね。わかりました。早速熟読を・・・
あとは動的に取得されたセグメントの情報ですね・・・
一応ググってはいるんですが、英語のばかりひっかかるんで・・・もちろん英語でも読んではいるんですが、???という感じで・・・
あと途中退場して本当に申し訳ありません・・・
ご容赦下さい・・・
63デフォルトの名無しさん:2005/05/02(月) 00:42:16
>>62
仮令個人使用だろうとチートツールはチートツール。
それが只のマナー違反か犯罪になるかはゲームの種類と体制によるが。
そうである以上、まとまった情報が得られないことくらいすぐに判ると思うが。
そうでなくとも、教えて君は一般的に嫌われる。
まぁ、「半年ROMしてから書き込め」という板もあるくらいだ。空気は読もうな。
64デフォルトの名無しさん:2005/05/02(月) 01:14:10
本当に欲しいなら惜しまずに金と時間を投入しろってこった
65デフォルトの名無しさん:2005/05/02(月) 04:37:47
ステータスバーを付けたいのですがどうすればいいでぇすくわぁ?
66デフォルトの名無しさん:2005/05/02(月) 06:28:04
>>65
ステータスバーをつける。
67デフォルトの名無しさん:2005/05/02(月) 07:10:18
68デフォルトの名無しさん:2005/05/02(月) 08:04:32
>>59
32ビットではDLLはプロセス間で独立してると思っていいですよ。
(昔はDLLを使ったプロセス間通信なんてアホな話もありましたが。)

DLLでプロセス間でまったく同じメモリ内容になる部分は、
OSが自動的に見えないところで共有してくれています。
これを意識する必要は、メモリ & ディスクキャッシュの節約という面以外ではないです。

>>62
開き直るなよ。

お金にも時間にも限界がある人が回答してるんだよ。
だから質問の仕方が悪いと相手にされないの。

質問がド下手な人の相手をすると、お金と時間が無駄になるし、
そもそも回答してくれる人の手間を極力省くために、
自分の時間をいくらでも注ぎ込む気構えがないのは、失礼でしょ。
だから相手にされないの。
69デフォルトの名無しさん:2005/05/02(月) 10:51:09
DLLネタで便乗しちゃうけど
DLL作るときってベースアドレスずらしてる?
重ならないように設定するのめんどいんだけど・・・
あと、重ならないことで実際どんな効果があるのかしらん
70デフォルトの名無しさん:2005/05/02(月) 12:10:10
>>52
ttp://software.nikkeibp.co.jp/software/download/down02.html
Windowsのメモリー管理を理解する のサンプルを見てVirtualQueryEx使うとか

>>69
ベースアドレスが重なると別のアドレスにロードすることになり、再配置処理が必要になる。
アドレスがずれると複数プロセスでのDLL読み取り専用領域の共有もできなくなるらしい。
ちなみにDelphi/BCCでexeを作るときはStripRelocで再配置情報を削除した方が良い

間違ってたらスマン
71デフォルトの名無しさん:2005/05/02(月) 15:13:54
デスクトッププロパティの「ドラッグ中にウィンドウの内容を表示する」
をONにして適当なウィンドウをぐりぐりドラッグすると
再描画されずに白いゴミが残ることがあるんだけど
へぼいマシンなんだからウィンドウの内容を表示するオプションOFFにシル
って対応だけでいいのかな?
BitBltで絵を張っている位なんだがこっちがミスしてるのかな・・
72デフォルトの名無しさん:2005/05/02(月) 16:58:52
ボタンの色と同じ色で、ある領域を塗りつぶしたく、
FillRectを使い、第三引数でGetStockObject(**_BLUSH)とやっているのですが、
GRAYは暗く、LTGRAYは明るく、HOLLOWはうまく表示されず、同じ色が出せません。
いい方法がありましたら、教えてください。
7372:2005/05/02(月) 17:08:45
少し修正します。
GRAY_BRUSH、LTGRAY_BRUSH共にボタンの色より濃くなってしまいます。
当然BLACK_BRUSH、DKGRAY_BRUSH、WHITE_BRUSHも違う色です。
74デフォルトの名無しさん:2005/05/02(月) 17:14:59
>>72
::CreateSolidBrush(RGB(255,255,255)) でブラシ作って
::FillRect したらどうかな。
そのブラシは後でDeleteObject する
75デフォルトの名無しさん:2005/05/02(月) 17:19:34
ボタンと同じ色なら
CreateSolidBrush(GetSysColor(COLOR_BTNFACE))
じゃないのか?
7672:2005/05/02(月) 17:25:03
>>74
ありがとうございます。似た方法はやっていました。
ペイントソフトでボタンの色を調べて、その色で塗りつぶしたのですが、
微妙に色が違ってしまいました。デスクトップの色数とかが原因かもしれません。

>>75
ありがとうございます。同じ色を表示できました。
77デフォルトの名無しさん:2005/05/02(月) 18:49:35
システムデフォルトのグレイ関係ならヘッダファイルに定義してあるはずだが
78デフォルトの名無しさん:2005/05/02(月) 19:03:54
ボタンの色とかって、ユーザごとに違うだろ。
79デフォルトの名無しさん:2005/05/02(月) 19:09:12
デフォルトのグレイならって書いてあるのじゃん
80デフォルトの名無しさん:2005/05/02(月) 23:00:40
マウスカーソルがぐるぐる円を描くように動作するプログラムを
作りたいのですが、どのように作ればいいのでしょうか?
まったく検討もつきません、どなたかアドバイスよろしくお願いします。
81デフォルトの名無しさん:2005/05/02(月) 23:35:41
>>80
タイマーで円を描くようにマウスポインタの位置を変更していけばいいだけじゃないの?
82デフォルトの名無しさん:2005/05/02(月) 23:37:12
>>80
>>4にあるURLからひたすら探せ
83デフォルトの名無しさん:2005/05/02(月) 23:40:32
SetCursorPosと円の方程式でなんとかしる
84デフォルトの名無しさん:2005/05/02(月) 23:57:42
>>81-83
レスありがとうございましたっ!
そして>>83さん、結構探したつもりだったんですけど、
助かりました、本当に。感謝!
85デフォルトの名無しさん:2005/05/03(火) 01:08:43
ネットワーク関係のアプリを作りたいんですが、
初歩として2台のPC間でファイルの送受信を行うプログラムを作ろうと思いました。

WINAPIに必要な関数は用意してありますか?
86デフォルトの名無しさん:2005/05/03(火) 01:20:50
ちょっと調べればわかることをなんで訊くのか謎だ。
87デフォルトの名無しさん:2005/05/03(火) 02:11:53
検索語が分からないんです。
[winapi, ネットワーク]や[ファイルの送受信, winsock2]
等で検索してみたのですが欲しい情報が見つかりませんでした。
それでこちらで質問させてもらいましたが、もうちっとgoogleを漁ってみます。
失礼しました。
88デフォルトの名無しさん:2005/05/03(火) 09:23:54
winsockって分かってるなら来るなと。
89デフォルトの名無しさん:2005/05/03(火) 11:08:43
データの送受信なのか、ファイルをファイルとして送受信したいのか。
90デフォルトの名無しさん:2005/05/03(火) 12:28:28
ファイルをファイルをして送受信したいんです。
目的としてはファイルを送信する側が
自分が持っているファイルの一覧を受信者に送信、
受信者は一覧を見て欲しいファイル名を送信、
送信者は指定されたファイルを送信する。

こんな感じのことがしたいので最初はエラーとか全く考えずに
ある決まったファイルを送受信したいなと思ったんです。

んでもって、やりたいことが決まっても
どんな関数を使えば良いのかよく分からないので質問しました。
91デフォルトの名無しさん:2005/05/03(火) 12:39:02
ftp使えば?
92デフォルトの名無しさん:2005/05/03(火) 13:03:12
簡易FTPをお勉強として作りたいという前提で答えると。
データの出元や最終的な出力先がファイルというところは、
ネットワークプログラミングとは関係ない。
winsockって分かってるなら、それで普通にデータの送受信を
すればいいじゃん。

そうじゃなくて、FTPクライアントを作りたいだったらwininetあたりで。
93デフォルトの名無しさん:2005/05/03(火) 19:23:59
TrackPopupMenuExでポップアップメニューを表示するときに
(キーボードで操作できる)カーソルを
あらかじめ特定の項目に移動させたいのですが
そういうことはできますか?
94デフォルトの名無しさん:2005/05/03(火) 19:50:11
>>90
プログラミングのスパイスって本に君の希望する内容が書いてある。
95デフォルトの名無しさん:2005/05/03(火) 20:11:03
>>90
プロトコルについて勉強汁。
ちなみに、君の希望するものは FTP。
RFC FTP で検索汁。
96デフォルトの名無しさん:2005/05/03(火) 20:31:50
いまどきFTPもないんでやっぱHTTP+Web DAVだろ。
97デフォルトの名無しさん:2005/05/03(火) 20:41:39
('A`)
98デフォルトの名無しさん:2005/05/03(火) 21:06:01
ウィンドウプロシージャでWM_CLOSEメッセージが送られてきたら
MessageBoxを出して本当に終了するかどうかを促す実装をしているのですが、
それだけのプログラムをクラスとか一切使わず作るとうまくいくのですが、
自前のウィンドウプロシージャクラスを使うとメッセージボックスは表示されません。
しかし、エンターキーを押すと、デフォルトのOKが押されて終了してくれます。

クラスの中では、WM_CLOSEメッセージの時にはOnClose関数に飛ぶようにしているだけで、
特に変なことはしてないつもりです。

検索してみても分からなかったので、ここで質問させてもらいました。
同じような現象になったことある方や、意見がある方は回答をお願いします。
条件が曖昧ですがよろしくお願いします。

環境:Visual C++.NET 2003, WinXP(SP1)
99デフォルトの名無しさん:2005/05/03(火) 21:28:38
>>98
ソース晒してみ
10098:2005/05/03(火) 21:30:42
書き込みしたあとも色々試してみたのですが、
どうやら、ウィンドウ(メインのウィンドウ)が表示されている間に
メッセージボックスを出そうとすると表示されないということが分かりました。
WM_CREATEではうまくいきますが、WM_LBUTTONDOWN等ではうまくいきません。
10198:2005/05/03(火) 21:33:30
>>100
ウィンドウプロシージャ関数
switch(msg)
{
case WM_CLOSE:
return OnClose();
・・・他のメッセージ処理

メインウィンドウのOnClose関数
ウィンドウプロシージャの基本クラスの関数をオーバライドしてます
{
if(MessageBox(m_hwnd, "Really?", "", MB_YESNO) == IDYES)
DestroyWindow(m_hwnd);
return 0;
}

どのくらい晒せばいいか分かりませんが、
とりあえずかかわってるとこだけ書いてみました。
102デフォルトの名無しさん:2005/05/03(火) 21:37:14
>>98
全部晒したほうがいいんでない?
103デフォルトの名無しさん:2005/05/03(火) 21:51:16
TCHARの文字列をwchar_tの文字列に変換したいのですが、
TCHARがcharの時もwchar_tの時も上手くいく方法はどのようなものがありますか?
104デフォルトの名無しさん:2005/05/03(火) 22:10:14
_UNICODEが定義されてないときだけ
変換したらいいんでないですかね?
105デフォルトの名無しさん:2005/05/03(火) 22:30:13
>>103
ATLのCT2Wとか
106デフォルトの名無しさん:2005/05/04(水) 00:05:49
スレッドとウィンドウメッセージの関係について質問です。
GUIを扱うメインスレッドと、長い処理を行うワーカースレッドがありまして、
あるウィンドウに対して送信するときにクリティカルセクションを使って
排他をしようと考えています。
状態遷移を考えているうちに疑問に思ったのですが、

・ワーカースレッドで、クリティカルセクションをロックしてる最中に
メインスレッドにSendMessageすると、どうなるでしょうか?
メインスレッドに処理が移った瞬間デッドロックするのでしょうか。
107デフォルトの名無しさん:2005/05/04(水) 00:07:53
>104-105 ありがとうございます。
#ifdef でやってみます。
108デフォルトの名無しさん:2005/05/04(水) 00:09:08
補足ですが、
あるウィンドウは、メインスレッドのダイアログ上に存在します。
単なるエディットボックスです。
109デフォルトの名無しさん:2005/05/04(水) 00:09:41
>>106
メインスレッドがそのクリティカルセクションをロックしようとしなければ大丈夫。
110デフォルトの名無しさん:2005/05/04(水) 00:22:48
リソースを「実行時」に生成して、
外からインスタンスハンドルと「特定のID」を引数として引っ張ってこれるようにしたいのですが
どうしたらいいですか?
111デフォルトの名無しさん:2005/05/04(水) 00:31:27
>>109
いや、今の設計では、メインスレッド側もロックしようとします。
やっぱダメかな・・・
ボタンを押したりしたときにそのウィンドウにテキストを出力する時とか。
ちゃんとクリティカルセクションのlock/unlockはしてますが。
112デフォルトの名無しさん:2005/05/04(水) 00:35:49
要するに、ワーカースレッドの中でlockしたまんま、
メインスレッドへSendMessageは正当なのかということなのですが、
なんか試した限りではうまく動かないみたいです。
クリティカルセクションのコードを外せば動くんですが。
ああもう寝よ・・・
113デフォルトの名無しさん:2005/05/04(水) 00:40:38
なんか設計が悪い気がしてきました。
別のスレッドからのSendMessageって、スタックから見るとかなり
ややこしいことになってるみたいなんで、バグの温床のような気がします。
SendMessageを使わない別の通信手段を考えることにします。
114デフォルトの名無しさん:2005/05/04(水) 00:45:39
それがいいよ。
115デフォルトの名無しさん:2005/05/04(水) 01:14:45
以下のフローに変更。

データをバッファリングすることにして、
そのデータをクリティカルセクションのロック対象とする。
ワーカスレッドは、バッファを更新したらWM_USER+nの適当なメッセージを
PostMessageでGUIを持つメインスレッドへ通知し、
GUIメインスレッドは通知を受けたらコントロールを更新してバッファをクリアする、
というフローに変更。

これでメッセージループが正常に回るようになりました。
気持ち悪い部分が消えて良かった・・・
116デフォルトの名無しさん:2005/05/04(水) 01:22:06
よかったね。
117デフォルトの名無しさん:2005/05/04(水) 03:05:58
えーっ SendMessageをPostMessageにしちゃうの?
同期的に処理しなくていいなら、最初からPostMessageにしとけ、っていう気もするけど、
ロックの都合で変えるのは、どうかと思う。

基本的には、クリティカルセクション内でSendMessageするのは、よくない。

SendMessageのように、いつ返ってくるのかわからないような処理を、
排他状態で行うのは、パフォーマンス的にもよろしくないし、なんか気持ち悪い。
(気持ち悪いのは、デッドロックしやすいからよくない、ということだと思うのだけど、
デッドロックするような設計なら、長かろうが複雑だろうが、ダメなものはダメだなぁ。)

もしかして、ロック対象のオブジェクトを、SendMessageで誰かに触らせようとしているの?
だとしたら、それはロックの使い方を間違っているよ。
ロックしている = 自分以外に触らせない
ということだから。

渡す側は、オブジェクトに触れる前にロック。オブジェクトに触れ終わったらアンロック。
渡された側も、オブジェクトに触れる前にロック。オブジェクトに触れ終わったらアンロック。
ロックしないで触るコードがあれば直すべし。
SendMessageする時や、メッセージキューから受けとる時は、ロックしていない状態でいいよ。
118117:2005/05/04(水) 03:10:23
誤解があるかも・・・

> SendMessageする時や、メッセージキューから受けとる時は、ロックしていない状態でいいよ。
SendMessageすることや、メッセージキューから受けとること自体は、
オブジェクトのハンドルやポインタは扱うかもしれないけれども、
オブジェクトの中身には触れないことなので、ロックが不要なのです。

もちろん、
そのハンドルやポインタ自体がロック対象のオブジェクトというのであれば、
ロックしなくてはいけませんが、そんなロック対象のものを直接SendMessageで渡してはいけません。
必ず、一段噛まさないと。
119デフォルトの名無しさん:2005/05/04(水) 03:15:52
そんなことわかってるよ。
120デフォルトの名無しさん:2005/05/04(水) 05:25:05
すいません、DeleteMenu(sysMenu,SC_MINIMIZE,MF_BYCOMMAND );

上記のようにでぇりーとした、みにまいずなアイコンを再び
使えるようにしたいのですがどうすればいいのでぇすくわぁ
121デフォルトの名無しさん:2005/05/04(水) 08:36:16
>>119
わかってりゃ、最初の質問だって出なかったろ。
122デフォルトの名無しさん:2005/05/04(水) 15:16:38
InsertMenuで追加するとか
123デフォルトの名無しさん:2005/05/04(水) 17:41:50
自分で作成したプログラムからチャットとかに、なんでもいいから文字を送信
したいんですけど、送信するにはどんな関数を使えばいいんですか?
そういうのは存在するんでしょうか? 優しい方教えてくださいm(_ _)m
124デフォルトの名無しさん:2005/05/04(水) 17:52:45
>>123
要件の不足。
詳細述べよ。
125デフォルトの名無しさん:2005/05/04(水) 17:55:00
チャットを荒らしたいんですが、どんな関数を使えばいいんですか?
優しい方教えてくださいm(_ _)m
126デフォルトの名無しさん:2005/05/04(水) 17:59:34
ただ文字を送信したいだけです。
フォームに文字を入力せずに、自分で作成したプログラムから
特定の文字を送信するにはどうすればいいのかなぁ、って思っただけです。
127デフォルトの名無しさん:2005/05/04(水) 18:08:30
>>126
とりあえずスレ違い。
HTTP 関連のお勉強から始めれ。
128デフォルトの名無しさん:2005/05/04(水) 18:09:20
>>126
スレ違い、氏ね
129デフォルトの名無しさん:2005/05/04(水) 18:12:57
氏ねとか軽軽しく言っちゃダメだよ
130デフォルトの名無しさん:2005/05/04(水) 20:21:20
じゃ
死ね
は?あと
お望みならぶち殺したろか?
とかは?
131デフォルトの名無しさん:2005/05/04(水) 20:23:04
申し訳ございませんが二度と私達の前に姿を現さないで頂けませんでしょうか
ぐらいで
132デフォルトの名無しさん:2005/05/04(水) 21:27:45
私達って、勝手に他人を巻き込むなよ
133デフォルトの名無しさん:2005/05/04(水) 21:34:45
メッセージボックスをたくさん表示させて、
一番最後に出たメッセージボックスのOKボタンを押したら、全ての
メッセージボックスが閉じてくれるジョークプログラムを作ろうと思うのですが、
どのようにすればよいでしょか?
134デフォルトの名無しさん:2005/05/04(水) 21:39:29
罠作者はお帰りクダサイ
135デフォルトの名無しさん:2005/05/04(水) 21:51:21
>>133
普通に組めるだろ
アフォか
136デフォルトの名無しさん:2005/05/04(水) 22:02:41
///////////////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <time.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE, LPSTR, int )
{HWND hwnd[999];MSG msg;WNDCLASS unkoClass;int i,j=0,k=0;srand(clock());
{unkoClass.style = CS_HREDRAW | CS_VREDRAW;unkoClass.lpfnWndProc = WndProc;unkoClass.cbClsExtra = 0;
unkoClass.cbWndExtra = 0;unkoClass.hInstance = hinst;unkoClass.hIcon = NULL;unkoClass.hCursor = LoadCursor(NULL, IDC_ARROW);
unkoClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);unkoClass.lpszMenuName = NULL;unkoClass.lpszClassName = "うんこ";
if( !RegisterClass(&unkoClass) ) return 0;}for(i=0; i<999; i++){j=rand()%1000+1;k=rand()%1000+1;
hwnd[i] = CreateWindow( unkoClass.lpszClassName,"うんこ",WS_OVERLAPPEDWINDOW,j,k,200,200,NULL,NULL,hinst,NULL);
ShowWindow(hwnd[i], SW_SHOW );}if(IDNO == MessageBox(*hwnd,"うんこおk?","うんこ", MB_YESNO )){ }
else {SendMessage(*hwnd, WM_CLOSE, 0, 0);}while( GetMessage(&msg, NULL, 0, 0) ){TranslateMessage(&msg);DispatchMessage(&msg);}
return 0;}LRESULT CALLBACK WndProc(HWND hwnd, UINT imsg, WPARAM wp, LPARAM lp){
switch(imsg){case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, imsg, wp, lp);}return 0;}
///////////////////////////////////////////////////////////////////////////////////////
137デフォルトの名無しさん:2005/05/04(水) 22:10:58
138デフォルトの名無しさん:2005/05/04(水) 22:53:28
何を作ったのやら。
139デフォルトの名無しさん:2005/05/05(木) 00:37:13
リストビュー(ListView)で質問です、、
項目のヘッダを押すとそのカラムについてソートされるようにしたいんですが、
項目のヘッダが押されたというのは、何のメッセージを捕まえればよいですか?
140デフォルトの名無しさん:2005/05/05(木) 00:38:46
猫のページにありました
すいません。
141デフォルトの名無しさん:2005/05/05(木) 00:40:27
気を取り直してもう一つ質問です。
リストビューの任意の項目で、
右クリックしたらポップアップメニューを出したいのですが、
何のメッセージを捕まえればよいですか?
142デフォルトの名無しさん:2005/05/05(木) 00:45:19
猫のページにありました
すいません。
143デフォルトの名無しさん:2005/05/05(木) 00:50:05
>>136
おぉ、最高っす!
参考にさせていただきます!
144デフォルトの名無しさん:2005/05/05(木) 00:55:25
ウィンドウがアクティブ化したときに何らかの処理を行うために、フックを使おうと思います。
WH_CBT と WH_SHELL とどちらを使うほうがよいでしょうか?
145デフォルトの名無しさん:2005/05/05(木) 00:58:40
猫のページにありました
すいません。
146デフォルトの名無しさん:2005/05/05(木) 01:02:20
ウィンドウがアクティブ化したときに何らかの処理を行うために、フックを使おうと思います。
WH_CBT と WH_SHELL とどちらを使うほうがよいでしょうか?
147デフォルトの名無しさん:2005/05/05(木) 01:04:55
おれもそう思う
148デフォルトの名無しさん:2005/05/05(木) 01:06:42
リストビューの任意の項目で、
右クリックしたらポップアップメニューを出したいのですが、
何のメッセージを捕まえればよいですか?
149デフォルトの名無しさん:2005/05/05(木) 01:17:07

 -<二:彡――
150デフォルトの名無しさん:2005/05/05(木) 01:47:32
追加で質問です。
リストビューで項目ヘッダの淵をダブルクリックすると
横幅がトリムされますが、これをプログラム側から行うには
何のメッセージ送ればよいですか?
151デフォルトの名無しさん:2005/05/05(木) 02:04:10
>>150
LVM_SETCOLUMNWIDTH メッセージでカラムの幅を
LVSCW_AUTOSIZE(アイテムのテキストの幅に合わせる) 又は
LVSCW_AUTOSIZE_USEHEADER(カラムのテキストの幅に合わせる) にする。
152デフォルトの名無しさん:2005/05/05(木) 02:11:12
>>151
ありがとうございました。
できました。
153デフォルトの名無しさん:2005/05/05(木) 02:13:30
1アプリケーションが持つウィンドウは
あまり多くないほうがいいのでしょうか?
具体的には、
キーボードを模したコントロール用パネルを作るときに、
各キーがそれぞれパネル上の一つの子ウィンドウという作り方は
推奨されない作り方なのでしょうか?
154デフォルトの名無しさん:2005/05/05(木) 02:19:07
100個ぐらいなら普通にうごくんじゃね?
155デフォルトの名無しさん:2005/05/05(木) 02:20:43
普通ボタンにしねぇか?
ってか、ボタンもテキストボックスもスタティックテキストもウィンドウなんだけどな
156デフォルトの名無しさん:2005/05/05(木) 02:27:48
昔Win16の時はご法度だったけどね、100個も並べたらまずリソース足りなくなってた
今は平気なんじゃないかなあ。

と言ってる俺は300-500並べるやつを作らなくてはならないんだが、これはやばそうだな・・・
157デフォルトの名無しさん:2005/05/05(木) 02:35:21
座標で管理
158デフォルトの名無しさん:2005/05/05(木) 02:39:01
>>156
あれ?昔ボタンで作られたキーボードの窓があった様な・・
誰が使うんだ?って代物だったけど。
Win95の頃かな。
159153:2005/05/05(木) 03:13:25
>>155
そう! その通り!
私は、ボタンをいっぱい使う
アプリケーションが作りたかったのです。
多くのボタンを持ったアプリケーションが懸命に動作する姿は、
私をも感動させるものがあるでしょう。
160:2005/05/05(木) 03:31:46
アホ
161デフォルトの名無しさん:2005/05/05(木) 04:24:48
>>160
下手に出ておればいい気に
なりおって! 氏ね!
162デフォルトの名無しさん:2005/05/05(木) 07:47:54
>>158
付属のソフトウェアキーボードのことか?
163デフォルトの名無しさん:2005/05/05(木) 17:14:49

LoadImageでIMAGE_ICON,16,16指定でアイコンハンドル(HICON)を読んで
タスクアイコンに設定したいのですが、
Windows2000用ではICOファイルから16色のテーブルを読み込みたいのですが、
指定する方法を教えてください


164デフォルトの名無しさん:2005/05/05(木) 23:43:19
とりあえず日本語勉強してからもいちど来てくれ
165デフォルトの名無しさん:2005/05/05(木) 23:52:39
>163
http://www.vector.co.jp/soft/win95/amuse/se201729.html?g
これ使ってみそ  的はずれてるかもしらんが・・・
166デフォルトの名無しさん:2005/05/06(金) 11:20:29
マイクの設定ってプログラム上から出来ませんか?
ミュートとか音量設定とか
167デフォルトの名無しさん:2005/05/06(金) 11:23:44
できる
168デフォルトの名無しさん:2005/05/06(金) 12:51:51
ダイアログプロシージャA内で、別のダイアログBを生成したとき、
プロシージャBに何か値を渡すにはどうしたらいいでしょうか。

例えばダイアログAのチェックボックスの選択状況によって、
ダイアログBの初期状態を変化させるなどしたい場合です。
今はグローバル変数に持たせて渡しているのですが、あまり多用したくないです。
169デフォルトの名無しさん:2005/05/06(金) 13:19:08
M−V−Cだとかを一度勉強しなはれ
170デフォルトの名無しさん:2005/05/06(金) 13:20:02
>>168
DialogBoxParam
171デフォルトの名無しさん:2005/05/06(金) 13:35:58
>>170
THX
>>169
ウィンドウのクラス化めんどくさいんだもの。
SDKのみで懇切丁寧にクラス化の手順と仕組みが載ってる本とかないですかねー
Webに多少資料があるけど余りよく理解できない。
172デフォルトの名無しさん:2005/05/06(金) 14:09:50
クラス化は関係ない。
173デフォルトの名無しさん:2005/05/06(金) 14:20:05
じゃあ>>169ってどういう意味?
174デフォルトの名無しさん:2005/05/06(金) 14:24:41
つうか答えるならわざわざもったいぶるような書き方するなよ。
質問者には当然のように問題点を詳細に書くよう要求するんだから
回答者だって答えるならば少なくとも意味が伝わるように書いてくれ。
175デフォルトの名無しさん:2005/05/06(金) 14:26:18
はい次の質問者の方どぞ
176デフォルトの名無しさん:2005/05/06(金) 14:26:37
なにこのアホ。
177デフォルトの名無しさん:2005/05/06(金) 14:27:33
>>175
キチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ね
キチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ね
キチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ね
178デフォルトの名無しさん:2005/05/06(金) 14:27:46
気に入らない答えが聞きたくなかったら質問しないことだよ
179デフォルトの名無しさん:2005/05/06(金) 14:28:15
意味不明。
180デフォルトの名無しさん:2005/05/06(金) 14:29:50
>>178
キチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ね
キチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ね
キチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ね
181166:2005/05/06(金) 14:47:47
>>167
出来ればAPIの名前とか方法の手がかりを教えてもらえないでしょうか?
よろしくお願いいたします。
182デフォルトの名無しさん:2005/05/06(金) 14:52:51
>>178
気に入らない質問が聞きたくなかったら回答しないことだよ
183デフォルトの名無しさん:2005/05/06(金) 15:07:49
>>182
ろmもいるだろうに。俺とか
184デフォルトの名無しさん:2005/05/06(金) 15:16:50
カレントドライブがネットワークドライブか判別する方法ってあります?
185デフォルトの名無しさん:2005/05/06(金) 15:23:13
ある
186184:2005/05/06(金) 15:24:59
>185
質問が悪かったですかね orz
どうすればわかりますか?
187デフォルトの名無しさん:2005/05/06(金) 15:31:30
>>183
気にいらない質問が見たくなかったらロムらないことだよ
188デフォルトの名無しさん:2005/05/06(金) 15:34:05
で、>>169ってどういう意味?
クラス化する以外にどうしろと。
189デフォルトの名無しさん:2005/05/06(金) 15:43:55
M−V−Cが何なのかすらわからない俺。
190デフォルトの名無しさん:2005/05/06(金) 15:58:28
M−V−C
が顔文字に見えてきた
191デフォルトの名無しさん:2005/05/06(金) 16:00:50
>>184
GetDriveType
192デフォルトの名無しさん:2005/05/06(金) 17:13:28
Microsoft Visual C++
193デフォルトの名無しさん:2005/05/06(金) 17:14:21
サブクラス化について質問です。
サブクラス化された子ダイアログから
親ダイアログの変数を参照するにはどうすればいいのでしょうか?
194デフォルトの名無しさん:2005/05/06(金) 17:33:46
ダイアログの変数?
195デフォルトの名無しさん:2005/05/06(金) 17:52:38
>>193
とりあえずGetParent()で親のウィンドウハンドルが手に入れられる。
196193:2005/05/06(金) 18:05:37
>>194
子ダイアログであるエディットボックスのウインドウプロシージャ内から
その親であるダイアログ内で使われている変数の値を参照したいのです。

>>195
ウィンドウハンドルを使えばいいのでしょうか。
少し調べてみます。

お二人ともレスありがとうございました。
197デフォルトの名無しさん:2005/05/06(金) 18:12:25
>>196
そりゃ直接は無理。
198デフォルトの名無しさん:2005/05/06(金) 19:09:01
つーか、ダイアログで使う変数ってなんだよ。
ダイアログクラスのメンバ変数か?
199デフォルトの名無しさん:2005/05/06(金) 19:28:50
で、>>169ってどういう意味?
クラス化する以外に。
200デフォルトの名無しさん:2005/05/06(金) 19:31:43
ttp://e-words.jp/w/MVC.html
これの事ではなかろか
201デフォルトの名無しさん:2005/05/06(金) 19:53:25
そんなの知ってる。
168の質問内容に対し、
クラス化する以外でMVCをどう実現するのだという事。
202デフォルトの名無しさん:2005/05/06(金) 19:57:44
APIとは何の関係もなさそうだな
203デフォルトの名無しさん:2005/05/06(金) 20:03:35
プロシジャ間のデータの受け渡しの実現方法の質問。
204名前は開発中のものです。:2005/05/06(金) 22:56:15
>>168の質問に対する回答としての
>>169>>172の意味を誰か説明して下さい。
気になって寝れません。
205デフォルトの名無しさん:2005/05/06(金) 23:05:49
質問です。

WinMain関数のメッセージループを

HDC hdc = GetDC(hwnd);
while(GetMessage(&msg, NULL, 0, 0)) {
TextOut(hdc, 0, 0, TEXT("test"), 4);
DispatchMessage(&msg);
TranslateMessage(&msg);
}

このように書いた状態でメッセージボックスを表示させると
文字とメッセージボックスが重なったときに文字が消えてしまいました。
これを文字が消えないようにするにはどうすればいいのでしょうか?

よろしくお願いします。
206デフォルトの名無しさん:2005/05/06(金) 23:09:10
高度なプログラミング技術だ。
207デフォルトの名無しさん:2005/05/06(金) 23:13:43
>>205
WM_PAINT内にTextOutを移す。
208デフォルトの名無しさん:2005/05/06(金) 23:33:32
HDC hd = GetDC(hwnd);を消す
209205:2005/05/07(土) 00:30:13
>>207-208
ご解答ありがとうございます。
>>207
WM_PAINT内ではうまくいくのですがどうしてもループの中でやりたいときは何か手はあるのでしょうか?
>>208
やってみましたが表示されなくなってしまいました。
210デフォルトの名無しさん:2005/05/07(土) 00:38:21
>>209
>WM_PAINT内ではうまくいくのですがどうしてもループの中でやりたいときは何か手はあるのでしょうか?
メッセージボックスをモードレスなダイアログでモーダルに見せかけるようにすればできないことはないが
面倒だし君のスキルでは多分無理だ。
つか、なんでそんなことがしたいの?
211デフォルトの名無しさん:2005/05/07(土) 00:38:28
>WM_PAINT内ではうまくいくのですがどうしてもループの中でやりたいときは何か手はあるのでしょうか?
  _, ._
( ゚ Д゚) ?
212デフォルトの名無しさん:2005/05/07(土) 00:39:15
>>209
自分で再描画処理を作れ
213デフォルトの名無しさん:2005/05/07(土) 01:23:36
>209
>WM_PAINT内ではうまくいくのですがどうしてもループの中でやりたいときは何か手はあるのでしょうか?
汎用的な手は無いと思う。

DialogBox関数でダイアログを作成した場合、ダイアログを閉じるまで、DialogBox関数から
帰ってこない。=君が作ったメッセージループもGetMessage関数で止まってる。
Windowsの構造上無理。
214デフォルトの名無しさん:2005/05/07(土) 06:51:42
advanced windowsを買ったはいいが付録のソースを
コンパイルしようとしたらエラー出まくりな上に
最初からCDに入ってる実行ファイル郡は全て
「このコンピュータでは扱えないファイル形式です」だとよ(プゲラチョフwwwwwwwなめすぎwwwwwww意味分からんwwwwwww互換性ないから使えないってことか?wwwwwwwwこれがジェフリーの集大成なのか?wwwwwwwwwwwwww
215デフォルトの名無しさん:2005/05/07(土) 07:34:37
やっとコンパイル通りやがったぜ

   __             __/  / |   ┌─┼` _ _|_
     / ─ /  / \ ○   |   /  |   |┐  |   |   / |
  __/  _/  /   \    |  /  レ  /    レ  ̄ / |

    /\___/ヽ
   /''''''   '''''':::::::\
  . |(●),   、(●)、.:| +
  |   ,,ノ(、_, )ヽ、,, .::::|
.   |   `-=ニ=- ' .:::::::| +
   \  `ニニ´  .:::::/     +
,,.....イ.ヽヽ、ニ__ ーーノ゙-、.
:   |  '; \_  _ノ.| ヽ i
    |  \/゙\ /\|  i |
    >   ヽ. V   |   ||
216デフォルトの名無しさん:2005/05/07(土) 07:34:49
結局、>>169は何?
217デフォルトの名無しさん:2005/05/07(土) 07:50:50
リストビューの内容領域が、リストビュー自体より大きくなって
スクロールバーが出ているときに
スクロールバーがでないようにMoveWindowでサイズを変更したいのですが、
適切なサイズを計算するにはどうしたらよいですか?
218デフォルトの名無しさん:2005/05/07(土) 08:00:04
>>216
バカが知ったかしてみたかったんじゃねーの。
219デフォルトの名無しさん:2005/05/07(土) 08:28:34
>>217
GetClientRectでリストビューのサイズ取得してそのサイズにあわせてMoveWindow
220デフォルトの名無しさん:2005/05/07(土) 09:05:43
>>219
ちょっと質問を誤解されているようです。
GetClientRectの引数は親ウィンドウのつもりだったのかリストビューのつもりだったのか
わかりませんが、
リストビューそのもののサイズを
内側のスクロールバーがでなくなるように変えたいのです。
リストビューにGetClientRectしても、現在のサイズが返るだけでした。
221デフォルトの名無しさん:2005/05/07(土) 09:10:58
>>209
ループ内でInvalidateRect()とUpdateWindow()を呼べばいい。
222デフォルトの名無しさん:2005/05/07(土) 09:24:50
>>220
言ってる意味がわかりません
223デフォルトの名無しさん:2005/05/07(土) 09:35:22
超能力を使ってみた。
こんな意味じゃなかろうか↓
例えば、項目の文字列がかなり横長のに、ウィンドウの幅が50ピクセルくらいだと、
クライアント領域内に水平スクロールバーが表示されるってことかな?
人間だったら手動でビューの幅を広げるけど、
そのための十分なサイズを計測する方法を聞いているのだと思われ。
224デフォルトの名無しさん:2005/05/07(土) 10:02:33
最初からそういってるやん。
225デフォルトの名無しさん:2005/05/07(土) 10:08:39
>>223
超能力ありがとうございます!
超能力で質問にも答えていただけますか?

一応、GetScrollInfoでリストビュースクロールバーの情報を得て
nMaxとnMinをとって8ぐらい足すとうまくいくようなんですが
226デフォルトの名無しさん:2005/05/07(土) 10:17:45
なぜ糞挙動なアプリを作りたいのか、目的がわからない。
アイテムを挿入するたびにウィンドウの大きさが変わってしまうのか。
最初から表示したいものが決まってて、要素の数や幅が不変なのであれば
リストビューの属性をスクロールしない設定にしとけばいいんじゃね。
そういう設定項目あるよ。
227デフォルトの名無しさん:2005/05/07(土) 10:34:30
>>226
サイズを変更するのは初期化時のみで
あとはユーザーのリサイズにあわせます
表示したいものはデータによって変わりますので幅も変わります
糞挙動ということはないです
228223:2005/05/07(土) 10:49:28
>>227
226は漏れじゃないぞよ。念のため。
各カラムのサイズを調べればよさげ?
ってかリストビューもあんまり使ったことないし、
徹夜明けの頭で適当に答えてるだけなので責任はもてない。
もっとマシなやつに聞いてくれ。寝る。
229デフォルトの名無しさん:2005/05/07(土) 11:13:47
幅なら幅って最初に言っといてほしいよな
230デフォルトの名無しさん:2005/05/07(土) 11:16:15
普通に考えりゃ幅だろ
縦を気にしてたらきりがないからな
231デフォルトの名無しさん:2005/05/07(土) 11:34:40
>表示したいものはデータによって変わりますので幅も変わります
>糞挙動ということはないです

どう考えても糞。
232デフォルトの名無しさん:2005/05/07(土) 11:54:34
縦だったら仕事で作ったのがあるけど、MFCべったりだ。
233デフォルトの名無しさん:2005/05/07(土) 12:02:44
縦幅ならアイテム数調べて、それ×何ピクセルか指定するだけでいいし
どうにでもなるやん。
234デフォルトの名無しさん:2005/05/07(土) 12:48:32
ClientToScreenはクライアント座標をスクリーン座標に変換する、とありますが
これはマルチモニタシステム上では「仮想スクリーン座標」に変換するものと
考えていいんですか?

自力でテストできたらいいんですが、生憎ディスプレイがひとつしかないので
235デフォルトの名無しさん:2005/05/07(土) 13:03:18
>>233
そして画面下を割るわけですね

つーか、わざわざ少しずつ広げるくらいなら最初から全画面表示しときゃいいじゃん
236デフォルトの名無しさん:2005/05/07(土) 14:09:23
↑脳味噌が一階層しかねぇのかよアホが。
237デフォルトの名無しさん:2005/05/07(土) 15:12:56
まぁそう自分を貶すなよ
238デフォルトの名無しさん:2005/05/07(土) 15:16:50
まぁ、APIの話題ではなくGUIがいかにあるべきかの話題なのですれ違い
239デフォルトの名無しさん:2005/05/07(土) 16:38:07
>>217,>>225
GetScrollRange あたりを調べてみて
GetSystemMetrics の幅や高さを足したら?

親ウィンドウも連鎖的にでかくなるのか?
240デフォルトの名無しさん:2005/05/07(土) 16:49:36
>>205
>>207のようにWM_PAINT内に移した上で、ループ内にInvalidateRect(hwnd,NULL,TRUE)とUpdateWindow(hwnd)でダメ?
241デフォルトの名無しさん:2005/05/07(土) 16:52:58
ウインドウハンドルからLOGFONT構造体を取得するにはどのようにすればいいでしょうか?
242デフォルトの名無しさん:2005/05/07(土) 16:55:28
>>166
できたことある
243デフォルトの名無しさん:2005/05/07(土) 16:57:29
>>241
ウインドウハンドルからって何?
ウインドウハンドルにフォントが関連付けられてる?
244デフォルトの名無しさん:2005/05/07(土) 17:04:29
>>243
HDCからHFONTを取得する方法きぼんぬ。
HDCはHWNDから簡単に取得できるしHFONTからLOGFONTも可能だし。
245デフォルトの名無しさん:2005/05/07(土) 17:06:06
デバイスコンテキストを理解せよ
246デフォルトの名無しさん:2005/05/07(土) 17:07:24
GetObject
247デフォルトの名無しさん:2005/05/07(土) 17:07:35
GetDCでいつも同じDCが返って来るとは限んないよ
248デフォルトの名無しさん:2005/05/07(土) 17:08:45
>>245
ありがとうございます。
デバイスコンテキスト関係は知識が浅いのでもう少し勉強します。
249デフォルトの名無しさん:2005/05/07(土) 17:09:09
じゃなかった
WM_GETFONT
250デフォルトの名無しさん:2005/05/07(土) 17:11:04
>>246
ありがとうございます。
それを試してみます。

>>247
その都度取得と開放を繰り返すので問題ないと思います。
251232:2005/05/07(土) 17:20:02
>>235
顧客からの要求で、「ダイアログが画面内に収まらないなら画面縦一杯に出してListCtrlにスクロールバーを出せ。
さもなくば、適切なサイズにListCtrlをあわせてスクロールバーは出すな。
ただし、ダイアログのサイズは自由に変えられるようにしろ」なんてのがあったりするわけだがね。
#あ、説明不足で誤解されそうな悪寒。
252デフォルトの名無しさん:2005/05/07(土) 17:38:14
もうしゃべらないでいいよ無能
253デフォルトの名無しさん:2005/05/07(土) 18:56:17
指定されたフォルダから指定されたファイルを検索するWindowsの標準関数は、
ファイル名を一字一字比較して、末尾まで一致するファイルへのポインタを返す
という仕様になっていると思うのですが・・・間違ってないでしょうか?
254デフォルトの名無しさん:2005/05/07(土) 19:00:31
http://YahooBB219029188008.bbtec.net/


うはっwwwwwwっwうはっwwwっwwwwwwwwwwww
wwwwwwっうぇ
wwwwwwwwwwww
wおkwww
wwwwwwおkwww
255デフォルトの名無しさん:2005/05/07(土) 19:01:22
>>253
指定されたフォルダから指定されたファイルを検索するWindowsの標準関数
の名前を書いてくれなきゃわからない。
256デフォルトの名無しさん:2005/05/07(土) 20:09:12
>>249
その方法でうまくいきました。
どうもです。

>>252
無能で悪かったな。
257デフォルトの名無しさん:2005/05/07(土) 20:15:57
最近よくみかける>>254みたいなのってなんなんだ?
258デフォルトの名無しさん:2005/05/07(土) 20:16:56
>>257
山田ウイルス
259デフォルトの名無しさん:2005/05/07(土) 20:36:24
>>253
ファイルへのポインタ?
260デフォルトの名無しさん:2005/05/07(土) 22:07:33
>>253
ワイルドカードがあるからそう単純ではないと思う。
261デフォルトの名無しさん:2005/05/07(土) 22:29:05
>>260
ワイルドカードは内部でPathMatchSpecを呼んでるだけだろ。
262デフォルトの名無しさん:2005/05/07(土) 22:39:10
ポップアップメニューって親ウィンドウの中じゃないと絶対表示できない?
グローバルなフックプロシージャからTrackPopupMenu使ってみたけど親ウィンドウ以外では表示されません。
なんか方法ありますか?
263デフォルトの名無しさん:2005/05/07(土) 22:50:19
なんのポップアップだよ
264デフォルトの名無しさん:2005/05/07(土) 22:56:45
別にウィンドウに限定されないけどなあ
265デフォルトの名無しさん:2005/05/07(土) 23:00:39
質問させてください

Cの構造体ってコンパイラによってメンバが
4バイトの境界にそろえられてしまったりすると思うんですけど、
Windowsビットマップをそのまま読み込んで表示しようとした時に
読み込んだバッファに構造体のポインタをそのまま当てはめて使っているサンプルを
見かけるのですが問題ないのでしょうか

手持ちのbccではオプションに色々指定してもちゃんと1バイト区切りになっていましたが
そういう取り決めになっていたりするんでしょうか
266デフォルトの名無しさん:2005/05/07(土) 23:10:27
多分心配無用
267デフォルトの名無しさん:2005/05/07(土) 23:19:49
>>265
構造体の定義で
struct {
 char a;
 int b;
};
なんていう馬鹿なことしなければ大概大丈夫。
268デフォルトの名無しさん:2005/05/07(土) 23:30:25
>>265
普通はBITMAPFILEHEADERの定義の前に
#pragma pack(2)
とか入ってるから大丈夫よ。
まあメンバごとに読んだ方が行儀がいいのは確かだけど。
269265:2005/05/07(土) 23:32:37
ええと、BITMAPFILEHEADERやRGBQUADでWORDとBYTEがあるので大丈夫かなあと心配してみたんです

お話を聞く限り大丈夫そうなので構造体使って画像読み込む関数つくってみます
ありがとうございました!
270デフォルトの名無しさん:2005/05/07(土) 23:34:53
何もしないと、パディングされちまうけど、
BITMAPFILEHEADERとかBITMAPINFO、INFOHEADERとかRGBQUADとかのような、
パディングされたら困るやつは、ちゃんと定義のとこでパディングされないように細工してある
271デフォルトの名無しさん:2005/05/07(土) 23:52:14
>>166
MSDNのmixer〜のあたりを読めば書いてあります。
マイクはMIXERLINE_COMPONENTTYPE_SRC_MICROPHONEでmixerGetLineInfo。
272デフォルトの名無しさん:2005/05/08(日) 00:22:52
ただ、ビットマップに関する構造体に関しては定義でパディング対策してあるけど
ビットマップの実際のビットデータ部は、画像の横幅によってはスキャンラインごとに、
ラインの最後にパディングが有るから、ビットマップファイルを触るときはそこに注意だな
273265:2005/05/08(日) 00:28:51
>>270 >>272
レスありがとうございます
きちんと対策がしてあるものなのですね

データ部の4byte境界は横幅とビットカウントから1ラインのバイト数出す
関数作って対応済みです(`・ω・´) シャキーン

いろいろ心配していただいてありがとうございました
274デフォルトの名無しさん:2005/05/08(日) 00:56:53
>>273
その対策というのが>>268
275デフォルトの名無しさん:2005/05/08(日) 00:57:46
Win32API でのファイル操作についての質問です。

#include <windows.h>

HANDLE hFile;
・・・・・・・・・・・・
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow) {
HWND hwnd;
MSG msg;
WNDCLASS winc;

hFile = CreateFile(lpCmdLine , GENERIC_READ , FILE_SHARE_READ , NULL ,
OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL);
if (hFile == INVALID_HANDLE_VALUE) {
MessageBox(NULL , TEXT("ファイルが開けません") , NULL , MB_OK);
return -1;
}
(以下略)

をコンパイルして実行したら、存在するファイル名をコマンド引数に指定しても
「ファイルが開けません」のエラーメッセージが出てしまいます。

当方の開発環境は、
OS:Windows XP
コンパイラ: lcc-win32 Ver3.8
です。

どなたか問題点を教えて下さい。お願いしますm(_ _)m
276デフォルトの名無しさん:2005/05/08(日) 01:03:26
>>275
CreateFileに渡しているlpCmdLineに何が入っているか確認してみようとは思わん?
277デフォルトの名無しさん:2005/05/08(日) 01:33:09
>>276
ダイアログボックスには何度も表示しましたが、改めてコンソールに出力してみると、
276さんに言われるまで見落としていたのですが、lpCmdLine に入っていたのは
 C:\Document and Settings\・・・・\filename.txt
ではなくて、
 "C:\Document and Settings\・・・・\filename.txt"
↑                            ↑
文字列そのものの両端にダブルクォーテーションがある

ということに気づきました。
気づかない方がヴァカなのかも知れませんが、(私にとって)これは盲点でした。
でも、その一言のお陰で解決しました。どうも有難うございましたm(_ _)m感謝感謝
278デフォルトの名無しさん:2005/05/08(日) 02:41:52
>>277
ちなみにD:\とかだとダブルクォーテーションが排卵よ
279デフォルトの名無しさん:2005/05/08(日) 03:23:07
スペースが入れば入る
280デフォルトの名無しさん:2005/05/08(日) 03:24:34
スペースって宇宙の事だよね
281デフォルトの名無しさん:2005/05/08(日) 03:59:09
急速にスレの質が低下してまいりました
282デフォルトの名無しさん:2005/05/08(日) 04:18:38
>>278
D:\・・・ でもダブルクォーテーション入りました(当方の環境では D ドライブは CD-ROM)。
こちらの環境が Windows XP だからなのか、それとも lcc-win32 のためなんでしょうか・・・・・・
283デフォルトの名無しさん:2005/05/08(日) 06:19:39
サボらないでコマンドラインパーサ書けよ
284デフォルトの名無しさん:2005/05/08(日) 06:54:03
>>283
"を含むパス名って存在しないんだっけ?
パーサを書こうにも仕様がわからんとね。
285デフォルトの名無しさん:2005/05/08(日) 07:31:04
存在しねぇよ
仕様がわからんとねとか言う前に、自分でファイル名つけてみろよ
286デフォルトの名無しさん:2005/05/08(日) 07:31:21
なんでファイル名にスペースなんて使えるようにしたんだろう
287デフォルトの名無しさん:2005/05/08(日) 07:46:14
ファイル名に\ とか / とか使われたらお手上げだよ。
288デフォルトの名無しさん:2005/05/08(日) 08:53:31
CreateFileの前にPathUnquoteSpaces(lpCmdLine);を入れると解決するよ。
289デフォルトの名無しさん:2005/05/08(日) 11:00:01
Path系のAPIはIE4以降必須だから・・・
290デフォルトの名無しさん:2005/05/08(日) 11:12:03
今時IE4以降が入ってないようなWinマシン使ってるヤツが居るのか?
天然記念物だな
291デフォルトの名無しさん:2005/05/08(日) 11:41:22
>>290
某コンピューター系大企業の生産現場では、製品チェック用のノーマルWin95PCが現役だったよ。
工場とかには結構な数あるんじゃないかな?
292デフォルトの名無しさん:2005/05/08(日) 11:50:33
Win95ならもう既にshlwapi.dll入ってたと思うが
293デフォルトの名無しさん:2005/05/08(日) 11:51:37
おいおい
製品チェック用のマシンにどこの馬の骨とも知らんヤツの作ったアプリ入れるんかい
294デフォルトの名無しさん:2005/05/08(日) 13:03:46
自社製より信頼性が高いと思っているのかも知れない。
295234:2005/05/08(日) 14:59:05
だれかおせーて
296デフォルトの名無しさん:2005/05/08(日) 15:58:27
質問したかて、必ず知ってる人間が居るとは限らん
とりあえず俺はしらね
297デフォルトの名無しさん:2005/05/08(日) 16:21:16
仮想の意味がわからんが、モニタ2台あるとスクリーン座標はそのまま出るよ
たとえば、1024幅が2台あってプライマリを左にすれば、 0 - 2047 の範囲になる
298デフォルトの名無しさん:2005/05/08(日) 17:07:38
ダライアス可能?
299デフォルトの名無しさん:2005/05/08(日) 17:33:52
>>298
ひっくり返るほどスレ違いすぎ。
300デフォルトの名無しさん:2005/05/08(日) 18:46:41
Gと外伝なら見たことあるな。
えっ、ダライアスだよ。
301234:2005/05/08(日) 20:19:46
>297
ありがとうございます。
仮想スクリーンてのはこのあたりの文章を参照しました。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/monitor_7hym.asp
302デフォルトの名無しさん:2005/05/08(日) 21:31:20
すんません、
セミコロン(;)つきのファイル名って存在しますか?
303デフォルトの名無しさん:2005/05/08(日) 21:37:52
どころか、セミコロンだけでも存在できる。
304デフォルトの名無しさん:2005/05/08(日) 21:42:12
あちゃあ、まぢですか?

セミコロンをファイル名リストの区切りにしようとしてたんだけど、
破綻しちゃった。
おススメの区切り文字ってありますか?
305デフォルトの名無しさん:2005/05/08(日) 21:51:20
>>304
タブ文字でも改行でも
306デフォルトの名無しさん:2005/05/08(日) 21:52:21
>>304
MFCのCFileDialogでやってるように縦簿'|'はどう?
307306:2005/05/08(日) 21:53:35
「棒」ね
308デフォルトの名無しさん:2005/05/08(日) 21:58:03
>>304
普通にセミコロンでいいじゃんか。
環境変数のパス名とかの区切りだし
309デフォルトの名無しさん:2005/05/08(日) 22:02:29
>>304
'\0'
310デフォルトの名無しさん:2005/05/08(日) 22:06:10
縦棒にします!
ありがとうございました!
311デフォルトの名無しさん:2005/05/08(日) 23:05:50
環境変数ではどうしてんだろう・・・
312デフォルトの名無しさん:2005/05/08(日) 23:31:17
UIやメッセージを表示する専用の子ウィンドウを沢山持つアプリケーションを作る場合、
その時点で使ってない子ウィンドウは、どのようにしておくのが推奨されていますか?
毎回、使う度にCreate と Destroyを繰り返すのはシステムに負荷が掛かるのでしょうか?
一応、作成しておいて、ただ見えなくしておくだけの方がいいのでしょうか?
313デフォルトの名無しさん:2005/05/08(日) 23:32:27
>>312
好きにしろ
314デフォルトの名無しさん:2005/05/08(日) 23:44:28
>>312
TPOに応じて方法を使い分けるべきかと。
少数の複雑なウインドウなら隠蔽するだけのほうがいいと思うが、多数のボタンやエディトボックスなら使うたびにCreateとDestroyを繰り返したほうがいい。
一つのプログラムに二つの方法を混在させると開放し忘れでリークするということもあるだろうからどちらかに統一するのがベター。
315デフォルトの名無しさん:2005/05/09(月) 00:11:27
回答ありがとうございます。
マナーの良いプログラミングを心掛けていきたいと思っています。
316デフォルトの名無しさん:2005/05/09(月) 00:15:47
フックについてですが、WH_GETMESSAGE でフックをかけているんですが、
ウィンドウのアクティブ/非アクティブを変えても WM_ACTIVE が捕捉できません。
全く同じコードで WM_LBUTTONDBLCLK などのメッセージは捕捉できるのですが
WM_ACTIVE は何か特別扱いになっているのでしょうか?
317デフォルトの名無しさん:2005/05/09(月) 00:44:41
>>311
フォルダ名を""で括ればok
318デフォルトの名無しさん:2005/05/09(月) 00:57:32
引用符切り分けるのめんどくさい
319デフォルトの名無しさん:2005/05/09(月) 01:08:14
>>316
WM_ACTIVEはsendされるメッセージ。
WH_GETMESSAGEはpostされたメッセージしか捕らえられない。
320デフォルトの名無しさん:2005/05/09(月) 01:51:38
>>319
なるほど。ありがとう御座います。
WH_CALLWNDPROC でフックできました。
321デフォルトの名無しさん:2005/05/09(月) 03:41:12
FindFirstChangeNotification()

ReadDirectoryChangesW()
のように、ディレクトリごとではなく、ファイルごとに変更を知る方法はありませんか?

一つのファイルを複数のプロセスが共有で開いて読み書きしている時に、
他の誰かが書きこんだことを知りたいので、書き込まれた位置までわかるとありがたいのですが。
322デフォルトの名無しさん:2005/05/09(月) 04:07:20
FindFirstChangeNotification
323デフォルトの名無しさん:2005/05/09(月) 04:27:12
それって、ネットワークドライブでも使える?
324デフォルトの名無しさん:2005/05/09(月) 05:43:25
使える
325デフォルトの名無しさん:2005/05/09(月) 07:18:57
PROCESSENTRY32構造体についてなんですが

PROCESSENTRY32 unko;

と宣言してるのですが
「'PROCESSENTRY32' : 識別名を宣言するのに、型が指定されていません」
とエラーがでます。解決方法を教えてください
326デフォルトの名無しさん:2005/05/09(月) 08:44:11
PROCESSENTRY32 構造体を宣言してください。
327デフォルトの名無しさん:2005/05/09(月) 08:47:08
#include <tlhelp32.h>
328デフォルトの名無しさん:2005/05/09(月) 09:03:47
>>327
既にやってる
329デフォルトの名無しさん:2005/05/09(月) 09:13:09
http://dhcp255-146.tamatele.ne.jp/
うぇwwwっうぇwwwwwwwwwwwwっwwwっうぇ
うはっwwwwwwwwwwwwwwwうはっwww
うぇwwwっwおkwwwっwwwwwwwwwwwww
330デフォルトの名無しさん:2005/05/09(月) 09:13:12
というか<tlhelp32.h>にインクルードしてるのに
「CreateToolHelp32Snapshot' : 定義されていない識別子」って出ます。原因と解決方法を教えてください
331330:2005/05/09(月) 09:17:51
すいません解決しました
332デフォルトの名無しさん:2005/05/09(月) 09:41:32
どう解決したんだよ
>>328を書いた以上、経過を説明してくれないかな
333330:2005/05/09(月) 10:18:54
関数名間違ってただけ
334デフォルトの名無しさん:2005/05/09(月) 10:28:52
>>325
...ENTRY... に「出るもの」の名前は後任者が勘違いしやすい。ここはもっと
ピタッとする名前があるのにしないのはまずいな。
335デフォルトの名無しさん:2005/05/09(月) 11:34:35
334 が非常に的外れなレスをしている気がしないでもないが、
336デフォルトの名無しさん:2005/05/09(月) 16:00:17
>>334
いやいや、その変数をEntryするのかもしれんぞ。
#どこにかは知らんが。
337デフォルトの名無しさん:2005/05/09(月) 16:46:46
シリアルポート2つ使うプログラムで同じCOM番号を指定した時にそれを共有して使う方法を教えてください
338デフォルトの名無しさん:2005/05/09(月) 16:49:33
Telephony API
339デフォルトの名無しさん:2005/05/09(月) 17:05:29
>>338
詳しく
340デフォルトの名無しさん:2005/05/09(月) 17:17:22
341デフォルトの名無しさん:2005/05/09(月) 17:45:05
>>336
あの続きのコードを見たくなった。日経の小説も気になってんだけど。
342デフォルトの名無しさん:2005/05/09(月) 18:06:47
>>340
知らないならレスしないで下さい。ウザイだけです、消えてください
343デフォルトの名無しさん:2005/05/09(月) 18:08:01
オマエモナ
344デフォルトの名無しさん:2005/05/09(月) 18:14:45
騙りが横行してる希ガス
345デフォルトの名無しさん:2005/05/09(月) 18:20:42
共有ねぇ。DuplicateHandleするとどうなるのかは気になるけど、
素直にアウトプロセスCOMみたいなRPCな仕掛けを挟んだら?
346デフォルトの名無しさん:2005/05/09(月) 19:37:00
めんどい
347デフォルトの名無しさん:2005/05/09(月) 21:09:50
コンボボックスを選択して確定することにするにはどうしたらいいでしょうか?
ただたんにテキストをかえるだけではだめなようです。
そのコンボボックスのハンドルはわかっています。

wm_Settext文字を変更することはできたのですが内部的には確定されていないのか結果が反映されないのです
348デフォルトの名無しさん:2005/05/09(月) 21:24:51 BE:38820454-#
>>347
CB_ADDSTRINGで文字列を追加して、帰ってきたインデックスをCB_SETCURSELで選択。
349321:2005/05/10(火) 09:58:23
>>322
あの、それはディレクトリごとだし、
ファイルの変更部分は通知されませんが。
350デフォルトの名無しさん:2005/05/10(火) 10:32:06
ReadProcessMemoryを使ってもことごとくNULLが返ります。アクセス権がないようなのですが解決方法を教えてください。
あとPROCESSENTRY32構造体のメンバth32ProcessIDにはProcess32Nextなどで最後に得たプロセスIDが格納されるのですか?
351デフォルトの名無しさん:2005/05/10(火) 10:49:53
>>349
ファイル単位で監視っていうのは無かったと思う。
352デフォルトの名無しさん:2005/05/10(火) 10:58:45
>>349
ディレクトリの変更がきたら自分で調べりゃいいだろ
353デフォルトの名無しさん:2005/05/10(火) 10:59:49
なんでもかんでもAPIに無いと、何もできないのだろうか
354デフォルトの名無しさん:2005/05/10(火) 12:20:28
>348
ありがとうございます
しかしそれでは目的のテキスト(CB_SETCURSELでセットしたインデックスのテキスト)は一瞬表示されますが
それが選択状態にはならず元にもどってしまいます

なにかいい方法はないでしょうか
355デフォルトの名無しさん:2005/05/10(火) 12:30:30

>>353を晒し上げ(´,_ゝ`)
356デフォルトの名無しさん:2005/05/10(火) 12:40:49
>>354
他のイベントで変な事してるんじゃないのか?
357デフォルトの名無しさん:2005/05/10(火) 12:45:30
そのようなこともないと思います
新規で試しにワードパッドのフォントを変えるものを作ってみましたが
同様でした。

コードは
SendMessage((HWND)コンボボックスのハンドル,CB_SETCURSEL,77,0);
念のためそのコンボボックスの親ウィンドウに
SendMessage((HWND)親ウィンドウのハンドル, WM_COMMAND,MAKEWPARAM(165, CBN_SELCHANGE),(LPARAM)(HWND)コンボボックスのハンドル);
と送ってみましたがそれでもダメでした
358デフォルトの名無しさん:2005/05/10(火) 12:48:32
>>357
>新規で試しにワードパッドのフォントを変えるもの

新規で作って検証するなら、
ウィンドウにコンボボックスのみを貼り付けて、
そのコンボボックスに CB_SETCURSEL を送るだけじゃないのか?

って言うか、外部プロセスのコンボボックスを変えようとしている?
359デフォルトの名無しさん:2005/05/10(火) 12:50:06
申し遅れましたがその通り外部のプロセスのコンボボックスです。
360デフォルトの名無しさん:2005/05/10(火) 12:51:08
やはりこれもwin98で影響を受けたsetforeground同様の制限をもらってしまうのでしょうか?
361デフォルトの名無しさん:2005/05/11(水) 01:28:05
質問なのですが
Win32において
Destoryを実行した場合
Destoryを実行されたWindowが一番最後にうけとるメッセージはなんなのでしょうか?
WM_NCDESTROYが最後でいいのでしょうか?

私的ライブラリでGUIをクラスライブラリ化したのですが
ウィンドウが破棄されたタイミングで自身のインスタンスにたいして
delete thisを行いたいのです。

MFCのほうではPostNcDestroyなるメソッドがあるっぽいのですが・・・
Win32オンリーの場合はどのように対処したらよいのでしょうか?
362デフォルトの名無しさん:2005/05/11(水) 01:30:29
つspy++
363デフォルトの名無しさん:2005/05/11(水) 01:53:31
>>361
それで良いと思う。気になるならMFCのソースを見てコードをまねれ。
364デフォルトの名無しさん:2005/05/11(水) 06:52:22
DestroyWindowを実行すると、WM_DESTROY、WM_NCDESTROYの順番でメッセージが送られる
その後のWM_QUITはウィンドウプロシージャでは受け取らない
よって、NCDESTROYが最後にウィンドウが受け取るメッセージ
365349:2005/05/11(水) 09:55:50
>>351-353
ありがとう。
無駄に重くなるけど、ディレクトリごと監視します。

>>350
ReadProcessMemoryの返り値はBOOLですよ。
0が返ってきたら、GetLastError()してエラーコードを見ましょうよ。
366デフォルトの名無しさん:2005/05/11(水) 11:59:41
>>365
あぁ?失敗したらヌルポが返るんだよデブ。もう原因わかったからどっか行っていいよ
367デフォルトの名無しさん:2005/05/11(水) 12:09:09
>>366
「ヌルポ」がcatchできないんですが^^
368デフォルトの名無しさん:2005/05/11(水) 13:30:36
>>366
まあしねよぶた
369デフォルトの名無しさん:2005/05/11(水) 14:28:27
StretchBltの縮小画質がありえないくらい
汚いんですが(ゴミが入るようなかんじ)、フリーか何かで代用のAPIないでしょうか?
教えてください
370デフォルトの名無しさん:2005/05/11(水) 14:31:15
何でもかんでも API って言えばいいと思ってる奴
             キタ━━━━(゚∀゚)━━━━ッ!!
371デフォルトの名無しさん:2005/05/11(水) 14:36:43
>>369
SetStretchBltMode はどのモードでやった?
372デフォルトの名無しさん:2005/05/11(水) 15:28:24
>>369
つ[DirectX]
373デフォルトの名無しさん:2005/05/11(水) 15:35:07
gdi plus
374デフォルトの名無しさん:2005/05/11(水) 16:14:07
IPicture::Render
375デフォルトの名無しさん:2005/05/11(水) 16:22:29
自前でリサイズしたら?
376デフォルトの名無しさん:2005/05/11(水) 16:57:48
誘導されてきました

フォルダの中のファイルの監視をしたいのですが
下のコードを実行して c:\test フォルダ内のファイルの内容を変更すると
メッセージボックスが二回表示されてしまいます。
変更は一回しかしていないのに二回でてしまうのですが
ここまでコードを短くしても出るので行き詰まってしまいました
二回検知してしまう動作が正しいのでしょうか?
どこかおかしくて二回出てしまうのならばご指摘お願いします。

HANDLE hFind = FindFirstChangeNotification( "C:\\test\0", FALSE, FILE_NOTIFY_CHANGE_SIZE );
if( hFind == INVALID_HANDLE_VALUE )
  return;

while( 1 )
{
  DWORD ret = WaitForSingleObject( hFind , INFINITE );
  if( ret == WAIT_OBJECT_0 )
  {
    MessageBox( NULL, "TEST", "Changed!", MB_OK );
    if( FindNextChangeNotification( hFind ) == 0 )
      return;
  }
}
FindCloseChangeNotification( hFind );
377デフォルトの名無しさん:2005/05/11(水) 17:54:36
>>376
変更手段によるかと。
例えばエディタの場合、一時ファイルを作ったりするから一回の変更と思っても
複数回ファイル操作が行なわれているかも。

実際、fopen(..., "w")を行なうと空のファイルができるのでこの段階で一回、
fclose()でバッファフラッシュが起きて一回、都合2回通知されることは実験で確認した。
378デフォルトの名無しさん:2005/05/11(水) 18:02:26
>>376
何でファイルを変更しているのか知らないけど、多くのソフトはファイルを一度
0 サイズにクリアしてから改めて書き込む (CreateFile() で CREATE_ALWAYS を
指定したり、fopen() で "w" を指定していたりなど) ので、
 1. 0 クリアで 1 回
 2. データの書き込みで 1 回
の合計 2 回、変更が検知される。
(試しに 0 バイトのデータを保存してみること)
さらに、ディスクキャッシュサイズごとに書き込むので、そのたびに
変更が検知される可能性もある。
379376:2005/05/11(水) 18:40:25
>>377
>>378
そういうことだったのですか!よく分かりました。
ファイルが変更されたあとフォルダのサイズが変わる?ので二回きている
とか色々考えていました
ちなみにファイルはテイストファイルでnotepadで書き換えていました

でも二回くるのはどうしようもないですね
ちょっと厄介になってきましたが
上手く一回だけ処理できるよう試行錯誤してみます

ありがとうございました
380デフォルトの名無しさん:2005/05/11(水) 18:54:06
テイストファイル(・∀・)!! ワラタ!!
381デフォルトの名無しさん:2005/05/11(水) 18:57:14
>>380
箸が転がっても笑う人?
382デフォルトの名無しさん:2005/05/11(水) 18:59:37
>>381
いやそれはさすがに                                               笑う
383デフォルトの名無しさん:2005/05/11(水) 19:11:28
笑う(・∀・)!! ワラタ!!
384デフォルトの名無しさん:2005/05/11(水) 19:17:41
  _  ∩
( ゚∀゚)彡 ワラタ!!ワラタ!!
 ⊂彡
385デフォルトの名無しさん:2005/05/11(水) 19:18:55
ここはハッピーなインターネットですね?
386デフォルトの名無しさん:2005/05/11(水) 20:12:21
WAVEファイルに格納されているサンプリングデータを取得するには、
WAVEファイルを自前で解析するしか方法はありませんか?
WAVE ファイルを解析するための API はないのでしょうか?
387デフォルトの名無しさん:2005/05/11(水) 20:17:27
WaveOut
388デフォルトの名無しさん:2005/05/11(水) 20:33:09
そもそもWaveファイルにしてもBitmapファイルにしてもファイル構造はどっちも単純だろうに。
389デフォルトの名無しさん:2005/05/11(水) 20:35:59
>>386
標準のwavファイルならヘッダを取り除けば、あとは生のPCMデータのはずだけど。

低レベル再生したいのなら、>>387のWaveOut系APIでも使えば良い。
再生中に、サンプルデータも自由に処理できるしね。

高レベルAPIでいいなら、PlaySound()やsoundPlaySound()で。
390デフォルトの名無しさん:2005/05/11(水) 20:43:59
解析したいと言ってるのにPlaySoundはないだろうw
ところでMCIってまだあるのかな。
考えたら5年ぐらいマルチメディア刑API触ってないや
391デフォルトの名無しさん:2005/05/11(水) 20:47:12
>>389
waveファイルってRIFF形式だった気がするんだが。
mmio〜系のAPIで操作できる・・・はず
392デフォルトの名無しさん:2005/05/11(水) 20:48:47
>>389
> 標準のwavファイルならヘッダを取り除けば、あとは生のPCMデータのはずだけど。

PCMとは限らないんだけど。。。
393デフォルトの名無しさん:2005/05/11(水) 20:52:55
>>390
もちろん残ってる。Win95の頃と実装は変わってるようだけど。
394デフォルトの名無しさん:2005/05/11(水) 22:19:33
>>386
作るのが面倒臭かったらこんなの使ってみたら?
Wave File Library(Windows95/98/Me/プログラミング)
ttp://www.vector.co.jp/soft/win95/prog/se214677.html
395デフォルトの名無しさん:2005/05/11(水) 22:25:02
宣伝乙。
いやしかし、既成ライブラリに頼るというのはこの場合正解だよ。
WavOutは使いやすいとは言い難いしな。
396デフォルトの名無しさん:2005/05/12(木) 01:11:31
ピクチャーコントロールにDirectXで描画するダイアログベースのツールを作ろうとしているのですが、
ピクチャーコントロールの更新されるタイミングが分からず困ってます。
DirectXの描画特有の問題かとも思ったのでDXスレで伺ったのですが、
なかなかレス頂けないみたいなのでこちらにも失礼します。

まずはアプリ起動時にDXで適当な矩形でも表示してみようと、
WM_INITDIALOGで矩形描画関数を呼んでみたのですが、
一瞬描画されたあと、ピクチャーコントロールの色で塗りつぶされてしまうようでした。
なので、WM_PAINT内でも同じように描画関数を呼んで見たのですが相変らず
起動時に矩形を表示してくれません。
(というかピクチャーコントロールの描画で消されているような感じ。)
WM_LBUTTONDOWN内などで描画すればきちんと表示されるのですが、
WM_MOVE内で呼んだ時などは、一度目の移動では表示されず、
二度目以降の移動では表示されるという、よく分からない挙動になっています。
どうしたらいいのでしょうか?

環境はW2k、VC6、DX9.0bです。よろしくお願いします。
397デフォルトの名無しさん:2005/05/12(木) 01:58:25
>>396
まずはDirectX描画域の背景を描画しない設定にする。
ダイアログのスタイルにWS_CLIPCHILDRENを適用、
コントロール側のWM_ERASEBKGNDで0以外の値を返す
これでちらつき・上書きは消えるはず。
398デフォルトの名無しさん:2005/05/12(木) 02:18:11
Win32API を使用したプログラムを実行したときに、コマンドプロンプトを待たせない方法はないのでしょうか?

例えば、コマンドラインから notepad を起動したとき、

 C:\>notepad[改行]
 
 C:\>
 (notepad が開く)

となりますが、自作のプログラムでは

 C:\>hogehoge[改行]
 (hogehoge が終了するまで待機状態)

となってしまいます。
これを解決するにはどうすればよろしいのでしょうか?
399デフォルトの名無しさん:2005/05/12(木) 02:23:26
>>398
コンソールアプリでビルドしてないか?
400398:2005/05/12(木) 02:28:36
ビルドというか、lcc-win32 でプログラムを作成し、

 C:\>lcc hogehoge.c
 
 C:\>lcclnk hogehoge.obj

というふうに実行ファイルを作成しています。
それとも、この環境では >>398 の問題を解決することは出来ないのでしょうか?
401デフォルトの名無しさん:2005/05/12(木) 02:46:14
Meadow2ってエディタについてくるfiber.exeってやつなら
C:\ > fiber.exe hoge.c  
ってすれば
「.c」拡張子のファイルをクリックした時に起動するプログラムがそのファイルを開いて
シェルにも処理がもどる。
402デフォルトの名無しさん:2005/05/12(木) 02:54:22
>>400
それは「Win32API」の話ではなく、特定の処理系の話なのでスレ違い
403398:2005/05/12(木) 02:58:49
すみません、説明不足でした。

エディタのことではなくて、自分で作成(コンパイル)した Win32API プログラムを実行したときに、
そのプログラムが実行したままシェルにも処理が戻るようなプログラムを作りたいのです。

 C:\>lcc hogehoge.c
 
 C:\>lcclnk hogehoge.obj
 
 C:\>hogehoge

 C:\>
 (hogehoge.exe は実行されたまま)

となるような hogehoge.c を作りたいのですが、どうすればよろしいのでしょうか?
プロセスやスレッドについて調べてみても、どうもうまく行きません。
404デフォルトの名無しさん:2005/05/12(木) 02:59:28
void FreeConsole(void);
405398:2005/05/12(木) 03:13:58
>>404
そんな関数があったんですね。
どうもありがとうございました!!m(_ _)m感謝感謝
406396:2005/05/12(木) 03:38:07
>>397
ありがとうございます。

>まずはDirectX描画域の背景を描画しない設定にする。
>コントロール側のWM_ERASEBKGNDで0以外の値を返す

この二つの意味は同じでしょうか?別の事を指してますか?とりあえず
DirectXで描画したいのはダイアログ内に配置したピクチャーコントロールなのですが、
これをサブクラス化してその自前プロシジャ内に
case WM_ERASEBKGND:
return 1;
と追加してみたのですが、変わりませんでした。

>ダイアログのスタイルにWS_CLIPCHILDRENを適用、
これはピクチャコントロールが乗ってる親ダイアログのプロパティで設定しても変わりませんでしたし、
ピクチャコントロール自体にSetWindowLongでWS_CLOPCHILDRENを設定してみても変わりませんでした。
407デフォルトの名無しさん:2005/05/12(木) 03:47:08
408デフォルトの名無しさん:2005/05/12(木) 04:03:08
>>398
今の状態だとエクスプローラから実行するとコンソールが開くんでないかい。
それで構わないのならFreeConsoleでも使ってればいいんだけど、
そうじゃないのなら、lcclnkのマニュアルをよく読んどけ。
409デフォルトの名無しさん:2005/05/12(木) 05:37:12
Win32APIの話っていうより
そもそもWindowsプログラミングの
410デフォルトの名無しさん:2005/05/12(木) 06:34:19
>>376
何をしたいのかによるけど、
通知を何度受けるかわからない
という前提で作ったほうがいいですよ。

また通知を受けるたびに処理をしてたら重くなるので、
通知を受けたら、変更があったということだけ覚えておき、
それに対するアクションはその場ではしないほうがいいです。

もし通知に対してアクションをしたいのであれば、
1秒くらい待ってからやったほうがいいかも。
411デフォルトの名無しさん:2005/05/12(木) 10:40:44
ウインドウのタイトルや枠などの色の取得方法を教えてください。
412デフォルトの名無しさん:2005/05/12(木) 11:18:49
GetSysColor
413デフォルトの名無しさん:2005/05/12(木) 12:26:40
文字列が正当なURLであるかどうかを確かめるAPIと、
URLからホスト名などを抜き出すAPIはありますか?
414デフォルトの名無しさん:2005/05/12(木) 12:31:00
>>413
使ったことは無いけど、

>文字列が正当なURLであるかどうかを確かめるAPI
::UrlIs()にURLIS_URLを渡して確認する。

>URLからホスト名などを抜き出すAPI
::UrlGetPart()にURL_PART_HOSTNAMEを渡して切り出す
415デフォルトの名無しさん:2005/05/12(木) 14:58:39
>>414
できました。
ありがとうございます。


#shlwapi.dllには、自前で書くこともできるけど、面倒くさいから書きたくない処理をする関数がたくさんある気がする。
416デフォルトの名無しさん:2005/05/12(木) 16:22:36
MSはレジストリを使うことを推奨してるのに
レジストリを使うアプリが嫌われる理由は何?
417デフォルトの名無しさん:2005/05/12(木) 16:42:40
ユーザーが消しにくいから。

インストールしたフォルダを削除しても消えないからね。
まあそれが利点でもあるんだけど。
418デフォルトの名無しさん:2005/05/12(木) 17:03:32
レジストリをいじりまくるとレジストリファイルが断片化・肥大化するから。
Win9xの場合はそれが原因で不安定になることがあった。

もういい加減過去の話だが。
419デフォルトの名無しさん:2005/05/12(木) 17:08:54
.NETではXMLで保存するのが推奨されるとかどこかで読んだ気がするんだけど
420デフォルトの名無しさん:2005/05/12(木) 17:41:01
ちょっとしたツールだと、フォルダごとコピーすれば設定もコピーできて楽。
421デフォルトの名無しさん:2005/05/12(木) 18:15:16
しかしファイルで保存するにしてもユーザーのフォルダにしてほしいなあ
自分ちのマシンならどこでもいいが・・・
422デフォルトの名無しさん:2005/05/12(木) 19:53:11
ユーザのフォルダに設定ファイルを置くと、
1つのフォルダごとコピー・移動・削除
では済まなくなるので、レジストリと大差ないんだよね。
その割には、メリットがない。

EXEと同じフォルダにINIファイルを置くのは、
シングルユーザ当たり前のDOS時代の悪い慣習を引きずってると思う。

レジストリにすれば、ファイルのインストール先を気にしなくていいし、
レジストリをバックアップすれば、一括して設定をバックアップできるよね。
423デフォルトの名無しさん:2005/05/12(木) 20:06:10
便乗で質問ですが、
ユーザーのフォルダの取得って何を使えばよいですか?
ユーザー毎の設定を\Documents and Settingsの奥深くにある
フォルダに置きたい。
424デフォルトの名無しさん:2005/05/12(木) 20:10:22
>>422
初心者の発想だね
425デフォルトの名無しさん:2005/05/12(木) 20:17:34
>>423
GetEnviromentVariableで環境変数HOMEPATHを取得
USERPROFILEでもいい
426デフォルトの名無しさん:2005/05/12(木) 20:23:18
2000、XPでもレジストリのコンパクションはできないから肥大化する一方
427デフォルトの名無しさん:2005/05/12(木) 20:37:49
>>425
ありがとう。
428デフォルトの名無しさん:2005/05/12(木) 20:41:31
なんだよ、レジストリってのは欠陥システムだな。
429デフォルトの名無しさん:2005/05/12(木) 20:42:21
ややこしいことが1つの売りだったんだよ
商用とかシェアウェアにとっては
430デフォルトの名無しさん:2005/05/12(木) 20:56:28
>>423,425

ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnw2kcli/htm/AppSpecDesk5.asp

SHGetFolderPath() を使ったやり方が書いてある。
こっちの方が MS の推奨ということか?
431デフォルトの名無しさん:2005/05/12(木) 22:14:00
SH〜系ってなんかアバウトというか、信用ならねーって感じのAPI群だけど、
それがMS推薦っぽいね。
432デフォルトの名無しさん:2005/05/12(木) 23:35:08
なんていうかもうapi関数大杉('д`)
433デフォルトの名無しさん:2005/05/13(金) 00:29:19
>>426
レジストリのサイズは消せば小さくなると思うけど・・・
VS.NETをインストール中に、一時的にものすごく大きくなるけど、インストール終わると減るし。

>>424
他に良い方法があれば教えてください。

1つのINIファイルの中にユーザごとに設定を書くと、
一人の設定を他所に移すのが難しくなるよね。

ユーザ別にINIファイルを分けると、
ユーザ名が変わったときにファイル名を変更しないといけない。

ユーザ名の代わりにSIDを使うと、他所のドメインやPCに移したら困るし。

434デフォルトの名無しさん:2005/05/13(金) 00:52:58
>>433
キーや値を削除してもサイズが減らない、それがWINDOWSのレジストリ
435デフォルトの名無しさん:2005/05/13(金) 00:55:48
VACUUMかければいいじゃない
436デフォルトの名無しさん:2005/05/13(金) 01:39:36
>>435
詳しく
437デフォルトの名無しさん:2005/05/13(金) 01:42:17
そりゃPostgreSQL
438デフォルトの名無しさん:2005/05/13(金) 01:50:05
どうせレジストリがパンクする頃には
新ウィンドウズが出てるんだろ。
XPももう過去の物だろw
439デフォルトの名無しさん:2005/05/13(金) 04:05:29
Snes9xにキーの入力情報送りたいんだけど
SendMessageやPeekmessageでは矢印や
ABYXに相当するボタンの情報を送っても無反応です。
(F1や1等ゲームというよりSnesの機能に相当するものは動きます。)

(例えばキーボードのAにSnesのAを割り当ててSendMessage送っても効果なし)

なんかこれ解消するAPIないっすか?
440デフォルトの名無しさん:2005/05/13(金) 04:47:21
Peekは受ける側だったorzPostMessageね
441デフォルトの名無しさん:2005/05/13(金) 04:54:38
DirectInput使ってるからだろ。
442439:2005/05/13(金) 05:37:47
どうにかならんもんですかね。
443デフォルトの名無しさん:2005/05/13(金) 05:56:07
SendInpu()とかはだめ?
444439:2005/05/13(金) 06:14:58
試してみようと思ったらサンプル少ねぇ
MSいってみます
445439:2005/05/13(金) 12:56:46
>>443
キタ*・゜゚・*:.。..。.:*・゜(゚∀゚)゚・*:.。. .。.:*・゜゚・*!!!!!
後世の為に置き去りメモ

SendInputを使う為にstdafx.hの中に

#define _WIN32_WINNT 0x0501
#define WINVER 0x0501

を宣言。呼び出したい場所で

UINT ret;
INPUT tt;
tt.ki.wVk=0x41;
tt.ki.dwFlags=0;
tt.ki.time=0;
tt.type=INPUT_KEYBOARD;
ret=SendInput(1,&tt,sizeof(INPUT));

押しっぱになるのでdwFlagsで適度に補正してやる必要あり。
446デフォルトの名無しさん:2005/05/13(金) 13:43:20
GetWindowThreadProcessIdなどで取得したプロセスIDのベースアドレスを求めるにはどうしたらいいのでしょうか?教えてくださいお願いします
447デフォルトの名無しさん:2005/05/13(金) 15:23:29
>>446
プロセスIDのベースアドレス
この時点で、何か間違ってるよ。

いったい何がしたいの?
448デフォルトの名無しさん:2005/05/13(金) 16:10:32
うるせぇカスだなぁ。わかんねぇならでしゃばんなよボケが。
readprocessで戻ってきたハンドルのベースアドレスだよタコ。ほんとお前みたいカスがくると気分悪くなるぜ。
お前のせいでまたこんなレスしてしまった俺は結局自分で解決するハメになると。ほんとうぜぇ・・・
449デフォルトの名無しさん:2005/05/13(金) 16:17:25
スレのレベルが急速に低下してまいりました。
450デフォルトの名無しさん:2005/05/13(金) 16:18:10
お前が読み取りを始めたいアドレス=ベースアドレス(ReadProcessMemory()では)。
プロセスID→プロセスハンドルにはOpenProcess()がある。
451デフォルトの名無しさん:2005/05/13(金) 16:26:00
だからReadProcessMemoryで指定するベースアドレスがわかんねぇから教えろっつってんだよ。あ?わかんねぇんだろ?お?あぁ?コラ
452デフォルトの名無しさん:2005/05/13(金) 16:27:23
      __ ┌┬┬┬┐ __
    ―――┴┴┴┴┴―――――、
   /.  ̄ ̄ ̄//. ̄ ̄| || ̄ ̄ ̄||| ̄ ||     __________
  /.    ∧// ∧ ∧|.||      |||   ||  /
 [/____(゚_//[ ].゚Д゚,,) ||___|||   || <  >>448,451を迎えに来ました
 ||_. *  _|_| ̄ ̄ ∪|.|.       .|ヽ. _||  \__________
 lO|o―o|O゜.|二二 東|.|京 精神 .病院 ||
 | ∈口∋ ̄_l__l⌒l_|_____|_l⌒l_||
   ̄ ̄`ー' ̄   `ー'  `ー'   `ー'
453デフォルトの名無しさん:2005/05/13(金) 16:52:25
>>451
お前がやりたいこと次第。
454デフォルトの名無しさん:2005/05/13(金) 17:03:08
おまえらわかんねーならレスするなつってんだろ!
455デフォルトの名無しさん:2005/05/13(金) 17:10:11
>>454
ごめんよ、おれもわかんねーや
456デフォルトの名無しさん:2005/05/13(金) 17:57:30
457デフォルトの名無しさん:2005/05/14(土) 01:12:53
おいおい、騙りを何相手してやってんだ?
458デフォルトの名無しさん:2005/05/14(土) 04:00:39
うるせーよ。煽りたいだけのやつはしゃしゃりでんなよカスどもが
ほんと使えねーなー
459デフォルトの名無しさん:2005/05/14(土) 04:10:02
リソースエディタで作ったダイアログ内のボタンコントロール上に
矩形を描画しようとしているのですが、全く表示されません。
TextOutしてみても何も文字が表示されません。
どこがおかしい部分があるでしょうか?
何か他の部分で、ここがあやしそう、などありましたら教えてください。

hdc=GetDC(hWnd);//hWnd=GetDlgItemで取得したボタンのハンドル
hPen=CreatePen(PS_SOLID,1,RGB(r,g,b));//rgbは適当な値が入ってる
hBrush=CreateSolidBrush(RGB(r,g,b));
SelectObject(hdc,hPen);
SelectObject(hdc,hBrush);
Rectangle(hdc,0,0,100,100);
TextOut(hdc,0,0,"iii",3);
460459:2005/05/14(土) 04:22:41
WM_PAINT内でやったらうまくいきました。
WM_INITDIALOG内でやってたのでダメだったようです。
461459:2005/05/14(土) 05:02:09
度々すいません。やはり挙動が変です。
今までデバイスコンテキストの取得はGetDCを使ってたのですが、
GeginPaintとかいうのを使った方がいいらしいので書き換えました。
ですが、ダイアログ起動時に四角形は描画されるものの、ボタン自体が描画されません。
ボタンの部分を押してみるとボタンは出現するのですが、
今度は四角形が消えてしまいます。どうしたらよいのでしょうか。

//ダイアログのプロシジャ内
case WM_PAINT:
DrawRect(GetDlgItem(hWnd,IDC_BUTTON),100,100,0);
return FALSE;

//矩形描画関数
void DrawRect(HWND hWnd,int r,int g, int b){
PAINTSTRUCT paint;
HDC hdc;
HBRUSH hBrush;
RECT rct;
GetClientRect(hWnd,&rct);//hWnd はボタンのハンドル
hdc=BeginPaint(hWnd,&paint);
hBrush=CreateSolidBrush(RGB(r,g,b));
SelectObject(hdc,hBrush);
Rectangle(hdc,4,4,rct.right-5,rct.bottom-5);
EndPaint(hWnd,&paint);
ReleaseDC(hWnd,hdc);
DeleteObject(hBrush);
}
462デフォルトの名無しさん:2005/05/14(土) 06:47:52
>>446
ほんとここの無知どもはウザイよね。
おまえの気持ちはよくわかる。
特に>>449の馬鹿は、わかんねーのに答えるからレベル低下してるってのが
どうやら理解できないらしい。

というわけだから、わかるおれが答えてあげよう。
全部説明するとなると大変なのでかいつまんで言うと、
まずプロセスといっても中で実行されてるのはスレッドという単位だ。
つまりプロセスで実際に動いているスレッドを特定する必要がある。
これはいろんな方法があるので別途AdvancedWindows読むなり
すればわかる。PSAPIとかでググるのもいいかも。
スレッドを特定するまでできたら、そのスレッドに対して一旦
SuspendThreadなりで停止させ、GetThreadContextを呼ぶ。
すると現在の正確なEIPが得られる。

EIPが得られたら、そのアドレスからこんどはプロセスに
割り当てられているメモリのベースアドレスを特定する。
メモリのチェインをたどっていけばEIPの範囲に収まる
ブロックが見つかるはず。
それが質問のベースアドレスということになる。
まあPSAPIを使わなくても、たとえば普通のアプリなら
0x400000以降がベースアドレスだとか決め打ちされてる。
もちろんこの辺を細工しているアプリもある。
これの特定はプロセスにロードされているコードセクションの
PEヘッダ部分を見るのが手っ取り早い。
一番早いのは、そのプロセスに侵入してしまうという方法。
この辺のやり方の詳細を知りたいなら、やっぱり
AdvancedWindowsを読んどくのが良い。
463デフォルトの名無しさん:2005/05/14(土) 07:13:03
結局AdvncedWindows嫁って結論になったけど、
プロセス・スレッド周りの質問は説明しようとすると長くなるからね。
こんな糞スレだと、その説明が正確とも限らないし。
とりあえずやり方だけでも知っとけば道は開ける。
やっぱあの本の存在は偉大なんだよなあ。

ちなみにAdWinにはPEヘッダの読み方は載ってないので、
その辺はWebか何かで調べるしかない。
pe formatかなんかでぐぐれば出てくる。
PEヘッダの構造を理解するのにはかなり時間がかかると思うけど、
プロセスを解析する近道はPEヘッダなので、この辺はぜひ調べて欲しい。
464459:2005/05/14(土) 08:41:54
いろいろ試してるのですが解決しないので
簡略化してUPしました。ソースとVC6のリソースが入ってます。
おかしい所を指摘していただけると助かります。

ダイアログ内にボタンが二つあります。
起動時にボタンの上に白い四角が表示されるのが理想なのですが、
なぜかボタン自体が描画されません。
ボタンを押すと色選択ダイアログが開き、
選択した色の四角がボタンの上に表示されるようにしたいです。
ですが、このサンプルではなぜか、一方のボタンで色を選択すると
もう一方のボタンの上の四角が消えてしまいます。
常に表示されているようにしたいです。
よろしくお願いします。

ttp://gamdev.org/up/img/2660.zip
465デフォルトの名無しさん:2005/05/14(土) 08:50:44
>>461
ボタンはダイアログの子ウィンドウ。
WM_PAINTが来たのはダイアログであって、ボタン(子ウィンドウ)に来たわけではない。
だからそのコードは不正。

で、そういうことがしたければオーナードローしなさい。
466デフォルトの名無しさん:2005/05/14(土) 08:53:32
>>464
>おかしい所を指摘
あんたの頭。

以下解説を書こうとしたら>465に先を越されたので割愛。
467デフォルトの名無しさん:2005/05/14(土) 12:05:12
>>464
オーナードローの他に、サブクラス化すると言う手もある。
どちらも詳細はググルか ttp://www.kumei.ne.jp/c_lang/ 辺りを探せ。
468デフォルトの名無しさん:2005/05/14(土) 12:11:23
>>448
> うるせぇカスだなぁ。わかんねぇならでしゃばんなよボケが。

人に文句つける前に、自分の日本語を見直せよ。

[ >>446より ]
> プロセスIDのベースアドレスを求めるには

・プロセスID
  プロセスを一意に識別するための識別子

識別子にベースアドレスなどない。
君の質問は、

 「整数値 1 のベースアドレスを求めるにはどうすればよいか?」

などと言っているのと大差ない。
日本語は正しく使え。
469デフォルトの名無しさん:2005/05/14(土) 12:48:59
>>462-463
ありがとうございます。

>>468
カスは黙っとけ(プw
470デフォルトの名無しさん:2005/05/14(土) 12:59:53
質問です
ウィンドウを何よりも最前面に表示するにはどうすればいいのでしょうか?
DirectDraw等で全画面+最前面になってる物のさらに上に表示したいです
普通に最前面にしただけでは無理でした orz
471459:2005/05/14(土) 13:09:56
>>467
サブクラス化はボタン一個ずつに対してプロシジャ作るのが面倒くさいからやめました。
ボタンを押したらColorChooserダイアログを出して色を選択し、
ボタン上の四角に反映させたかったのですが、
押された後ではボタンのイベントは発生しないので、
オーナードローでは次に押すまで色が反映されないのでダメでした。
結局、消極的な方法で妥協しました。ありがとうございました。
472デフォルトの名無しさん:2005/05/14(土) 13:28:52
DirectDrawサーフェイスの前に持ってくるにはクリップするしかない
473デフォルトの名無しさん:2005/05/14(土) 13:51:58
質問です。

@ウインドウ作成してアクティブな状態にする
Aマウスでウインドウ外をクリックして非アクティブにする
Bタイマーで定期的に ShowWindow や SetForegroundWindow などを呼ぶ

AとBを繰り返すと、一回目は最前面にウインドウが表示されるのに、2回目以降は最前面に表示されません。
どうすれば最前面に表示することが出来るのでしょうか?

よろしくお願いします。
474デフォルトの名無しさん:2005/05/14(土) 14:04:12
>>473
CreateWindowEx(WS_EX_TOPMOST, ...

>>470のような高度な要求をしなければこれでいい。


SetForegroundWindow()は2000/XPで挙動が変更されたはず。
475470:2005/05/14(土) 14:24:43
>>472
まえゲームで全画面+最前面なものをしてたときに、
なんかの拍子で、最前面表示してた後ろのWinampがゲーム画面内にずっと表示されたままになったので
なにかほかに方法があるのかなと思ったのです orz
#Winampは再生中の時間もちゃんと表示され操作も可能でした
476デフォルトの名無しさん:2005/05/14(土) 15:18:29
>>475
ttp://saw.minidns.net/software/index.html#soft09
こーゆーの使うとかじゃ駄目か?
477470:2005/05/14(土) 15:41:59
>>476
某MMORPG用のツールなので窓化はむりぽいです
公認ツールとして交渉中なので orz
478デフォルトの名無しさん:2005/05/14(土) 19:22:54
ゲームのウィンドウをオーナーに指定する
DirectDrawSurfaceはGDIのクリッピング領域に従わないと思うから
ちゃんと描画されない気がするけど
479デフォルトの名無しさん:2005/05/14(土) 19:30:28
だからDirectDrawClipperでやるしかないって
480デフォルトの名無しさん:2005/05/14(土) 21:57:59
>>471に亀レス

> ボタンを押したらColorChooserダイアログを出して色を選択し、
> ボタン上の四角に反映させたかったのですが、
そういうボタンならサクラエディタなるオープンソースのテキストエディタに
あるからソースを参照にしてみるのはどうかな?
ちなみにサクラエディタではオーナードローで描画してるよ。

> 押された後ではボタンのイベントは発生しないので、
> オーナードローでは次に押すまで色が反映されないのでダメでした。
これはどこかソースがまずいんじゃない?

オーナードローは大した手間ではないし、コントロール上で自分の
好きなように描画する定石なんで知ってて損は無いよ。

あと、
> サブクラス化はボタン一個ずつに対してプロシジャ作るのが面倒くさいからやめました。
こいつは実装次第でどうにでもできる。
481デフォルトの名無しさん:2005/05/14(土) 22:53:41
ReadProcessMemoryなんていうスケベなAPIを使うのに、
自力で使いこなせないようなレベルの低い香具師って、
ろくでもないことをやろうとしている人間の屑だろうな。

どうせゲームのチートツールやウィルス等の怪しげなものを作ろうとしてるんだろ?

いいかげんウザイので、答えを教えてやる。
VirtualQuery()だ。
もうこのスレに出てくるなよ。
482デフォルトの名無しさん:2005/05/15(日) 09:49:47
>>481
カスが必死にググッてその様かwwwwwそんなもん質問する前から知ってますがwwwwwwwいい加減カスは黙ってチンポでも弄ってろwwwww
483デフォルトの名無しさん:2005/05/15(日) 09:53:03
最近w使う人増えたね。
484デフォルトの名無しさん:2005/05/15(日) 10:51:41
Windows, DWORD, WM_*
485473:2005/05/15(日) 11:02:32
>474
レスサンクス
早速試してみましたが駄目でした
486デフォルトの名無しさん:2005/05/15(日) 11:15:18
>>485
SetWindowPosでHWND_TOPMOS指定したら?
487デフォルトの名無しさん:2005/05/15(日) 12:04:33
レスサンクスと書かれると、less thanks と読んでしまう。
488デフォルトの名無しさん:2005/05/15(日) 12:48:46
GetLastErrorの使い方がわかりません
489デフォルトの名無しさん:2005/05/15(日) 12:52:49
MSDNに載ってます
490デフォルトの名無しさん:2005/05/15(日) 13:00:50
使い方は載ってません
491デフォルトの名無しさん:2005/05/15(日) 13:05:41
>>490
プログラムなんかやめたほうがいいよ
492デフォルトの名無しさん:2005/05/15(日) 13:28:36
載ってます
493デフォルトの名無しさん:2005/05/15(日) 13:57:40
msdnのトップに出てる赤シャツの男って凄い頭よさそうだよな。
腕組みながらあの自信に満ち溢れた顔なんかとくに。
494デフォルトの名無しさん:2005/05/15(日) 15:11:36
どうも、赤シャツの男です。
495デフォルトの名無しさん:2005/05/15(日) 15:18:03
>>494
IQいくつ?
496デフォルトの名無しさん:2005/05/15(日) 15:25:09
80−130です
497デフォルトの名無しさん:2005/05/15(日) 15:43:31
血圧かよ!
498デフォルトの名無しさん:2005/05/15(日) 16:13:14
漏れのIQは 10D10+5 だぜ。
499デフォルトの名無しさん:2005/05/15(日) 17:56:00
期待値で60…低っ
500デフォルトの名無しさん:2005/05/15(日) 18:00:55
急速にスレの質が低下してまいりました
501デフォルトの名無しさん:2005/05/15(日) 18:45:11
だがそれがいい
502デフォルトの名無しさん:2005/05/15(日) 20:08:30
sinunayomajide!
503デフォルトの名無しさん:2005/05/15(日) 20:21:01
>>498,499
標準が 3d6 なんだから激高だろ。
504デフォルトの名無しさん:2005/05/15(日) 22:46:03
もうダイスから離れろ。
505デフォルトの名無しさん:2005/05/15(日) 23:53:10
winiqcfg.exe
506473:2005/05/15(日) 23:56:07
>486
レスサンクス
早速試してみましたが駄目でした
507デフォルトの名無しさん:2005/05/16(月) 00:37:11
MessageBox関数には
printf("%d",i);
みたいに引数を渡すことは出来ないのでしょうか?
508デフォルトの名無しさん:2005/05/16(月) 00:40:02
CString tmp; tmp.Format("%d", i); MessageBox(tmp);
509デフォルトの名無しさん:2005/05/16(月) 00:41:14
MessageBox関数は無理。

自分で作ってもわけないよ。こんなやつ
ttp://www14.big.or.jp/~ken1/tech/tech20.html
510デフォルトの名無しさん:2005/05/16(月) 00:44:21
>>509
どうもありがとうございます。
さっそく続きを作っていこうと思います。
511デフォルトの名無しさん:2005/05/16(月) 01:54:21
sprintfをすっとばすのかい・・・
512デフォルトの名無しさん:2005/05/16(月) 02:31:58
>>495
グラハム数くらいです
513デフォルトの名無しさん:2005/05/16(月) 14:11:28
string形で宣言と同時にサイズだけ指定することってできますか?
514513:2005/05/16(月) 14:13:04
形じゃなくて型だった
515デフォルトの名無しさん:2005/05/16(月) 14:14:59
>>513
スレ違い
516513:2005/05/16(月) 14:25:47
>>515
ほんとだ!
C++だった。すいませんでした。
517デフォルトの名無しさん:2005/05/16(月) 20:18:32
APIで手書きしてるとプロシジャ間で値の受け渡しとかしたいとき
どうしてもグローバルが多くなるんですけど、
皆さんはどうやって解決してますか。
518デフォルトの名無しさん:2005/05/16(月) 20:22:31
>>517
コールバックデータに入れるだろ、普通。
519デフォルトの名無しさん:2005/05/16(月) 20:40:33
>>518
是非とももう少し詳しく解説お願いします。
520デフォルトの名無しさん:2005/05/16(月) 20:43:08
>>519
つまり、受け渡したいデータを構造体にまとめて、
関数の引数に渡すってことだ。それだけだ。
521デフォルトの名無しさん:2005/05/16(月) 20:45:23
>>520
解りやすっ
別人だけどありがとうございました。
522デフォルトの名無しさん:2005/05/16(月) 20:53:49
どうやって入れますか?
523デフォルトの名無しさん:2005/05/16(月) 20:55:29
そういやlparamとかを
構造体のポインタに型変換してよく使ってるもんなー
524デフォルトの名無しさん:2005/05/16(月) 20:56:28
LPARAMはx64でもポインタが入るんだっけ?
525デフォルトの名無しさん:2005/05/16(月) 21:03:03
LPARAMはそもそもそのための引数だからな
526デフォルトの名無しさん:2005/05/16(月) 21:23:10
64bit環境でのWin32 APIを使用したプログラミングってどうなるんだろう。
とくに、ポインタ関係。
64bitのプログラムは、64bit用の新しいAPIを使うのかな
527デフォルトの名無しさん:2005/05/16(月) 21:43:00
普通に考えてそうなんじゃね?
今でも残ってる16bit版みたいに互換性が必要なヤツ以外は
528デフォルトの名無しさん:2005/05/16(月) 21:47:08
>>526
適切に作ればソースはそのままでいけることになっている。

W/LPARAMは64ビット化されていて、それぞれUINT_PTR/LONG_PTRからのtypedefになっている。
その〜_PTRってのはポインタと同じサイズの整数型、つまりWin64では64ビットになる。
DWORD_PTRなんてわけわからんものもあるが。

一部のAPIはそれに対応した版が追加されている。(SetWindowLongPtrなど)
529デフォルトの名無しさん:2005/05/16(月) 21:52:15
Win32の定義から考えると、変更をしてないならDWORD_PTR = LONG_PTRじゃね?
530526:2005/05/16(月) 22:02:38
あ……64bit環境でwin32って変だな。
64bitのWindowsのAPIを利用したプログラミングと言ったほうがいいのかな。

32bitのバイナリはエミュで走らせるからいいとして、
64bitはtypedefを変えているからソースはそのままでコンパイルしなおすだけで動くというわけですか。


でも、本当に完全に、「適切」に書いている人ってどれぐらいいるんだろう。
ポインタが4バイトで、int型も4バイトってのが前提なソースを書いている人もかなり居そうなんだけど。
typedefされて、さらに何重にもdefineされているあの変数名をそのまま使っていない人もかなりいそうな気がする。
531デフォルトの名無しさん:2005/05/16(月) 22:15:36
>>529
Win32ではDWORD_PTRはunsigined long _w64からのtypedefdeで、ULONG_PTRもそこからtypedefされている。
わけわからんって書いたのはDWORDは32ビットということ(x86では)なんだから、
DWORDと名乗る型に32ビットではないものがあるというのがわけわからんと言いたかったから。

>>530
これがすべてを物語っている。
SetWindowLong の検索結果のうち 日本語のページ 約 2,980 件
SetWindowLongPtr の検索結果のうち 日本語のページ 約 44 件

ちなみにVCではint/longは4バイトのまま。long/LONGをsigned DWORDとして使っているから永遠に(I)LP64へは移れないだろうな。
532デフォルトの名無しさん:2005/05/16(月) 22:22:13
>>531
そんなこと言ったって、Win32のDWORDは現にunsigned longのtypedefなんだしさ・・・
DWORDは32bitと決まってるならunsigned longのtypedefはおかしいんじゃ?
あれ?longって規定は32bitだっけ・・・?
533デフォルトの名無しさん:2005/05/16(月) 22:31:47
>>532
それはVCやその他Win16/32用コンパイラが(unsigned )longを32bitにしていたのを利用しただけ。
Cができたときからstdint.hがあれば間違いなくtypedef uint32_t DWORD;になっていただろう(と信じたい)。

ちなみにC/C++の規格を見るとlongは32ビット以上が必要と言える。
534デフォルトの名無しさん:2005/05/16(月) 22:36:06
マウスフックです。教えてください。

ウィンドウをクリックしたまま、そのウィンドウを出て、
別のウィンドウに移るとWM_MOUSEMOVEやWM_LBUTTONUPが
飛んでこなくなるんですけどなんでですか?
初めにWM_LBUTTONDOWNでセットしたグローバル変数にも
参照できなくなります。

誰か教えてくださいmm(__)mm
535デフォルトの名無しさん:2005/05/16(月) 22:59:44
>>534
フックプロシージャは DLL 内に置いてあるか?
あと、DLL の場合 #pragma data_seg("shared") に包んでやらないと
プロセスごとにグローバル変数の実態も変わるからな。
536534:2005/05/16(月) 23:02:19
返事ありです。

>フックプロシージャは DLL 内に置いてあるか?
もちろん置いてます。
>あと、DLL の場合 #pragma data_seg("shared") に包んでやらないと
>プロセスごとにグローバル変数の実態も変わるからな。
まさにそんな感じです。ちょっと調べてみます。

またわからないことあったら教えてください。
537デフォルトの名無しさん:2005/05/17(火) 00:01:37
すいません、教えて下さい。

親ウィンドウにスタティックコントロールを子ウィンドウとして置き、ここに目的の描画処理を行っています。
で、この子ウィンドウのスクロールバーが上手く動きません。
具体的には
1.ウィンドウにSetFocusしない限りWM_VSCROLL/WM_HSCROLLが来ない
2.スクロールバーをドラッグしてもWM_VSCROLL/WM_HSCROLLが来ない
3.それどころかドラッグしてもポインタが動かない
4.にも関わらず、スクロールバー上での右クリックメニューからのスクロールは可能

1は大体諦めて、SetFocusした後はスクロールするんだからと妥協しましたが・・・。
2〜4がいまひとつ納得いきません。

子ウィンドウ上でドラッグなどしつつ届くメッセージをチェックしたところ、WM_NCHITTESTくらいしか来ていません。
WM_NCHITTESTを拾って、スクロールバー上の座標ならHTVSCROLL/HTHSCROLLを返すようにしてみましたが、効果なし。

使用しているのがスタティックコントロールだというのが主要因かとは思いますが、こちらも別件で問題が発生して頓挫しています。
(ResisterClassExしたクラスでCreateWindowExが失敗する)
よい打開策はありませんでしょうか?
一応、別にスクロールバーコントロールを作成するという案はありますが、修正箇所が多くて二の足を踏んでいます。
これしかない、というのであれば別コントロール案を採用します・・・。
538デフォルトの名無しさん:2005/05/17(火) 00:26:25
int が64ビットじゃないなんて
なんのための64ビットだよ?
539デフォルトの名無しさん:2005/05/17(火) 00:33:55
もちろんメモリマップを広げるためでしょ。
2Gオンメモリで読み込みなんてそのうち当たり前になってくるかも。
540526:2005/05/17(火) 00:34:44
sizeof(int) == 4と決め付けた既存のソースが多いからじゃないのかな。
int型のサイズを変えて既存のソースを動かせなくするより、
64bitのintは__int64型にするなどとしてしまったほうが都合がいいのでは?
541デフォルトの名無しさん:2005/05/17(火) 01:30:48
数年前に同じような話の展開を見たことがあるな・・・
あのころは16bit->32bitだったが・・・
542デフォルトの名無しさん:2005/05/17(火) 01:47:34
そんなのコンパイルオプションで32ビットにできるようにすればいいだろうに。
デフォルトでは64ビットにしておけよ。
なんでクソソースに合わせなきゃならんのだよ?
できの悪いほうに合わせるなんてまるで日本の教育だな。
543デフォルトの名無しさん:2005/05/17(火) 02:01:25
int は 32bit の方が良いな。
それよりも short 16bit、int 32bit、long 64bit の方が
型の意味的にも綺麗なんだけどなぁ。


544デフォルトの名無しさん:2005/05/17(火) 02:28:34
>>542
俺らに当たってもどうしようもなかろ?
545デフォルトの名無しさん:2005/05/17(火) 07:08:06
    SHFILEINFO shfInfo;
    ::SHGetFileInfo( Ext, NULL, &shfInfo,
                     sizeof(SHFILEINFO), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SMALLICON );
で関連づけられているアイコンを取得しようとしています。ワードのファイルの場合"*.doc"でうまくいきますが、
エクスプローラのフォルダやドライブのアイコンを取得したい場合どのようにすればよいのでしょうか?
Shell32.DLLから決めうちで取得してもよいのですが、将来OSの仕様が変わったときが心配です。
546デフォルトの名無しさん:2005/05/17(火) 09:58:24
お一人様ご案内〜

★初心者にVisual C++を教えるスレ★ Part19
http://pc8.2ch.net/test/read.cgi/tech/1116209988/35
> ドライブ名をすべて列挙するにはどうしたらよいのでしょうか?

GetLogicalDrives
GetLogicalDriveStrings
どちらでも好きなほうをどうぞ。
547デフォルトの名無しさん:2005/05/17(火) 14:19:16
HeapAllocとVirtualAllocの違いというか、長所ってどんなんでしょうか?
ヒープ領域って1アプリ(?)辺り、如何ほど頂けるのでしょうか?
最後に、VCでのmalloc = HeapAllocと考えてよろしでしょうか?
548デフォルトの名無しさん:2005/05/17(火) 15:49:23
>>547
大雑把に言うと
VirtualAllocはプロセスのメモリ空間から直接メモリを割り当てる。だからオーバーヘッドがでかい。
HeapAllocは一旦独自のヒープをVirtualAllocで確保し、そこから必要なだけ切り出してくる。

だからこまごまとしたメモリ(数MBまで)の確保にはHeapAllocが、広大なメモリの確保にはVirtualAllocが適している。
549デフォルトの名無しさん:2005/05/17(火) 15:54:24
>>547
VC持ってるなら、mallocのソースもあると思うから読んでみるよろし
550デフォルトの名無しさん:2005/05/17(火) 16:05:43
今Virtualとか関係無くなってないか?
551547:2005/05/17(火) 16:21:53
勉強になりました
どうも
552デフォルトの名無しさん:2005/05/17(火) 16:40:53
時代はパーシャル
553デフォルトの名無しさん:2005/05/17(火) 16:42:40
健さんハッケソ
554デフォルトの名無しさん:2005/05/17(火) 18:31:51
文太さんじゃねーのか?
555デフォルトの名無しさん:2005/05/17(火) 18:33:03
ソーダッタ
556デフォルトの名無しさん:2005/05/17(火) 18:37:54
朝日ソーラじゃけん
557デフォルトの名無しさん:2005/05/17(火) 20:22:28
○<天ーん!

||
ω
558デフォルトの名無しさん:2005/05/17(火) 20:37:06
>>550
適当なこと言うなよ。
VirtualAllocとHeapAllocではメモリをどこから持ってくるかが違う。
ただしHeapAllocでデフォルトヒープのみを使う場合は
GlobalAllocやLocalAllocしても同じ。
559デフォルトの名無しさん:2005/05/17(火) 21:16:38
さあ今日もこの合言葉で締めましょう。

「AdvancedWindows読め」
560デフォルトの名無しさん:2005/05/17(火) 21:19:03
HeapCreateの解説
>If dwMaximumSize is zero, the heap is growable. The heap's size is
>limited only by available memory. Requests to allocate blocks larger
>than 0x7FFF8 bytes do not automatically fail; the system calls the
>VirtualAlloc function to obtain the memory needed for such large blocks.
561デフォルトの名無しさん:2005/05/17(火) 21:44:02
562デフォルトの名無しさん:2005/05/17(火) 22:00:48
AdvancedWindowsの存在がなかったらWindowsプログラミング挫折してたかも。
それぐらい凄い本。 
本来MSDNに含まれるべきだが商売汚いM$は絶対そんなことしない。
563デフォルトの名無しさん:2005/05/17(火) 22:13:32
MicrosoftPressのJeffreyRichter著の本は他のもオススメできると思う。
ProgramingWindows2000とか。
564デフォルトの名無しさん:2005/05/17(火) 22:23:21
>>562
乞食臭い
565デフォルトの名無しさん:2005/05/17(火) 22:39:20
>>564
UNIX板やLinux板でその発言してみろ
泣いて向かってくるぞ
566デフォルトの名無しさん:2005/05/17(火) 22:42:15
WindowsAPI
567デフォルトの名無しさん:2005/05/17(火) 23:01:07
AdvancedWindowsは読んだことないけどな・・・。

VirtualAllocとHeapAllocを
MSDNライブラリで引いてみりゃ、
その違いはすぐにわかるでしょ。
568デフォルトの名無しさん:2005/05/18(水) 00:22:04
文字を一文字だけ描画するための関数ってありますか?
TextOut()って文字列ですよね?
一文字だけ描画する場合もこの関数を使うんでしょうか?
569デフォルトの名無しさん:2005/05/18(水) 00:23:06
そうだね
570537:2005/05/18(水) 00:30:39
この見事なスルーっぷりは、スクロールバーコントロールを使えという無言のアドバイスですかね。
やっぱそれしかないのかな・・・_| ̄|○
571デフォルトの名無しさん:2005/05/18(水) 00:36:11
>>570
状況がよくわからん。IDは-1じゃないよな?
CreateWindowExの失敗も追及してみないか
572537:2005/05/18(水) 00:53:45
>>571
レスありがとう。
IDって何を指してますでしょうか?
SetScrollInfoのウィンドウハンドル?(そんな訳ないか

根本的な対策という意味ではCreateWindowExの失敗を追った方がよいかも知れません。
2つまとめて質問するのは失礼かつ分かりにくいかと思って、スクロールバーに絞った所存です。
必要ならば、ResisterClassExとCreateWindowExの処理部分を晒します。
573568:2005/05/18(水) 01:07:28
>>569
お返事ありがとうございます。


TextOut()の4番目の引数(文字列のポインタを指定するところ)に
char型の変数のアドレスを渡すのってありですか?
実行してみたら普通に動いたんですけど、このやりかたで問題ないのでしょうか?
それとも文字をchar[]かstring型の変数に代入してからやったほうが良いのでしょうか?
574デフォルトの名無しさん:2005/05/18(水) 01:26:06
>>573
文字列長に-1を指定してないなら、charのアドレスを渡すのもアリ。
575デフォルトの名無しさん:2005/05/18(水) 01:28:06
>>573
文字列長に-1を指定してないなら、charのアドレスを渡すのもアリ。
576568:2005/05/18(水) 01:57:31
>>575
お返事ありがとうございます。

文字列長に-1を指定するなんてこと普通ないと思うんですけど、
何か特別な意味が有るんでしょうか?
577デフォルトの名無しさん:2005/05/18(水) 02:15:30
文字数をいちいち意識しなくてすむ。
578デフォルトの名無しさん:2005/05/18(水) 02:41:14
>>528
DWORD_PTRは「DWORDもポインタも格納可能な型」ってことだから
sizeof(DWORD_PTR) >= max(sizeof(DWORD), sizeof(LPVOID))ならなんでもいい。
579568:2005/05/18(水) 02:49:34
>>577
すいません、どういうことかわからないんですけど。
もしかして文字列長に-1を指定すると自動的に文字列長を計算してくれるとか?
でも試しに文字列のポインタと-1を指定して実行してみたんですけど、
何も表示されなかったんですけど。
どういうことなんでしょうか?
580567:2005/05/18(水) 03:01:57
わかりました(たぶん)
DrawText()関数では文字列長に-1を指定すると文字列長を自動的に計算してくれるみたいです。
TextOut()関数ではそれは無いみたいです。(たぶん)
581デフォルトの名無しさん:2005/05/18(水) 07:42:59
>>578
だからそれが気に入らないんだ。
582デフォルトの名無しさん:2005/05/18(水) 10:32:10
>>581
この際、君の好き嫌いは気にしちゃいられない
583デフォルトの名無しさん:2005/05/18(水) 12:58:22
時差の設定の影響されないファイルのタイムスタンプの取得方法を教えてください。
584デフォルトの名無しさん:2005/05/18(水) 13:21:38
>>583
先ずはその意味不明な日本語の解説をしてください。
585デフォルトの名無しさん:2005/05/18(水) 13:28:46
日本で取得してもアメリカで取得しても同じ値を得たいのです
586デフォルトの名無しさん:2005/05/18(水) 13:28:59
>>582
GetFileTimeして得られたFILETIMEを、FileTimeToSystemTimeで
SYSTEMTIMEに変換すればOK。

ただし、FATファイルシステムでは、タイムスタンプをローカルタイムで
持っているため、タイムゾーンの設定が間違っていた場合には、
GetFileTimeがそもそも誤った結果を返す。

このため、FATファイルシステムにおいては
>時差の設定の影響されないファイルのタイムスタンプの取得方法
は存在しない。
587デフォルトの名無しさん:2005/05/18(水) 13:29:08
無理
588デフォルトの名無しさん:2005/05/18(水) 13:34:50
漏れはまた、
「時差の設定の」「影響されないファイルのタイムスタンプの」取得方法かと思ったよ。
589デフォルトの名無しさん:2005/05/18(水) 13:35:22
>>586
ありがとう
>>587
子ね
590デフォルトの名無しさん:2005/05/18(水) 13:56:23
環境変数TZについてですが日本語Windowsの場合未設定になっていますが他国語版Windowsでは設定されてるのでしょうか?
591デフォルトの名無しさん:2005/05/18(水) 14:02:01
>>590
未設定です
592デフォルトの名無しさん:2005/05/18(水) 14:05:35
お前等をアレするAPIを教えてください
593590:2005/05/18(水) 14:08:27
⊂(。Д。⊂⌒`つダンダッテー

_tznameは使うなって事か‥‥
594デフォルトの名無しさん:2005/05/18(水) 14:33:56
>>592
Delete592()
595デフォルトの名無しさん:2005/05/18(水) 14:44:39
メールのUIDLを取得する方法を教えてください
596デフォルトの名無しさん:2005/05/18(水) 14:50:22
>>595
サーバにUIDLコマンドを投げれ
597デフォルトの名無しさん:2005/05/18(水) 15:31:55
リッチエディットのスムーズなスクロールを、
無効にすることは可能ですか?
可能ならどうすれば…
598デフォルトの名無しさん:2005/05/18(水) 15:35:59
今のOSバージョンとCPUメモリ、グラフィックスドライバを
言ってくれないとわからんw
599デフォルトの名無しさん:2005/05/18(水) 15:49:17
スタンバイから復帰させる方法を教えてください
600デフォルトの名無しさん:2005/05/18(水) 15:52:22
電源ボタンを押す
601デフォルトの名無しさん:2005/05/18(水) 15:55:14
スタンバイからプログラムで復帰させる方法を教えてください 
602デフォルトの名無しさん:2005/05/18(水) 15:56:00
スタンバイ状態でプログラム動くの?
時刻かなんかでメッセージ受けるの?
603デフォルトの名無しさん:2005/05/18(水) 15:56:32
スタンバイから復帰させる方法を教えろつってんだろ!!
604デフォルトの名無しさん:2005/05/18(水) 16:03:21
テメーシネヨ、できないのはできない
605デフォルトの名無しさん:2005/05/18(水) 16:03:58
スタンバイ状態にしろ、休止状態にしろ、
マシンの制御がBIOSのACPI側に移行してるだろうから、
OS側ましてや、アプリケーションなんかではどうのこうのは出来ないはず。

スタンバイの場合はメモリには給電されてるから復帰が早いってだけじゃなかったっけ?
606デフォルトの名無しさん:2005/05/18(水) 16:07:40
スタンバイから復帰させる方法を教えてください
607597:2005/05/18(水) 16:08:00
スムーズなスクロールというより・・・
マウスのホイールでスクロールしたときに、
ホイールクルクル止めても、行が多いとスクロールし続けてるのを何とかしたい…
RichEdit1 です

OSとか関係あるん?
xp,p43G,512M,ti4200
608デフォルトの名無しさん:2005/05/18(水) 16:23:27
寝てる人に目覚まし鳴らすスイッチを持たせるようなもんだな >スタンバイから復帰
寝てる本人にはどうしようもない。
609デフォルトの名無しさん:2005/05/18(水) 16:24:13
>>599-606
SetWaitableTimer
610デフォルトの名無しさん:2005/05/18(水) 16:27:31
>>609
ネタかと思ったら本当にあった。すげー
611デフォルトの名無しさん:2005/05/18(水) 16:29:08
口ばっかだな
612デフォルトの名無しさん:2005/05/18(水) 16:31:14
元の質問の答えには使えないな
スタンバイに入ってしまったらどうしようもないもんな
613デフォルトの名無しさん:2005/05/18(水) 16:32:16
>>612
は?まか?
614デフォルトの名無しさん:2005/05/18(水) 16:32:21
うわー…
615デフォルトの名無しさん:2005/05/18(水) 16:34:55
寝る前に目覚ましをセットするようなものか
616デフォルトの名無しさん:2005/05/18(水) 16:35:43
スタンバイから復帰させる方法を教えてください
617デフォルトの名無しさん:2005/05/18(水) 16:38:36
それは、確かな外殻団体を作れ!
618デフォルトの名無しさん:2005/05/18(水) 17:36:07
RichEditにオートインデント機能を持たせようとENM_KEYEVENTSを設定し、WM_KEYDOWNのVK_RETURNが来たところでTabや半角スペースを入れるようにしましたがうまくいきません。
原因はコントロールの改行挿入が完了しないままEM_REPLACESELでTab挿入をしてることにあるみたいです。
エンターが押された後にコントロール内での処理が終わってから来るメッセージはありますか?
619デフォルトの名無しさん:2005/05/18(水) 18:16:34
SHBrowseForFolderにチェックボックスを付ける方法を教えてくださ
620デフォルトの名無しさん:2005/05/18(水) 18:18:03
無理
621デフォルトの名無しさん:2005/05/18(水) 18:22:26
>>619
BROWSINFO構造体のlpfnメンバにコールバック関数を設定して
コールバックの方で、BFFM_INITIALIZEの時にCreateWindowで自前で作れ
622デフォルトの名無しさん:2005/05/18(水) 18:25:03
CreateWindowで作ってやるよハゲ!
623デフォルトの名無しさん:2005/05/18(水) 19:27:18
>>618
サブクラス化
624デフォルトの名無しさん:2005/05/18(水) 20:29:41
俺を女子高生のサブクラス化にさせる方法を教えてください
625デフォルトの名無しさん:2005/05/18(水) 21:02:32
難しい日本語つかうね。
626デフォルトの名無しさん:2005/05/18(水) 23:46:40
>>620
hage
627デフォルトの名無しさん:2005/05/19(木) 08:31:40
>>624
628デフォルトの名無しさん:2005/05/19(木) 09:18:39
プリンタにインストールされているフォント一覧を取得する方法を教えてください
629デフォルトの名無しさん:2005/05/19(木) 09:26:02
EnumFontsでどうかなぁ
630デフォルトの名無しさん:2005/05/19(木) 10:19:28
>>616
>スタンバイから復帰させる方法を教えてください
タスクスケジューラを設定しておくか、
WakeOnLANで起こしてもらうか、
手で電源ボタン押す。
631630:2005/05/19(木) 17:28:03
何この静けさ?
632デフォルトの名無しさん:2005/05/19(木) 17:30:50
静かでいいじゃない。
633630:2005/05/19(木) 17:51:32
そだな
634デフォルトの名無しさん:2005/05/19(木) 18:03:27
Sleep
635デフォルトの名無しさん:2005/05/19(木) 18:16:49
質問者のその後が無いからなあ
636デフォルトの名無しさん:2005/05/19(木) 18:24:36
MessageLoop
637デフォルトの名無しさん:2005/05/19(木) 18:57:59
リストボックスのインデックスを取得する方法を教えてください。
638デフォルトの名無しさん:2005/05/19(木) 18:59:12
じゃなかった。説明たりね。スマソ
639デフォルトの名無しさん:2005/05/19(木) 19:03:09
>>637
GetListBoxIndex()
640デフォルトの名無しさん:2005/05/19(木) 19:45:12
641デフォルトの名無しさん:2005/05/19(木) 19:52:52
アイコンリソースについての質問です。

リソースファイル(resource.rc)に

MYICON ICON DISCARDABLE "icon.ico"
MYICON2 ICON DISCARDABLE "icon2.ico"

などと書いて、プログラム中で MYICON と MYICON2 を切り替えようとしてもうまく行きません。
というより、どうやら最初の1つ(MYICON)しか認識されないようです。
どうすればよろしいのでしょうか?
642デフォルトの名無しさん:2005/05/19(木) 20:16:05
どうやってどうなったのか書かない奴はネタと判定します。
643デフォルトの名無しさん:2005/05/19(木) 20:16:28
>プログラム中で MYICON と MYICON2 を切り替えようと
というのは具体的にどういう実装なのか

>うまく行きません。
とは、どういう期待に対する、不満足な結果なのか

を明らかにしないのは釣り。
644デフォルトの名無しさん:2005/05/19(木) 21:12:31
MessageBoxで使われてるフォントは何でしょうか?
645デフォルトの名無しさん:2005/05/19(木) 21:23:49
画面のプロパティで設定しているフォント
646デフォルトの名無しさん:2005/05/19(木) 21:38:47
>>645
dクス
647641:2005/05/20(金) 07:15:57
具体的には、タスクトレイに表示したアイコンを動かしたいのです。
タスクトレイにアイコンを表示するには、

NOTIFYICONDATA n_mid;

m_nid.cbSize = sizeof(NOTIFYICONDATA);
m_nid.hWnd = hWnd;
m_nid.uID = TRAY_ID;
m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
m_nid.uCallbackMessage = WM_TRAY;
m_nid.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_EXCLAMATION));// ここではシステムの「!」マーク
lstrcpy(m_nid.szTip, TEXT("Tip Message"));
Shell_NotifyIcon(NIM_ADD, &m_nid);

変更するには、

m_nid.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_QUESTION));// ここではシステムの「?」マーク
Shell_NotifyIcon(NIM_MODIFY, &n_mid);

などとすればよいことまでは分かるのですが、
自分で書いたリソースファイルの中に2つ以上定義したはずのアイコンが1つしか使えないのです。
自分で作成したアイコンを2つ以上使うにはどうすればよいのか、どなたか教えてください。お願いします。
648デフォルトの名無しさん:2005/05/20(金) 07:49:07
ImageList
649デフォルトの名無しさん:2005/05/20(金) 10:22:31
>>647
少なくとも、こちらで書いた中にそれを組み込んでも
普通に切り替わる。
>>647が書いてない部分に何か原因がありそう
650537:2005/05/20(金) 11:36:07
質問者のその後って、漏れのことかも・・・(⊃ω⊂)
SCROLLBARクラスに変更したら、外観が他のウィンドウと異なることが発覚。
結局CreateWindowExの失敗を追及しようかと思うようになりますた。
ちなみに失敗するのはこんなコードです。

WNDCLASSEX wc;

wc.cbSize = sizeof(WNDCLASSEX);
wc.style = NULL;
wc.lpfnWndProc = RightWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = (LPCTSTR)RWINDOWCLASS;
wc.hIconSm = NULL;
wc.hIcon = NULL;
RegisterClassEx(&wc);
hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,
(LPCTSTR)RWINDOWCLASS,
"",
WS_CHILD | WS_VISIBLE | WS_BORDER,
log_rect.log_pos_x,//左ウィンドウ補正
log_rect.log_pos_y,
log_rect.log_width,//幅
log_rect.log_height,//高さ
hWndSuper,
(HMENU)ID_LOGVIEW,
hInst,NULL);
改行が多いと怒られたので分割します。
651537:2005/05/20(金) 11:36:59
>>650の続き

RWINDOWCLASSにはヘッダでクラス名のテキストを定義してあります。

このコードで起きる現象。
・RegisterClassExは成功する。
・CreateWindowExがNULLリターンするが、GetLastErrorで取得するエラーは
 「この操作を正しく終了しました。」
 ちなみにRegsterClassExをコメントアウトすると
 「ウィンドウクラスが見つかりません。」
 となるので、クラス登録は成功していると考えられます。

WH_CBTフックもしてません。
ウィンドウプロシジャでWM_CREATEやWM_NCCREATEも処理していません。
ということで、原因をつかみかねております。
すいません助けて下さい・・・ 。・゚・(ノД`)・゚・。
652537:2005/05/20(金) 11:40:41
すいませんもうひとつ書き忘れました。
このCreateWindowExですが、クラスを"STATIC"に変えるだけで普通に動きます。

//STATICコントロールにした状態で作り込みしていましたので・・・
653デフォルトの名無しさん:2005/05/20(金) 11:44:00
リストボックスでクリックされた項目の番号によって判別し、
発生するイベントを作りたいのですが、
その番号を配列文字列の数値に割り当てたいのです。
そのやり方を教えてください。
654デフォルトの名無しさん:2005/05/20(金) 11:52:55
>>652
その RightWndProc の WM_CREATE で何かやってる?
655654:2005/05/20(金) 11:54:25
ああ、何もやってないってか。
WM_CREATE が来るかどうかは調べられる?
656537:2005/05/20(金) 12:01:42
>>655
ありがとうございます。
デバッガでトラップしてみたところ、WM_CREATEが来ていないように見えます。
ただ、CreateWindowExのエラーが出る前に、RightWndProcが2回呼ばれていました。
そのメッセージを見ると・・・
1回目:WM_NCCREATE
2回目:WM_NCDESTROY

アレ?これはもしかして・・・。
ちょっとRightWndProcを見直してみます。
ちゃんとDefWndProcしてないかも・・・。
657デフォルトの名無しさん:2005/05/20(金) 12:01:59
>>651
CS_OWNDC か CS_PARENTDC のどちらかをセットするとどうなりますか。
658537:2005/05/20(金) 12:05:52
>>657
ありがとうございます。
両方のパターンを試してみましたが、現象に変化なしです。
659537:2005/05/20(金) 12:14:37
>>656その後

親ウィンドウのWM_CREATE処理で
CreateWindowExするモジュールの呼び出し→SetWindowLongでサブクラス化
とやっているのが気になったので、RightWndProcのCallWindowProcをDefWindowProcに変更。
変化なし orz
660537:2005/05/20(金) 12:57:54
たびたびすみません。
解決しました。

RegsterClassExの一部を変更しました。

wc.lpfnWndProc = DefWindowProc;

サブクラス化のSetWindowLongが後で走る訳ですから、クラス登録ではDefWindowProc
を登録しておけば済む話だったんですね・・・。
WM_NCCREATE→WM_CREATEとならずに
WM_NCCREATE→WM_NCDESTROYとなっていたのが重大なヒントになりました。
ありがとうございました。
661デフォルトの名無しさん:2005/05/20(金) 15:57:38
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win68.html
>リストボックスの全てのアイテムはインデックスとして管理されます
>最上段のアイテムのインデックスを 0 として、1ずつ増えていきます
>選択されているアイテムや、削除などの操作もインデックスで指定するので
>文字配列と照らし合わせるような処理には非常に便利です

となっていますが、
どうやって選択されたインデックスをint型変数に取得すればいいのでしょうか?
お願いします。
662デフォルトの名無しさん:2005/05/20(金) 16:04:55
>>661
そこに LB_GETCURSEL を使うって書いてあるじゃんか
663デフォルトの名無しさん:2005/05/20(金) 16:12:13
>662
でもintにキャストできません
664デフォルトの名無しさん:2005/05/20(金) 16:14:40
は?やってみたのかよ
665663:2005/05/20(金) 16:17:55
i=(int)SendMessage(list , LB_GETCURSEL , 0 , 0);
これじゃダメですか?(ダメだったけど)
666デフォルトの名無しさん:2005/05/20(金) 16:32:55
>>665
どういう値を期待してどんな値が返ってきたの?
それで問題なく取得できるはずだけど。
ListCtrlじゃなくて、ListBoxだよね?
667663:2005/05/20(金) 16:49:33
>666
ありがとうございます。
どうやら違うところで手違いがあったようです。
後は何とかなりそうです
668663:2005/05/20(金) 17:01:47
ああ、何とかならない。。。
strcpy(name[0] ,buf[i][0]);
とか文字列に埋め込むと、なぜかフリーズしてしまうorz
669デフォルトの名無しさん:2005/05/20(金) 17:03:22
ほかが見えないとわからんが、、
strcpy(name, buf[i]) ではないのか
670663:2005/05/20(金) 17:22:10
static char buf[256][256][1024];
static char name[2][1024];
nameもbufも多次元変数です。
実のところソースは汚すぎなんで。。。
671663:2005/05/20(金) 17:34:04
もういいや。吊ってくる
672デフォルトの名無しさん:2005/05/20(金) 17:37:36
64MBの配列か・・・いいけどね、ベツニ
673デフォルトの名無しさん:2005/05/20(金) 18:36:25
>>668
後は i の値とか。
つか、ここに来たからには嘘でも lstrcpy を使え。
674デフォルトの名無しさん:2005/05/20(金) 18:40:49
GETCURSELは非選択だとLB_ERR(-1)返るから注意な
675デフォルトの名無しさん:2005/05/20(金) 18:41:40
質問させてください。昨日から悩んでいるのですが、解決できません。
マルチスレッドでshell namespaceを使い、zipの中身を列挙したいのです。
4Mと40Mのzipファイルを用意し、以下のソースを実行したところ(長くてすみません)、
STAの待ち行列に入っているような挙動になりました。
これを回避したいのです。

ちなみにエクスプローラだと、あるエクスプローラで40Mのzipを
開こうとしつつも、別のエクスプローラで4Mのzipを開けます。
676デフォルトの名無しさん:2005/05/20(金) 18:42:08
#include <windows.h>
#include <stdio.h>
#include <process.h>
#include <shlobj.h>
#pragma comment(lib, "shell32.lib")
void f(void* p) {
int i = (int)p;
::OleInitialize(NULL);
wchar_t* name = (i%2==0) ? L"D:\\4M.zip" : L"D:\\40M.zip";
LPITEMIDLIST idl = ::ILCreateFromPathW(name);
LPSHELLFOLDER desk, sf; LPENUMIDLIST el; HRESULT hr;
hr = ::SHGetDesktopFolder(&desk);
hr = desk->BindToObject(idl, 0, IID_IShellFolder, (LPVOID*)&sf);
printf("start %d\n", i);
hr = sf->EnumObjects(NULL, SHCONTF_NONFOLDERS, &el);
printf("end %d %x\n", i, hr);
sf->Release();
desk->Release();
CoTaskMemFree(idl);
::OleUninitialize();
_endthread();}
int main(int argc, char* argv[]) {
HANDLE hs[10];
for (int i=0; i < 10; i++) hs[i] = (HANDLE)_beginthread(f, 0, (void*)i);
::WaitForMultipleObjects(10, hs, TRUE, INFINITE);
char buf[256];
gets(buf);
return 0;}
677デフォルトの名無しさん:2005/05/20(金) 19:40:38
>>675
> ちなみにエクスプローラだと、あるエクスプローラで40Mのzipを
> 開こうとしつつも、別のエクスプローラで4Mのzipを開けます。

この場合は、マルチスレッドではなくマルチプロセスになるから、
比べる意味がないのはわかってる?
678デフォルトの名無しさん:2005/05/20(金) 19:48:12
>>677
エクスプローラはマルチプロセスでしたっけ?
複数のエクスプローラを立ち上げると
explorer.exeのスレッドが増えるだけだと思いますが?
679678:2005/05/20(金) 19:52:28
>>677
すみません。678で馬鹿なこと書きました。
680デフォルトの名無しさん:2005/05/20(金) 23:25:58
>>678
そういうチェックボタンあったから、
たぶんマルチプロセスにもできるんだよ
681デフォルトの名無しさん:2005/05/21(土) 00:46:32
>>678,679
エクスプローラはマルチプロセスではないだろ?
682デフォルトの名無しさん:2005/05/21(土) 00:56:50
>>680
フォルダオプションの「別のプロセスでフォルダウィンドウを開く」なら、タスクバーその他を管理するプロセスとフォルダウィンドウを管理するプロセスを分けるってだけじゃないか?
683デフォルトの名無しさん:2005/05/21(土) 01:31:21
WM_TIMERでInvalidateRgnするとタイミングの問題なのかたまに画面全体がバグるんだけど
どうやって回避する?
684デフォルトの名無しさん:2005/05/21(土) 01:32:58
> 画面全体がバグる
> 画面全体がバグる
> 画面全体がバグる
> 画面全体がバグる
> 画面全体がバグる
685デフォルトの名無しさん:2005/05/21(土) 01:35:39
動的にmsvcrt.dllを呼び出してアプリケーション側で
ちゃんと初期化したいんですが、
仕様って後悔されてませんにょ
686683:2005/05/21(土) 01:36:09
なんていうか、画面全体が更新領域に設定されるのかすごいちらつく
ウィンドウとか全部真っ白になるけどそのプログラムを止めて再描画させるようにすれば直る。
687デフォルトの名無しさん
>>685
日本語を話せるようになってから、また来てくれ