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


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

Win32API 質問箱 Build6
501 名前:デフォルトの名無しさん :02/10/13 23:15
>>500
> 自分の勘違いは素直に認めた方がいいよ。

それ >>494 に言ってんの ?

>>489 で引数書かなかったのは、不問にしても、>>490 に対して「ハァ?」って返した時点で、勝負決まったと思うけどね。

慌てて、>>494 書いたかと思ったら、逆切れですか ?

502 名前:494 :02/10/13 23:25
>>501
省略した引数の部分を書いてみろと言われたので
書きましたが、それがどうかしました?

で、書いたはいいが、その後はどうなったんでしょう。
是非ともアドバイスを承りたいんですが。

503 名前:489 ◆CPP8mJMMbA :02/10/13 23:27
皆さん、早速のレスありがとうございます。(2回目のカキコです)

>>492
そうなんですよ。せめて#defineじゃなければ名前空間を分けて衝突は避けられるんですけど。

>>494-495
私も最初は全てそのように書き換えようと考えました。それこそ全てのヘッダまで。
定数の#defineも含めて。ただ、そこまでの労力が…
かと言ってその場で必要なものだけ宣言しなおすのも癪でして(^^;

>>496さんが仰っている状況に関しては、私も>>497さんのような解決方法でよいと思います。
lccやmingwからヘッダだけ抜き出して他の環境で、ってのはアリなんでしょうか?

>>499
確かにヘッダに定義を入れるのは気持ち悪いところですが…

504 名前:デフォルトの名無しさん :02/10/13 23:33
>>502
> 省略した引数の部分を書いてみろと言われたので
> 書きましたが、それがどうかしました?
で、>>491 はどうなったん ? 都合の悪いところは、無視ですか ?

> で、書いたはいいが、その後はどうなったんでしょう。
> 是非ともアドバイスを承りたいんですが。

>>498 で、デメリット書いてますが必死すぎて見えてないのね。

505 名前:デフォルトの名無しさん :02/10/13 23:39
おまえらがんばりすぎ

506 名前:デフォルトの名無しさん :02/10/13 23:42
>>505
反論できなくなった時の、逃げ口上...

507 名前:デフォルトの名無しさん :02/10/13 23:45
必死だな

508 名前:デフォルトの名無しさん :02/10/13 23:49
>>507
ププッ、それしか書けないんならもうやめたら ? ちょっとカッコ悪いよ。

それとも、>>504 に対してなんか言うことある ?

509 名前:494 :02/10/13 23:49
>>504
491って何の話ですか? 私は494ですが491ではありません。

> >>498 で、デメリット書いてますが必死すぎて見えてないのね

↓これのことですかね。
> で、あんたの方法だとラップ関数を経由するから、それが嫌だったんだろ。

必死以前に、これは
省略した引数をすべて書いてみることと
何のつながりがあるんでしょう?

引数を書けと言った意味がまずわからないのですが。

それと、「ラップ関数を経由するから嫌」なんて
質問者さんはそんな事書いてませんよね。
勝手に妄想されたのでしょうか?

納得のいくアドバイスをお願いします。

510 名前:デフォルトの名無しさん :02/10/13 23:51
>>508
え?

511 名前:デフォルトの名無しさん :02/10/13 23:56
508は自分に都合の悪い発言は全部494の仕業だと思ってるようだな

512 名前:494 :02/10/14 00:07
>>504
あれ? 意味が伝わりにくかったでしょうか。
まずは「引数を省略せずに書いてみる」というアドバイスに
どういう狙いがあったのかを教えてください。お願いします。

ちなみに >>493では
> あんたの書いてる CreateWindowEx() の引数をどうすればいいか悩むと思うから。
とありますが、どの辺で悩んでいいのかわかりませんでした。

513 名前:デフォルトの名無しさん :02/10/14 00:09
こんばんは。最近お世話になった半透明に挑む者です。
Pen3 850MHz Win2kによる実験ができましたので、報告させていただきます。
世の中に計測ページは沢山ありますけどね(^^;

・24bitBMP
・1〜3はCreateDIBSectionで領域を確保。全て640*480
・4はmallocで領域を確保
・5はCreateCompatibleBitmapで領域確保

<1>
BitBltで背景を描画
テーブルを参照して半透明画像を重ねあわせ
透明色指定に基づき、1ドットずつ色を調べて指定されたものなら転送しない
(今回は指定しておいたものの、画像内にその色は一度もでてきません)

<2>
1の透明色指定できないバージョン(if文がない分だけ速い)

514 名前:デフォルトの名無しさん :02/10/14 00:09

<3>
BitBltで背景を描画
画像重ね合わせのところをアセンブラで
テーブル参照ではなく、素直に計算する

<4>
memcpyで背景転送
画像重ね合わせのところをアセンブラで
テーブル参照ではなく、素直に計算する

<5>
BitBltで背景を描画
画像重ね合わせのところをAlphaBlendで

<1>21.085ms
<2>20.187ms
<3>13.417ms
<4>13.691ms
<5>速すぎ

何度やっても4のほうが3より遅い。
純粋にメモリー書きかえしかしていない4の方が早そうなものなんですが…。

515 名前:デフォルトの名無しさん :02/10/14 00:14
>>481さんのアドバイスのもと、やねうらお氏のページを覗いてみました。
かなり参考になりますね。

でもちょっと気になったことがひとつ。
やねうらお氏がさらりと

>16bpp(RGB555,565)の半透明(α3bit)でWORDテーブル持ってます。
>だもんで、半透明もバリバリ速いです。(16bppのときだけ^^;)

とおっしゃっているのですが、意図するところが読めないのです。
馬鹿な私は即座に
((1 + 65536) * 65536 / 2)通りのテーブルなんて持てるわけねぇ(;´Д`)
と思ってしまったのですが、やねうらお氏の言うテーブルとはどんなものなのでしょう。
目を通しても「テーブルを持っています」としか書かれていなかったので…。
思いつくものがあったら、教えていただけると嬉しいです。

516 名前:デフォルトの名無しさん :02/10/14 00:23
>>509
> 491って何の話ですか? 私は494ですが491ではありません。

あっそ、まあどうとでも言えるから。違うって言うなら、一応そう思っとくよ。

> 引数を書けと言った意味がまずわからないのですが。

>>489 は、少なくとも CreateWindowExA() と CreateWindowExW() の引数の違いは考慮してないから、それを考慮しなよ。って言う意味だよ。

> それと、「ラップ関数を経由するから嫌」なんて
> 質問者さんはそんな事書いてませんよね。

だって気付いていさなそうだからね。

> 勝手に妄想されたのでしょうか?

妄想 ? 具体的なデメリットがわかってないの ?

517 名前:デフォルトの名無しさん :02/10/14 00:28
>>497
いやだからLPTSTRとかがLPWSTRとかに展開されちゃっててはまるの
説明めんどくさいからどうでもいいや

518 名前:494 :02/10/14 00:44
>>516
> >>489 は、少なくとも CreateWindowExA() と CreateWindowExW()
の引数の違いは考慮
> してないから、それを考慮しなよ。って言う意味だよ。

考慮していないのでなく、重要でないから
省略しただけとかもしれませんよね。

まあ仮に考慮してなかったとしましょう。
アドバイスの通りそれを考慮して書いてみました。

で、結局どんな進展があったのでしょうか?
ラップ関数を経由する話とどうつながっていくのでしょう?

> 妄想 ? 具体的なデメリットがわかってないの ?

妄想と書いたのはラップ関数のデメリットの話ではなく、
そのような意図の質問ではないということです。

同じことを書きますが、
> で、あんたの方法だとラップ関数を経由するから、それが嫌だったんだろ。

質問者は名前の衝突等を気にしているのであって
「ラップ関数を経由するから、それが嫌」なんてことは
書いていませんね。妄想でしょうか?

519 名前:デフォルトの名無しさん :02/10/14 00:51
>>516
> だって気付いていさなそうだからね。

お前、言ってることがハチャメチャだぞ

520 名前:デフォルトの名無しさん :02/10/14 00:58
>>518
> 考慮していないのでなく、重要でないから
> 省略しただけとかもしれませんよね。

それがダメだって言ってるの。まだわからない ?

> で、結局どんな進展があったのでしょうか?
> ラップ関数を経由する話とどうつながっていくのでしょう?

一つヒントをあげよう。
引数が違うと言うことは、別の関数が必要と言うことだよ。

> 質問者は名前の衝突等を気にしているのであって
> 「ラップ関数を経由するから、それが嫌」なんてことは
> 書いていませんね。妄想でしょうか?

あんた、ヴァカじゃないの ?
衝突を気にするからと言って、>>489 みたいなこと (=ラップ関数を作る) やると、余計面倒だ (=デメリットがある) 。って言ってんだよ。
>>489 が書いてないのは、気付いてないからだと思うよ。

で、デメリットはわかったの ? それとも、>>494 みたいに書けば全て解決と思ってるの ?

521 名前:デフォルトの名無しさん :02/10/14 01:12
この見事な殺伐っぷり、たまらんねぇ。

522 名前:489 ◆CPP8mJMMbA :02/10/14 01:18
>>517
あっ、確かに…もっと手前の方で#ifdefとtypedefを山ほどかまして何とかなりませんかねぇ…

他にもラップ関数を使った場合には、

・ヘッダ内に関数定義が入る
・関数呼び出しオーバーヘッドがかかる(インラインじゃだめかなぁ)
・引数の違う場合、違いの吸収が面倒くさい

って感じになるんでしょうか。(他にも思いついたら列挙お願いします)
このくらいの範囲ではデメリットを考えましたが、後はそれと名前の衝突を
天秤にかけるしかないですかね…

523 名前:494 :02/10/14 01:35
>>520
> 一つヒントをあげよう。
> 引数が違うと言うことは、別の関数が必要と言うことだよ。

実体が2つ必要になるが同じ関数名では実体を2つは
作れないということでしょうか?
が、それだと引数を書かせることとは関係がないので
外れですかね?

ちょっとわからないのでヒントでなく具体的に
教えていただけないでしょうか。

> で、デメリットはわかったの ?
> それとも、>>494 みたいに書けば全て解決と思ってるの ?

デメリットは承知しているつもりです。
が、何度も言ってるように、その話をしているわけではありません。

> >>489 が書いてないのは、気付いてないからだと思うよ。

そうですか。ということは、上で書かれた
> で、あんたの方法だとラップ関数を経由するから、それが嫌だったんだろ。

というのは妄想だったということでよろしいですね。

524 名前:493 :02/10/14 01:40
>>522
> 他にもラップ関数を使った場合には、

と言うか、CreateWindowExA() と CreateWindowExW() の引数が違うと言うことは、ラップ関数の引数も必然的に変える必要があると言うこと。
つまり、ラップ関数も二種類持つしかない。で、

> ・ヘッダ内に関数定義が入る

と言うのが一番問題だと思う。
CreateWindowEx() をグローバルにすると当然複数ファイルにインクルードされたら二重定義になるし、static にすると、実体を複数個持つこととなる。
CreateWindowEx() だけならまだいいかもしれないけど、他にも色々あるしね。
まあ、メモリーも安いからそれでもいいやって言う人もいるかもしれないけど、あまり誉められた設計じゃないよね。

ちなみに、もし CreateWindowExA() と CreateWindowExW() の引数が同一なら、その関数はライブラリに入れて、実行時に CreateWindowExA() か CreateWindowExW() に振り分けることもできる。
だから、引数が同一かどうかはかなり重要。

525 名前:493 :02/10/14 01:45
>>523
> 実体が2つ必要になるが同じ関数名では実体を2つは
> 作れないということでしょうか?
> が、それだと引数を書かせることとは関係がないので
> 外れですかね?

引数が一緒だったら、ラップ関数の実体は一つにする (=ライブラリに入れておく) ことができるよ。
そんなこともわからないの ?

526 名前:489 ◆CPP8mJMMbA :02/10/14 01:53
いっそのことMSに
「C++向けに#defineを極限まで減らしたヘッダ激しくキボンヌ( ゚ρ゚)」
とでも要望出してみるかなぁ…
無視されるだろうなぁ…MSだし…

527 名前:デフォルトの名無しさん :02/10/14 01:57
>>526
自分で書くという発想は無いのですか ?

528 名前:494 :02/10/14 02:08
>>525
> 引数が一緒だったら、ラップ関数の実体は一つにする (=ライブラリに入れておく) ことができるよ。

すみませんが、意味がよくわかりません。
名前も引数も同じ関数の実体を1つにできるんでしょうか?

(ちなみに、私が書いた実体というのはライブラリ単位の
 話ではありません)

529 名前:リバーコントロール? :02/10/14 02:33
レバーコントロール"ReBarWindow32" の質問です。
ツールバー"ToolbarWindow32"(hwnd_tool)、ボタン"BUTTON"(hwnd_ok)、それぞれの為の帯を2本用意しました。

ボタンは帯のサイズで自動的にサイズ変更されます。
(帯サイズに合わせられる用にコードしておいたからです)
これはこのままでイイのですが(変えたくなったら帯サイズを変えるつもりです)、
ツールバーのサイズは自動的にサイズ変更されることはありません。
ということで、帯をツールバーのサイズにあわせようと思います。

で、試したソースの一部です

REBARBANDINFO rebarbandinfo = { 0 };

memset( &rebarbandinfo, 0x00, sizeof( REBARBANDINFO ) );
rebarbandinfo.cbSize = sizeof( REBARBANDINFO );
rebarbandinfo.fMask = RBBIM_STYLE | RBBIM_CHILD;
rebarbandinfo.fStyle = RBBS_BREAK | RBBS_GRIPPERALWAYS;
rebarbandinfo.hwndChild = hwnd_tool;
RebarBandCreateIndirect( -1, &rebarbandinfo );
// ↑RB_INSERTBAND を SendMessage しているだけの自作関数です

memset( &rebarbandinfo, 0x00, sizeof( REBARBANDINFO ) );
rebarbandinfo.cbSize = sizeof( REBARBANDINFO );
rebarbandinfo.fMask = RBBIM_STYLE | RBBIM_CHILD;
rebarbandinfo.fStyle = RBBS_BREAK | RBBS_GRIPPERALWAYS;
rebarbandinfo.hwndChild = hwnd_ok;
RebarBandCreateIndirect( -1, &rebarbandinfo );
// ↑RB_INSERTBAND を SendMessage しているだけの自作関数です


530 名前:リバーコントロール? :02/10/14 02:33

これではレバー帯が2本ともまったく表示されません。

どちらか片方の帯に マスク RBBIM_CHILDSIZE と rebarbandinfo.cyMinChild = xx を足すと2本とも表示されました。
しかし、ツールバー帯のサイズが合わなくて困ってます。

同様に両方に足した場合、帯のサイズはどちらも最初に指定した帯の方のサイズになってしまいます。
こっちは更に問題で、ボタンが帯のサイズと合ってくれません。


そこで質問です。
@帯を2本用意したときに、サイズをそれぞれ別管理できますか?
Aツールバーのサイズに合わせて帯サイズを変更する方法はありますか?
Bツールバーボタンのサイズを得る方法はありますか?



531 名前:デフォルトの名無しさん :02/10/14 08:59
>>528
>>524 は、見てくれてる ?

> 名前も引数も同じ関数の実体を1つにできるんでしょうか?

名前も引数も同じなら、実体は一つでいいでしょ ?
もちろん機能が違うから、内部で実行時に振り分ける必要があるけどね。

でも、実体が一つでいいということはライブラリに入れることができるから、>>524 に書いた「ヘッダ内に関数定義が入る弊害」を避けることができる。
また、lcc とかは、引数の型の定義変えることでヘッダファイル上は同一に見せてるけど、これも実体は一つにはできない。
更に、>>517 の問題もあるしね。

とにかく、>>526 もそうだけど、一度実装してみればいろいろわかっていいと思うよ。
マイクロソフトの技術者だってヴァカじゃないんだからさ。

532 名前:489 ◆CPP8mJMMbA :02/10/14 12:07
>>527>>531
一度自力で何とかしてみます。

533 名前:デフォルトの名無しさん :02/10/14 15:07
座標x、yの色の値を取得するにはどうしたらいんでしょうか?

534 名前:デフォルトの名無しさん :02/10/14 16:08
GetPixel
指定された座標のピクセルの RGB(赤、緑、青)値を取得します。

COLORREF GetPixel(
HDC hdc, // デバイスコンテキストのハンドル
int nXPos, // ピクセルの x 座標
int nYPos // ピクセルの y 座標
);


535 名前:533 :02/10/14 18:24
できました。ありがとうございました。

536 名前:デフォルトの名無しさん :02/10/14 19:39
プロパティシートの特定のページのみ使用不可にするにはどうすればいいんでしょうか?

537 名前:デフォルトの名無しさん :02/10/14 22:50
_beginthreadexで起動したスレッドって
スレッドが実行している関数内部で一切メッセージにタッチしてなくても
WM_QUITが来ると勝手に閉じちゃったりするんですか?

ウィンドウプロシージャでESCが押されたか判断して終了するプログラムなんですが
ESCが押された時点でスレッドから応答が無くなるのか、ビジー状態でフリーズしてしまいます

コードの流れは以下のような感じ

_beginthreadex
CreateWindowEx
message loop
{
 //WM_QUITが来たらbreak
 do something
}
//ここでフリーズ(WaitForSingleObjectまで到達していないのに...)
いろいろ終了処理
WaitForSingleObject
CloseHandle
return 0;

538 名前:デフォルトの名無しさん :02/10/14 23:28
>>537
> WM_QUITが来ると勝手に閉じちゃったりするんですか?

んなこたあない。

ところでこれは別スレッドでCreateWindowしてるの?
よくわからない。

539 名前:デフォルトの名無しさん :02/10/14 23:32
>>537 激しく既出

http://pc3.2ch.net/test/read.cgi/win/1021192107/

540 名前:デフォルトの名無しさん :02/10/14 23:38
>536
たぶん標準の機能では出来ない。
『Best of MSJ Vol.8 ワンポイントレッスン 最新プログラミングテクニック』の
1069p に解決策が載っている。

541 名前:デフォルトの名無しさん :02/10/14 23:58
Rebarで、あるBarのみ単独一行にしたら高さ(Height)を変えるって出来ますか?

・この時は一番高いBarにあわせる(例:20px)
| bar1 | bar2

・この時はbar2は高さを変える(bar1:20px、bar2:16px)
| bar1
| bar2

542 名前:デフォルトの名無しさん :02/10/15 00:30
>>538
別スレッドではメッセージキュー越しに文字列を受け取って
ファイルに書き出しているだけです

メインスレッド
 _beginthreadex;
 ウィンドウ作る;
 メッセージループ開始
 {
  WM_QUITでbreak;
 }
 メッセージループから抜けた事を別スレッドに知らせる(PostThreadMessage);
 ワーカースレッドへ終了メッセージを送る(PostThreadMessage);
 WaitForSingleObjectしてから、終了処理;
お終い

ワーカースレッド
 メッセージキューを作る;
 終了メッセージが来るまでループ
 {
  文字列を受け取ってファイルへ書き出す(GetMessage);
 }
 _endthreadex;
お終い

こんな流れなんですが、メインスレッドのメッセージループを抜けたところで
ビジー状態から抜け出せなくなります
ところが、原因究明の為にデバッガでループ終了からずんずんトレースしていったら
なんと完走してしまいした・・・まったくもって意味不明です

543 名前:542 :02/10/15 01:12
怖ろしいのでデバッガでしか起動してなかったんですが
思い切って直接起動したら完走しました・・・

デバッガのバグなんですかね?

544 名前:デフォルトの名無しさん :02/10/15 01:39
>>543
99%プログラムのバグ。

545 名前:542 :02/10/15 01:42
>>544
つまり「デバッガで起動した場合ハングアップしてしまうバグ」を作り込んだということでしょうか・・・?
「実行に時間がかかりすぎるとハングアップしてしまうバグ」かな

初心者がマルチスレッド関係いじくると良くあるバグなんでしょうか?

546 名前:デフォルトの名無しさん :02/10/15 01:46
なんとなくだけど、メインスレッドのメッセージループは
ほかのスレッドが終わるまで待ったほうがいいような
気がせんでもない。

なんとなくだけど。

547 名前:デフォルトの名無しさん :02/10/15 02:00
>>542
関係ないけど_endthreadexは使わないほうがいいかも...
少なくともC++で使うとデストラクタが実行されないし

548 名前:デフォルトの名無しさん :02/10/15 02:00
メインスレッドが終了するとほかのスレッドもすべて終了するけど

549 名前:デフォルトの名無しさん :02/10/15 02:22
>547
なんのデストラクタ?
そして、何を代わりに使うんだ?

550 名前:542 :02/10/15 02:27
>>547
ワーカースレッド内では何もnewしてない(何もインスタンス化してない)のですが
それでもマズいんでしょうか?

>>548
メインスレッドが終了するというのは
AとBどっちの事でしょうか・・・
ウィンドウはWinMainで作られた1つのみで、ワーカースレッドはどのウィンドウにも属さず
ウィンドウプロシージャでは、ESCを検出してWM_CLOSEをPOSTしています

int APIENTRY WinMain(略)
{
 _beginthreadex略;
 CreateWindow略
 while(GetMessage略) {

 } // A→ウィンドウが破棄されてWM_QUITがPOSTされ、メッセージループから抜けた
 return static_cast<int>(msg.wParam);
} // B→WinMainから抜けた

551 名前:デフォルトの名無しさん :02/10/15 02:27
>>549
作成したオブジェクト。
例外を投げてmainでcatchする。

552 名前:デフォルトの名無しさん :02/10/15 02:28
>>550
もちろんBのことだが

553 名前:542 :02/10/15 02:34
>>552
自分のプログラムは「デバッガでStep実行すると」AのところでRUNNINGから復帰しなくなります・・・
AでBREAKして、そこからTraceでずんずん中に入っていくと無事完走します・・・

554 名前:名無し@沢村 :02/10/15 06:43
皆様方、ひとつ教えてください。
APIのmidioutShortmessageで0x90C07Fを指定すると音が鳴り、
0x80C07Fかまたは0x90C000を指定すると音が止まるのはわかるのですが、
同時に二つの音を鳴らすときはどうするのですか?つまり和音ですね。
ぜひ教えてください!!

555 名前:デフォルトの名無しさん :02/10/15 08:05
1つのチャンネルでいいから、違うノートナンバーのノートオンを出せばよろしかろ。

556 名前:デフォルトの名無しさん :02/10/15 08:11
>>555
同意。ステップ入力できるMIDIシーケンスソフトでも使ってもうちょっとMIDIのこと勉強した方がいいと思われ。

557 名前:デフォルトの名無しさん :02/10/15 11:19
>>514
VRAMと普通のRAMの違いとか?
ビデオカードの種類やVRAMの容量で結果変わるんじゃない?


558 名前:デフォルトの名無しさん :02/10/15 15:49
>>554
http://www.pluto.dti.ne.jp/~daiki/Midi/Midi.html
ここ読みゃぁじゅうぶんだべ


559 名前:デフォルトの名無しさん :02/10/15 17:30
IEの履歴をプログラムから操作できますか?
できるならそれは何というAPIでしょうか?

560 名前:デフォルトの名無しさん :02/10/15 17:35
書いた直後に発見。
WinInetのほげほげCacheEntryがキャッシュだけでなくて
履歴やCookieも扱うんですね。

561 名前:駆け出しの名無し :02/10/16 06:22
検索エンジンGoogleを使っても("WNDCLASS", "インスタンス"で検索)見つけられ
なかったので、教えて下さい。

APIを使ってプログラムを作るとき、ウィンドウクラスを定義した後、
登録(RegisterClass(Ex)関数)して生成(CreateWindow(Ex)関数)しますよね。

そのとき、インスタンスハンドルをWNDCLASS(EX)構造体のメンバhInstanceと
CreateWindow(Ex)関数の引数で使用しますけど、なぜこの両方で指定しなければ
ならないのでしょうか。WNDCLASS(EX)構造体のメンバhInstanceとCreateWindow(Ex)関数
の引数で指定するインスタンスハンドルの違いは何?両方とも同じ目的で使われる
のであればどちらか一方で指定するだけで十分だと思うのですが…

インスタンスハンドルの意味は
  http://www.kab-studio.com/Programing/Dictionary/Words.html#Instance
が最も詳しかったです。

どうぞよろしくお願いします。モウ、オレヒトリデハ ゲンカイポ...

562 名前:デフォルトの名無しさん :02/10/16 06:26
さあねぇ・・インスタンスハンドルはWin3.1時代の遺物っぽいが
WinNT では 0 で無視してるみたいだし よくわからんが・・

563 名前:駆け出しの名無し(=561) :02/10/16 06:30
ちなみに、
 ・WNDCLASS(EX)構造体のメンバhInstanceにNULLを代入
    RegisterClass(Ex)関数実行時に失敗
 ・WNDCLASS(EX)構造体のメンバhInstanceに正しい値(WinMain()関数の最初の引数)
  を代入し、CreateWindow(Ex)関数でインスタンスハンドルにNULLを代入
    ShowWindow(Ex)で表示可能 (@_@)?!!!
という実験結果ですた…

# >>561でageたんで今度はsageで

564 名前:駆け出しの名無し(=561) :02/10/16 06:33
ぐぉ、即レス!!どうもありがとうございます。

>>562
それはいわゆるhPrevInstanceのことでしょうか?あれはWin9Xでも常にNULLになる
って本に載ってました。

565 名前:デフォルトの名無しさん :02/10/16 06:36
>>563
Win95ではそうなります WinNTは、ってことだから・・
もしかしてNTでもダメなんですかね

566 名前:デフォルトの名無しさん :02/10/16 06:41
>>564
http://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_createwindowex.htm
ここの hInstance の解説で、「無視されます」ってあるでしょ
たぶん NT はプロセス管理をシステムで完全にコントロールしてるけど
9x は不完全というか、ごちゃまぜというかいっしょくたというか(w
そんなんで hInstance が必要なんじゃないのかなぁ・・ってことです

思っただけなので信憑性ない スマ
詳しい人がレスくれるといいね

567 名前:563 :02/10/16 06:51
>>565
あ、>>563の実験結果はWin2000上でコンパイル・実行したときのものです。
実行環境書くの忘れたスミマセン...

568 名前:駆け出しの名無し(=561) :02/10/16 06:58
>>566
あー、それ僕も読みました。他にRegisterClassEx関数
  http://www.microsoft.com/japan/developer/library/jpuipf/_win32_registerclassex.htm
の説明も…。しかしWNDCLASS(EX)に関する記述は結局見つけられなくてmicrosoft.comの
サイトから探すのはあきらめますた…。

569 名前:デフォルトの名無しさん :02/10/16 07:29
>>568
英語版ならあるよ。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/WindowClasses/WindowClassReference/WindowClassStructures/WNDCLASSEX.asp

少なくともリソースIDを指定しないといけない時は
インスタンスハンドルも不可欠だね。

570 名前:デフォルトの名無しさん :02/10/16 07:43
hInstanceに間違ってランダムな値が入ってたらどうなるんでしょうか

571 名前:デフォルトの名無しさん :02/10/16 12:58
COMを使ったプログラムで、定期的にポーリング処理を行いたいのですが、

SetTimer/KillTimerを使ったところ、精度が悪いのはまだしも、
COMオブジェクトのメソッドを呼び出している中でさらにタイマー処理が呼び出される
事が有り、困っています。

それではと、マルチスレッド化したところCOMオブジェクトが対応していないため(?)
クラッシュしてしまいます。

何か、良い解決方法は無いでしょうか?
おながいします。

572 名前:デフォルトの名無しさん :02/10/16 15:07
COMオブジェクトのメソッド呼び出す前にタイマ止めとけば
あるいはちゃんと再入のチェックをするとか。

573 名前:571 :02/10/16 15:58
なるほりょ。
COMよく知らん不束者ですが、
マルチスレッドで何とかするのは無理なもんでしょうか?

574 名前: :02/10/16 17:57
>>573

別スレッドからインタフェイスを呼ぶのなら、
CoMarshalInterThreadInterfaceInStream と
CoGetInterfaceAndReleaseStream で
インタフェイスをマーシャルしてあげれば良いんだよ。

ex.

IStream* g_pStm;

// main thread
IYourInterface pYourInterface <- これにinterface取得済み;
CoMarshalInterThreadInterfaceInStream(IID_IYourInterface,
   pYourInterface, &g_pStm);

..

// worker thread
IYourInterface pYourInterface;
CoGetInterfaceAndReleaseStream(g_pStm,
  IID_IYourInterface,
  (LPVOID*)&pYourInterface);
pYourInterface->DoWhatEverYouLike();

worker thread でも CoInit するのを忘れずに。

575 名前:571 :02/10/16 18:45
>574
あんがd。
試してみます。

>worker thread でも CoInit するのを忘れずに。
全然 頭に有りませんでした。

576 名前:駆け出しの名無し(=561) :02/10/16 19:18
>>569
ありがとうございます!

該当個所は
   Handle to the instance that contains the window procedure for the class.
となっていますね。日本語訳するなら、
   ウィンドウクラスを制御するウィンドウプロシージャを含むインスタンス
   へのハンドル
ってところでしょうか。

一方、CreateWindow(Ex)関数については、>>566のURLにもありますように、
   ウィンドウに関連付けられたモジュールのインスタンスハンドル
となっています。この「ウィンドウに関連付けられた」ってどういう意味
でしょう?原文(英語版)では"... associated with ..."となってます…。

Win9Xと違い、WinNTでは無視されるようですが、その理由なども教えていただけ
ればと思います。

よろしくお願いします

577 名前:571 :02/10/16 20:47
マーシャリングするのは面倒なので、とりあえずCoInitだけやってみたら、
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
をスレッドの最初でやったら動きました!
とりあえず、これでやってみます。

CoInitializeEx(NULL, COINIT_MULTITHREADED);
では、やっぱりクラッシュしますた。

因みに、SetTimer(NULLウィンドウハンドル指定)よりtimeSetEventの方が
パラメータを渡せるし、精度も良いのでつかってみたところ、timeSetEventは
別のスレッドを使用しており、やっぱりクラッシュしますた。

578 名前:デフォルトの名無しさん :02/10/16 20:49
サウンドカードがあるかは、waveOutGetNumDevsで再生デバイスの数>0
判断できるけど、カメラがついているかどうか判断する方法って無いでしょうか?

579 名前:デフォルトの名無しさん :02/10/16 21:24
質問です。Exploer等でファイルをドラッグ中なのか、
そうでないのかを判別するにはどうしたら良いのでしょうか?
理想では、こんな感じのがあれば良いのですが…

if( IsDrag()) {
  ドラッグ中
} else {
  それ以外
}

よろしくお願いします。

580 名前:デフォルトの名無しさん :02/10/16 21:26
>>578
カメラというデバイスについて特に言及したプロトコルが無いので無理
デジタルスチールカメラとか限定していけばどっかに規格があるかもしれんが
それでもUSB接続なのか独自なPCIカード経由なのかシリアルポート経由なのか(あるのか?w)
その辺が曖昧だったら無理

「○○社の○○というカメラが接続されているかどうか」は判断できる

581 名前:デフォルトの名無しさん :02/10/16 21:45
vbから現在ログオンしているユーザーのグループ名を
取得するにはどうしたらよいでしょうか?


582 名前:デフォルトの名無しさん :02/10/16 22:26
>>518
VB触ったことも無いけど
NetUserGetInfo()

WinMain()で、return に MSG.wParam を返せと書いてあるのですが、
warning C4244: 'return' : 'WPARAM' から 'int' に変換しました。データが失われているかもしれません。
と怒られてしまいます。
何が悪いのでしょうか...

583 名前:デフォルトの名無しさん :02/10/16 22:29
>>582
WPARAM は unsigned だからでは?(見当違いだったらスマソ)

584 名前:582 :02/10/16 22:29
誤 > WinMain()で、return に MSG.wParam を返せと書いてあるのですが、
正 > MSDNに、WinMain()ではreturn に MSG.wParam を返せと書いてあるのですが、

585 名前:582 :02/10/16 22:32
>>583
そうなんですが、MSDNを見ると

> 関数が WM_QUIT メッセージを受け取って正常に終了する場合は、メッセージの wParam パラメータに格納されている終了コードを返してください。関数がメッセージループに入る前に終了する場合は、0 を返してください。
って書いてあるんですよ...
プログラミングWindowsでもそうなっていますし

586 名前:583 :02/10/16 22:35
今定義を見たら、

__w64 unsigned int ですた。64ビットかな?

ちとかっこ悪いですが、return (__w64 unsigned int) 0 ってやってみては?

587 名前:583 :02/10/16 22:41
書き込んでしばらくして気づいた…。
return (WPARAM) 0; ってやったらいいじゃん…。

588 名前:デフォルトの名無しさん :02/10/16 22:43
char file[256];
OPENFILENAME ofn;
memset(&ofn,0,sizeof(OPENFILENAME));
ofn.lStructSize=sizeof(OPENFILENAME);
ofn.lpstrFile=file;
ofn.hwndOwner=hWnd;
ofn.nMaxFile=MAX_PATH;
ofn.lpstrTitle="ファイルの保存";
ofn.lpstrFilter="files\0*.*\0\0";

if(GetSaveFileName(&ofn)!=0){
// ほげほげ
}
r=CommDlgExtendedError();

でr=0x02になってしまいます。
ちょっと探したところ時々ある現象のようなのですが
回避方法が見つからないです。
ご存じの方教えてください。

589 名前:583 :02/10/16 22:44
ぎゃー! 間違いすぎー! 逆だった…。 return (int) MSG.wParam;

590 名前:デフォルトの名無しさん :02/10/16 22:46
>>588
CDERR_INITIALIZATION = 0x0002
初期化の際にコモンダイアログボックス関数が失敗しました。たとえば、メモリ不足の場合に発生します。

591 名前:デフォルトの名無しさん :02/10/16 22:56
>>588
  *file = '\0';
も入れなきゃ。

592 名前:デフォルトの名無しさん :02/10/16 22:59
だな。
あと、MAX_PATHは260だったと思われ。
fileを大きくした方が・・・

593 名前:デフォルトの名無しさん :02/10/16 23:00
>>589
それをキャストしてしまっても本当にいいのかって事です。

594 名前:デフォルトの名無しさん :02/10/16 23:02
>>593
問題なし。

595 名前:593 :02/10/16 23:04
>>594
その一言が聞きたかったんです。
どうもありがとうございます。

596 名前:デフォルトの名無しさん :02/10/16 23:38
どこで聞けばいいのかよくわからんが。
Ruby で書いた壁紙変更スクリプトを
cygwin の cron で定期実行させたところ壁紙が変更されない。
cron がサービスとして動いているので、壁紙変更スクリプトが
LocalSystem のユーザコンテキストで実行されるのが問題っぽい。

平たく言えば、サービスとして動く壁紙チェンジャーは作成可能か、かな。
何か方法知っていたら教えてくれくれ。

壁紙変更は SystemParametersInfo を使ったよくある方法。
コマンドラインから実行した場合には問題なく変更される。

597 名前:デフォルトの名無しさん :02/10/16 23:41
> LocalSystem のユーザコンテキスト

こいつはデスクトップにアクセスできるのか?

598 名前:588 :02/10/17 00:28
うぉ、いろいろ勘違いしていたみたいだ。
char []のサイズとかnMaxFileとかいじって解決しマスタ。

599 名前:デフォルトの名無しさん :02/10/17 01:02
>>542
私も>>546に同感。
ちなみにMFCアプリの場合はメインスレッドのメッセージループが
先に終わっちゃってるとASSERT出たと思います。
APIのレベルでもなにかあるんじゃないですかね。

メッセージループがWM_QUITを受け取った後で複雑な処理を
していることがなんかまずいのかも、かも、かも。

600 名前:デフォルトの名無しさん :02/10/17 01:38
そんな俺の600に乾杯!

601 名前:デフォルトの名無しさん :02/10/17 09:15
>>596
CreateProcessAsUser
LoadUserProfile
つーかCygwinのcronには特定ユーザーのアカウントで
プログラム実行する機能ないの?
タスクスケジューラにさえあるんだけど

602 名前:デフォルトの名無しさん :02/10/17 18:21
ビットマップを表示するクラスをつくるとき
メンバ変数はint x, yとビットマップとして
ビットマップのメンバ変数は型をどうしたらいいでしょうか?
ファイル名にしておいて描画のたびに
読み込むのはつらいとおもうのです
HBITMAP型にすればよいのでしょうか(コンストラクタでLoadBitmapで初期化)?あと このビットマップは複数のインスタンスから
使われると想定しています

603 名前:デフォルトの名無しさん :02/10/17 19:22
YaneSDK(↓) が参考になるかも >>602
//
// Device Independent Bitmap
//
#ifndef __yaneDIBitmap_h__
#define __yaneDIBitmap_h__
// DIBitmapはGDIと同じく、下位からR,G,B,α
class CDIBitmap {
public:
LRESULT Load(string szFileName,int nBpp=24);
LRESULT Load(HDC hDC,LPRECT lpRect,int nBpp=24);
LRESULT Save(string szFileName,LPRECT lpRect=NULL);
LRESULT CreateSurface(int nSizeX,int nSizeY,int nBpp=24);
LRESULT Release();
// LoadBitmap/CreateSurface以降、いつでもDCの取得は可能
HDC GetDC() { return m_hDC; }
HBITMAP GetHBITMAP() { return m_hBitmap; }
LRESULT GetSize(LONG& x,LONG& y);
BYTE* GetPtr() { return (BYTE*)m_lpdwSrc; }
CDIBitmap();
virtual ~CDIBitmap();
protected:
DWORD m_lpdwSrc; // ソースバッファ
LONG m_nSizeX;
LONG m_nSizeY;
int m_nBpp;
HBITMAP m_hBitmap;
HDC m_hDC;
};
#endif


604 名前:602 :02/10/17 20:11
>>603
ありがとうございます
参考になりそうです
ソースに当たってみます

605 名前:デフォルトの名無しさん :02/10/18 01:26
現在のユーザーがHKEY_CLASSES_ROOTに書き込み権限があるかどうかを
知るにはどうすれば良いでしょうか?
それ用のAPIがあるでしょうか?

606 名前:デフォルトの名無しさん :02/10/18 01:46
>>605
俺、前に同じ質問したことあるけど、「実際に書き込みでOpenしてみれ」
って言われたんで、そうしてる。

607 名前:デフォルトの名無しさん :02/10/18 04:54
どうしても解決できない問題があります
もし知ってる方がいらっしゃいましたらお教え願えませんでしょうか?

一度ビットマップをCreateFile() ReadFile()で読み込み
ファイルハンドルを閉じ
読み込んだデータに加工をして保存をしようとすると
なぜかCドライブ直下に保存されます。


そしてこれがまた変なところで
読み込んだビットマップの名前をプログラム内で直接書き込んで指定してやると
カレントディレクトリに新しいファイルが生成されるのですが
コマンドライン引数(アイコンにドラッグアンドドロップ)で
ファイル名を指定すると
Cドライブ直下に新しいファイルが生成されてしまいます。
指定しているのは読み込むファイル名であって、書き出すファイル名は
test32.bmpなど、固定です。

わかりやすく言うと
自作関数(といいますかクラスになっています)
LoadBMP("test.bmp")
で読み込むとカレントディレクトリにファイルが出力され
LoadBMP(lpCmdLine); //lpCmdLineはコマンドライン引数
だとCドライブ直下にファイルが出力されます。
このクラスでは、必ずファイルハンドルはCloseHandle()で破棄しています。

保存をするのはまた別クラスで、メモリに入ったデータだけを移動させています
クラス間にはなんの依存もありません

いったいなんなのでしょうか……

608 名前:607 :02/10/18 05:00
↑に書いたものですが
さらに調べてみたところ、なんでかどこかでカレントディレクトリが
C:\になっていました。
GetCurrentDirectory()
を使って2箇所で見てみたのですが、最初に実行(プログラムが開始してからすぐ)
は正常なカレントディレクトリでしたが、2度目(ファイル保存寸前)
ではC:\でした。

カレントディレクトリが変わってしまうことというのはありえるのでしょうか?

609 名前:607 :02/10/18 05:08
すいません 嘘すいてました(汗)
コマンドライン引数を指定するとc:\になるみたいです
謎です……

610 名前:デフォルトの名無しさん :02/10/18 07:29
>>607
コモンダイアログとか使ってるんじゃないの?

611 名前:デフォルトの名無しさん :02/10/18 07:37
> すいません 嘘すいてました(汗)
> コマンドライン引数を指定するとc:\になるみたいです

カレントディレクトリが途中で変わるというのが嘘?
だったら起動時からカレントが違ってるだけでは?
何が不思議なのかわからん。

612 名前:579 :02/10/18 09:08
>>579 です。
ええっと、ドラッグ中なのか、そうでないかの判定は
難しいのでしょうか?それとも、超簡単なので
「そんな厨房の質問は無視だ( ´Д`)σ)Д`)」
って感じなのでしょうか?

ヒントでも教えて貰えるとありがたいのですが…。

613 名前:デフォルトの名無しさん :02/10/18 09:20
なんのためにそういう判定がいるんだ?
IDropTargetを実装してRegisterDragDropするのでは不足か?

614 名前:デフォルトの名無しさん :02/10/18 09:25
>>613
イベントドリブンという発想が出来ない素人なんだろ

615 名前:デフォルトの名無しさん :02/10/18 09:37
>>612
システム全体の話?
それとも自分自身のプロセスの話?

616 名前:579 :02/10/18 10:54
>>613
DragAcceptFilesやDragQueryFile等のAPIや
WM_DROPFILESみたいなメッセージがあると思って
OLEは全然思いつきませんでした。なるほど。OLEですね。
ありがとうございました。これで試してみます。

>>614
イベントドリブンは理解してますが…
何故、そういう発想に………煽り………ですか?
流石、2chですね。あ、レスは不要です。問題解決したので。

>>615
自分自身です。ウィンドウにドラッグした場合等に
自前でキャレット表示等をしているアプリケーションの
真似事をしたかったのです。

617 名前:デフォルトの名無しさん :02/10/18 13:11
ウィンドウを最大化したいんだけど、WM_SIZE送っても変わらない。。
どうすればいいのれすか?

618 名前:デフォルトの名無しさん :02/10/18 13:23
ShowWindow

619 名前:デフォルトの名無しさん :02/10/18 20:56
イベントドンブリー

620 名前:デフォルトの名無しさん :02/10/19 15:48
やさしいお兄さんに質問なんですが、ipconfigなどで見ることが出来る、
DNSサーバ、デフォルトゲートウェイなどの情報を取得したいです。
さくっと出来る関数なんぞを教えてください。


621 名前:デフォルトの名無しさん :02/10/19 16:18
>>620
WSA系。

622 名前:デフォルトの名無しさん :02/10/19 21:01
>>620
ShelExecuteでcommand.comを使って、
ipconfigの出力をファイルにリダイレクトとか言ってみるテスト

623 名前:  :02/10/19 21:31
>>620

どっかでも答えたような気がするけど、
素の Win95 サポートする必要があるなら SNMP API で MIB でオブジェクト指定して取り出せる。
iphelper.dll が使えるなら GetNetworkParams とかそのへんの IP Helper API でアレコレする。


624 名前:デフォルトの名無しさん :02/10/19 21:53
ShellExecute 香ばしい

625 名前:620 :02/10/19 23:33
皆さん、レスありがとうございます
いろいろと調べてみましたが、簡単&綺麗な方法はないようですね…
さすがにShellExecuteはいかがなものかと…
ユーザに入力させることにします

>>623
vbスレの奴は私宛だったんでしょうか…
>SNMP API で MIB でオブジェクト指定して
その当たりの知識が全くないので、時間とかを考えて、今回は使わないことにしました
情報ありがとうございます

626 名前:アフォルトの名無しさん :02/10/20 00:33
>>625
ShellExecute() はさすがにアレだが、それでも 「簡単」 に済ませるために
処理を外部コマンドに任せて、その出力を拾うのはよくある手法だぞ。
その場合は CreatePipe() + CreateProcess() を使う。
何を敬遠する?

627 名前:デフォルトの名無しさん :02/10/20 05:20
UNIXではほとんど問題にならないけど
Windowsだとコマンド出力がローカライズされているという罠があったり

628 名前:デフォルトの名無しさん :02/10/20 10:27
レジストリから取得じゃいかんの?

629 名前:デフォルトの名無しさん :02/10/20 13:16
あほすぎる質問しますが・・・
APIってなんですか?

630 名前:デフォルトの名無しさん :02/10/20 13:31
アプリケーションプログラムから、
システムの機能を呼び出すための方法のこと。

631 名前:デフォルトの名無しさん :02/10/20 13:49
>>605です。
>>606の回答のようにRegOpenKeyExでKEY_ALL_ACCESSを指定して
HKEY_CLASSES_ROOTを開いたところ、書き込み権限が無いにも関わらず
RegOpenKeyExが失敗しませんでした。

書き込み権限が無いときはレジストリオープンに失敗して欲しいのですが、
どうすればよいでしょうか?


632 名前:デフォルトの名無しさん :02/10/20 13:49
http://pc.2ch.net/test/read.cgi/pcqa/1035087406/
スクリプト教えてあげて

633 名前:デフォルトの名無しさん :02/10/20 13:55
>620
PlatformSDKにIpConfigのサンプルコードがなかったけ?あったか自信はないけど探してみたら!

634 名前:デフォルトの名無しさん :02/10/20 14:41
>>631
ごめん。俺も最初、素直に RegOpenKeyExで実装して、うまくいかなくて
下みたいにしたんだった。Openではなく、サブキー"*"(普通、すでに存在
している)を Createするという考え方。

HKEY hKey;
if(RegCreateKeyEx( HKEY_CLASSES_ROOT, "*", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hKey, NULL ) == ERROR_SUCCESS )
 書きこみ権あり
else
 書きこみ権なし


635 名前:デフォルトの名無しさん :02/10/20 14:47
>>634
あ、あと ERROR_SUCCESS になったら、RegCloseKey(hKey) を忘れずに。

過去スレ見たら
http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
の 973,974,976 にあった。

636 名前:デフォルトの名無しさん :02/10/20 16:24
>>634
HKEY_CURRENT_USER\Software\Classes\* が存在していたらどうしますか
というかRegOpenKeyExが失敗しないのも
HKEY_CURRENT_USER\Software\Classes が統合されてる関係のような気がする

637 名前:デフォルトの名無しさん :02/10/20 16:32
だからOpenじゃなくてCreateだってばさ

638 名前:デフォルトの名無しさん :02/10/20 17:30
OpenでもKEY_ALL_ACCESS指定では開けないはずでしょ。
それが開けちゃうという話ではないの

639 名前:デフォルトの名無しさん :02/10/20 17:34
>>637
前スレ読ませてもらったけど俺はOpen(KEY_WRITE)でやってて、
うまくいってるよ。

640 名前:デフォルトの名無しさん :02/10/20 18:20
>>636
明示的にHKEY_CLASSES_ROOTを開いてもHKEY_CURRENT_USER\Software\Classes
を開いたことになる??マジで?

>>639
OSとどのユーザーグループで確認したのかと、実際の引数を求む。

641 名前:デフォルトの名無しさん :02/10/20 18:32
>>634から読ませてもらってこんな関数にしたんですがどうでしょう?
// HKEY_CLASSES_ROOTに書き込み権限がある場合はTRUE、無ければFALSEを返す
BOOL IsWriteReg(void)
{
LONG lRes;
HKEY hKey;
TCHAR szKey[] = _T("*");
DWORD dwDisposition;

// レジストリオープン
lRes = RegCreateKeyEx(
HKEY_CLASSES_ROOT, szKey, 0, NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition
);

// レジストリオープン失敗
if(lRes != ERROR_SUCCESS)
return FALSE;

// HKEY_CLASSES_ROOT\* を新規作成した場合は削除
if(dwDisposition == REG_CREATED_NEW_KEY)
RegDeleteKey(HKEY_CLASSES_ROOT, szKey);

// レジストリクローズ
RegCloseKey(hKey);

return TRUE;
}


642 名前:アフォルトの名無しさん :02/10/20 18:35
HKEY_CURRENT_USER\Software\Classes キー、9x にはない。

643 名前:デフォルトの名無しさん :02/10/20 18:45
>>640
http://msdn.microsoft.com/library/en-us/sysinfo/base/merged_view_of_hkey_classes_root.asp
>>642
9xはそもそも書き込み権限がなくて失敗すること自体ないだろ

644 名前:デフォルトの名無しさん :02/10/20 18:46
というわけで
HKEY_LOCAL_MACHINE\Software\Classes
をKEY_ALL_ACCESSで開いて判定すればいいのではないかと思うわけだが
誰か実験してちょ(他力本願

645 名前:639 :02/10/20 18:46
>>640
> OSとどのユーザーグループで確認したのかと、実際の引数を求む。

今手元に環境が無いのだけれど、WinXP Professional。
それと確かWin2Kでも確認したと思う。

管理者権限では成功し、
制限ユーザー(今は詳細は確認できない)では失敗することを確認。

HKEY hKey;
RegOpenKeyEx(HKEY_CLASSES_ROOT, "CLSID", 0, KEY_WRITE, &hKey);

>>636
HKEY_LOCAL_MACHINE\Software\Classesの間違いでないの?

>>642
俺の手元のWin98には一応あるよ。
中身は特殊フォルダの(ユーザー毎の)アイコン文字列くらいだけど。

646 名前:デフォルトの名無しさん :02/10/20 18:50
>>645
> HKEY_LOCAL_MACHINE\Software\Classesの間違いでないの?
だから>>643を見てよ

647 名前:639 :02/10/20 19:05
>>646
ごめん。645を書いた時はまだ643を見てなかったので。

でも、そのリンク先によると、やはり
HKEY_LOCAL_MACHINE\Software\Classesのように思えますが。
HKEY_CURRENT_USERが有効になるのは、RegOpenUserClassesRoot
を使って開いた時だけじゃないの?

648 名前:639 :02/10/20 19:22
いや、違うか。HKEY_CURRENT_USERも有効になるのかな?
また暇な時にじっくり読んでみます。

649 名前:デフォルトの名無しさん :02/10/20 19:38
>>644
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Classes", 0, KEY_ALL_ACCESS, &hKey);
でできた。

650 名前:デフォルトの名無しさん :02/10/21 01:54
スタートメニューのようなポップアップメニュー項目の並べ替えやラベルの編集ってどうやるんでしょう。
WM_MENURBUTTONUP 受信時に InsertMenu() 等をしても表示が乱れるだけで更新が反映されないのですが。


651 名前:デフォルトの名無しさん :02/10/21 02:00
こうなりますた

BOOL IsWriteReg(void)
{
LONG lRes;
HKEY hKey;
OSVERSIONINFO vi;

// NT系以外の場合TRUEを返す
vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&vi);
if(vi.dwPlatformId != VER_PLATFORM_WIN32_NT)
return TRUE;

// レジストリオープン
lRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Classes", 0, KEY_ALL_ACCESS, &hKey);

// レジストリオープン失敗
if(lRes != ERROR_SUCCESS)
return FALSE;

// レジストリクローズ
RegCloseKey(hKey);

return TRUE;
}


652 名前:デフォルトの名無しさん :02/10/21 03:55
>>651
9xでHKEY_LOCAL_MACHINE\Software\Classes開くと失敗するの?
失敗しないんならプラットフォームの判定は不要だと思うんだが

653 名前:デフォルトの名無しさん :02/10/21 03:57
不要というか互換モードで起動されたりしたときに
判定を誤るからむしろ有害

654 名前:デフォルトの名無しさん :02/10/21 04:04
>>642をHKEY_LOCAL_MACHINEと間違えますた・・・


655 名前:デフォルトの名無しさん :02/10/21 04:04
関数名はCanWriteRegとかIsRegWritableでないと英語的におかしい気がする
果てしなくどうでもいいことだが

656 名前:デフォルトの名無しさん :02/10/21 04:07
>>653
互換モードだとGetVersionExが違う値になるん?

657 名前:デフォルトの名無しさん :02/10/21 04:27
>>656
というかGetVersionExを違う値にするための機能が互換モードですが
(ほかにもAPIの動作が微妙に変わるけど)

658 名前:デフォルトの名無しさん :02/10/21 07:01
リソーススクリプトの書き方のってるところ知りませんか?
英語でもいいので、しっていたらおしえてください。

659 名前:デフォルトの名無しさん :02/10/21 07:25
>>658
>>1に載ってる
猫でも分かるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html

660 名前:デフォルトの名無しさん :02/10/21 21:52
::GetAsyncKeyState()と::GetKeyState()の違いってなんですか?
メッセージループのスレッド以外で使えるかどうかだけなのでしょうか?

あと、::GetKeyboardState()もメッセージループのスレッドでしか
使えないんですかね、やっぱり。

661 名前:デフォルトの名無しさん :02/10/21 22:03
>>660
GetKeyState 今処理中のメッセージを受け取った時点で押されていたキー
GetAsyncKeyState 今まさに押されているキー
WM_KEYDOWNの処理の中で10秒くらいSleepを入れて試してみれば違いがわかる(非推奨)

662 名前:デフォルトの名無しさん :02/10/21 22:12
>>661
と、いうことは::GetKeyState()をメッセージ処理後に
呼び出した場合は、最後に処理されたメッセージ取得時の
キー状態を取得するってことですね。

663 名前:デフォルトの名無しさん :02/10/21 23:43
>>659
リソースエディタを使わないで
テキストデータで書きたいんですが
詳しくのってるところしりませんか?

664 名前:デフォルトの名無しさん :02/10/22 00:03
>>663
MSDN

665 名前:デフォルトの名無しさん :02/10/22 00:20
http://www.microsoft.com/japan/msdn/library/

666 名前:デフォルトの名無しさん :02/10/22 00:23
>>663
もれは猫でも〜のソース見てたら大体分かったけど・・・。

667 名前:デフォルトの名無しさん :02/10/22 12:37
>>666
激同

668 名前:デフォルトの名無しさん :02/10/22 21:17
>>663
プログラミングWindows第5版
http://www.ascii.co.jp/pb/msp/36001/36001.htm

には載ってないのかな?
# ごめん、オレはこの本読んだことないんで分からん…。

669 名前:  :02/10/22 22:00
>>668
それに構文の説明が載ってるけど、p540にはドキュメントを読むように書いてある。

670 名前:デフォルトの名無しさん :02/10/23 00:38
メモリDCを使用した処理をしています。

作成する CompatibleBitmap は、クライアントサイズに合わせて作っていて、
ウィンドウサイズが変更されたときに、Bitmap のサイズも変更しようと思っ
ています。。

CompatibleBitmap には、サイズ変更をするような関数は見当たらないので、
新しい CompatibleBitmap を作成して、それにサイズ変更前のデータを必要
なだけコピーしたいのですが、デバイスコンテキストから、デバイスコンテ
キストへコピーする BitBlt は、あっても、Bitmapから、Bitmapにデータを
コピーするAPIが見つかりません。

何とか、いい方法は、ございませんか?

671 名前:デフォルトの名無しさん :02/10/23 01:01
>670
描画用の仮想ウィンドウ?

CreateCompatibleDC()でデバイスコンテキストをもう1つ作って、新しく作ったビットマップをSelectObject()すれば、デバイスコンテキストが2つできるので、BitBlt()が使える。
あと、最初からビットマップをスクリーンと同じ大きさでつくっておいて、使うときに必要な部分だけコピーする方法もある。

672 名前:デフォルトの名無しさん :02/10/23 01:44
>>671

とりあえず、スクリーンと同じ大きさで作る方法を試してみたいと思います。
ありがとうございました。


673 名前:デフォルトの名無しさん :02/10/23 04:42
>>663
あとは、
リソースエディタの吐いたリソーススクリプトを読めば、
大体分かると思うけど・・・。

674 名前:579 :02/10/23 13:17
>>670-672
便乗質問だけど、漏れもデスクトップサイズと同じビットマップを確保してるけど
それだと、1600x1200x2画面とかだと、やたらとメモリ食うし…。
可変サイズのウィンドウに描画用の仮想ビットマップを確保する場合、
もうちょっと、メモリを食わずに、そこそこのスピードの方法って無いんでしょうか?

675 名前:デフォルトの名無しさん :02/10/23 13:55
WM_SIZEで仮想ビットマップを作り直すとか・・・
負荷が気になるならWM_PAINTでもいいかもネ

676 名前:デフォルトの名無しさん :02/10/23 18:37
>>675
WM_NCCALCSIZE
等をうまく使えば、変更前と変更後のクライアント領域のサイズから、
効率的に、再描画を指定できそうな気がするんだけど、このメッセージ
の処理を、どうやってやるのか、よくわからない(^^;

677 名前:デフォルトの名無しさん :02/10/23 20:20
Visual C++ でrs-232cのシリアル通信でどうやるんでしょう?
MSComm は Visual Basic のコマンドなんですか?
デジタルボルトメーターを制御したいんですが。
どなたか教えてください。 お願いします。m(__)m




678 名前:デフォルトの名無しさん :02/10/23 20:21
>>677
CreatefileでCOM開けたと記憶。

679 名前:デフォルトの名無しさん :02/10/23 20:24
>>678
ありがとうございます。
ちょっと調べてみます。

680 名前:デフォルトの名無しさん :02/10/23 23:22
>674
小さな仮想ウィンドウを作るとか。
ウィンドウの大きさが1600×1200だとしたら、仮想ウインドウは800×600を確保。
ウィンドウのマッピングモードを800×600に変更して仮想ウィンドウからコピー。
処理するデータが1/4で済むので、かなり早くなるよ。
ただし、画質が荒くなるので使える場所は限定されるね。


681 名前:デフォルトの名無しさん :02/10/24 01:10
質問させていただきます。
オートクリックツールを作ろうと思っているのですが

SendMessage(Target_hWnd, WM_MOUSEMOVE, 0, cp.x + (cp.y<<16));
SendMessage(Target_hWnd, WM_SETCURSOR, (unsigned int)Target_hWnd, HTCLIENT + (WM_LBUTTONDOWN<<16));
SendMessage(Target_hWnd, WM_LBUTTONDOWN, MK_LBUTTON, cp.x + (cp.y<<16));
SendMessage(Target_hWnd, WM_SETCURSOR, (unsigned int)Target_hWnd, HTCLIENT + (WM_LBUTTONUP<<16));
SendMessage(Target_hWnd, WM_LBUTTONUP, 0, cp.x + (cp.y<<16));

これではうまくいかないようです。
他にどんなメッセージを送ればよろしいのでしょうか。


682 名前:デフォルトの名無しさん :02/10/24 01:15
それじゃSendMessageが送られへんのかいな

683 名前:デフォルトの名無しさん :02/10/24 01:24
mouse_event()

684 名前:デフォルトの名無しさん :02/10/24 12:16
ターゲットによってはsendInput()

685 名前:デフォルトの名無しさん :02/10/24 15:11

質問:

???.ilk (増分(インクリメント)リンクファイル?)
が生成される位置を指定するにはどうすれば?


/ilk:"????/" は通らない。

/incremental:"????/" は通らない。



686 名前:デフォルトの名無しさん :02/10/24 16:52
>>684
Windows 95 を見捨てるのか

687 名前:デフォルトの名無しさん :02/10/24 18:02
>>686
いまさら、95なんか気にするな。

688 名前:685 :02/10/24 18:07

みなさん、どうか、>>685 をお願いします。

もしかして、既出放置ですか?


689 名前:デフォルトの名無しさん :02/10/24 19:17
>>687
漏れの会社 PC が Windows 95 なんだYO!!!
とか言ってみる。

>>688
一体何がしたいの?
その前にコンパイラ/リンカオプションは調べた?
そこに無ければ諦めなさい。以上。

690 名前:デフォルトの名無しさん :02/10/24 22:43
>>686
だから「ターゲットによっては」って言ってるじゃんよ

691 名前:686=689 :02/10/24 23:25
>>690
だから、その 「ターゲットによっては」 ってのが既に Windows 95 を見捨てる
って事だろ。
マウスに関して、SendInput() だけにできて mouse_event() にできない事って
どんなこと?

まあ、SDK が新しくなって mouse_event() のドキュメントが無くなったという事
になったら仕方ないけど。

692 名前:デフォルトの名無しさん :02/10/24 23:32
ボタンクリックでウインドウを最大化できるようにWM_COMMANDで

SendMessage(hWnd,(WPARAM)2,(LPARAM)MAKELPARAM(now.w,now.h));

を送ったんですが、最大化されません。
まだ何かやることってあるんですか?

693 名前:デフォルトの名無しさん :02/10/24 23:35
>>692 ShowWindows(SW_MAXIMIZE) じゃだめなの?

694 名前:デフォルトの名無しさん :02/10/24 23:38
>>692
( `Д) <ShowWindow()
/(ヘ つ )ヘ   

695 名前:デフォルトの名無しさん :02/10/24 23:38
↑ Σ(´Д`ズガーン
間違えた。ShowWindows って...

696 名前:デフォルトの名無しさん :02/10/24 23:41
>>691
クライアントが最初からWin98以上を指定してきたとかそういう状況を想定してた。
> SendInput() だけにできて mouse_event() にできない事
途中で割り込まれずに連続したイベントの送信を保証すること

697 名前:692 :02/10/24 23:48
>>693-695
ありがdございまつ!
できますた。

698 名前:デフォルトの名無しさん :02/10/24 23:50
>>692
( `Д) <どうしてもSendMessageしたいなら、WM_SYSCOMMANDでできるかも。
/(ヘ つ )ヘ

699 名前:デフォルトの名無しさん :02/10/24 23:58
いいからモノをしまえ

700 名前:691 :02/10/25 00:03
>>696
ああ了解、特定業務にしか使わなければ OS 限定で問題無いな。
漏れが浅かった。
しかし、mouse_event() でイベント送信順に困ったこと無いぞ。
構造体用意するのも面倒だしな・・・。

ところで、683-684 が 681 へのレスだと言う事に質問者は気付いてるのだろーか。

701 名前:名無しさん :02/10/25 00:22
INITCOMMONCONTROLSEX icce;
icce.dwSize = sizeof(icce);
icce.dwICC = ICC_USEREX_CLASSES | ICC_WIN95_CLASSES | ICC_TREEVIEW_CLASSES;
::InitCommonControlsEx(&icce);

(略)

RECT rc;
GetClientRect(hWndParent, &rc);
HWND hCombo = CreateWindowEx(0, WC_COMBOBOXEX, NULL,
  WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,
  rc.left, rc.top, rc.right - rc.left, rc.bottom - rc. top,
  m_hWnd, NULL, _Module.m_hInst, NULL);

このコードでコンボボックスを作ったんだけど、
ドロップダウンリストが表示されないんですよね。

通常は、「▼」を押すとリストが表示され、
リスト以外の部分をクリックすると、リストが非表示になる処理が行われ、
もう一度同じ場所をクリックしないと、その場所にフォーカスが移りませんよね。

ところが、「▼」を押してもリストが表示されず、さらに他の部分をクリックしても
一回目はそこにフォーカスが移らない。

VC++6.0 SP5 Windows 2000 SP3です。


702 名前:デフォルトの名無しさん :02/10/25 00:39
>>701
了解。わざわざ報告どうもです。

703 名前:デフォルトの名無しさん :02/10/25 00:41
>>699
ワロタ

704 名前:701 :02/10/25 00:42
すまそ。追記。

701のようになるのはなぜでしょう?

705 名前:デフォルトの名無しさん :02/10/25 00:44
>>702,704
ワロタ

706 名前:デフォルトの名無しさん :02/10/25 01:03
>>701
( `Д) <rc.bottom - rc. topが小さすぎない?
/(ヘ つ )ヘ これはリストの高さになるよ。

707 名前:デフォルトの名無しさん :02/10/25 01:08
702 グッジョブ

708 名前:名無しさん :02/10/25 01:13
>>706
ありがとうございます。
おかげさまで解決しました。


709 名前:デフォルトの名無しさん :02/10/25 03:57
706 ところでモノはしまわんのか

710 名前:デフォルトの名無しさん :02/10/25 07:42
    ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ( ・∀・)< モノをしまう必要はない
   (    )  \_______
   |  ⊃| アヒャ
   (__)_)

711 名前:127 :02/10/25 13:45
スミマセン。ちと質問なんですが

デスクトップ上のInterNet Exploerのアイコンを消去する時は、
インターネットのプロパティの詳細設定内の
「デスクトップにInterNet Exploerを表示する」のチェックを外すと
画面上から消え去ります。

で、上記と同じコトをプログラム上で行いたいのですが方法が判りません。
ご存知の方がいましたらよろしくお願いします。<(_ _)>

ちなみに...
チェックのあり/なしでレジストリのDiffを採って見ましたがBlank以外の差はありませんでした


712 名前:デフォルトの名無しさん :02/10/25 14:19
窓の手でも作ってるのか?

713 名前:デフォルトの名無しさん :02/10/25 14:31
単にショートカットを削除しているだけでは?

714 名前:711 :02/10/25 14:34
いや、そんな凄いコトをしようなんて...
初回起動時にアイコンがデスクトップ上にあるのが嫌なんですと。

で、初回起動時の他のアイコンは消せたんですけど、
IE(だけだったかな?)が消せなくて...

715 名前:デフォルトの名無しさん :02/10/25 14:56
お前が嫌ならお前が消せばすむことだろ
設定変更ツールでないものが勝手にユーザーの設定をいじるな

716 名前:デフォルトの名無しさん :02/10/25 14:58
>>715
準ウイルスのようなモノを作りたいんだと思われ。

717 名前:デフォルトの名無しさん :02/10/25 15:01
「嫌なんですと。」って言い方からするとユーザーからの依頼と思われ

718 名前:711 :02/10/25 15:22
むぅ...誤解されてる...
自分で直接設定を変更出来るんなら、こんなモン作ろうとしないです。


719 名前:デフォルトの名無しさん :02/10/25 15:35
> 自分で直接設定を変更出来るんなら、
自分でやり方書いてるだろ。↓これは違うのか?
> インターネットのプロパティの詳細設定内の
> 「デスクトップにInterNet Exploerを表示する」のチェックを外すと
どういうプログラム作ってるのかちゃんと書けよ。
ウィルスじゃないんなら

720 名前:711 :02/10/25 16:02
...スマソ
>>715サソが言ってる「設定変更ツール」ですな。
ただ、「設定変更ツール」って名乗るのも躊躇う機能しか持ち合わせていませんが...

変更方法を知りませんか?知ってたら教えて下さい<(__)>

721 名前:デフォルトの名無しさん :02/10/25 16:18
質問。
仮想画面(メモリDC) → 実画面 と
BitBlt()より高速にコピーする方法は無いでしょうか。

722 名前:デフォルトの名無しさん :02/10/25 16:20
ない

723 名前:デフォルトの名無しさん :02/10/25 16:27
>>721
createdibits

724 名前:デフォルトの名無しさん :02/10/25 16:28
>>721
WinGつかう。


725 名前:デフォルトの名無しさん :02/10/25 17:44
>>721
Direct3D

726 名前:デフォルトの名無しさん :02/10/25 19:14
質問です。
最近のWindows系マシンですと、
windows、winnt、program filesなどのフォルダが最初
不可視になっていて、ここをクリックして表示して下さい
みたいな風になっていると思うのですが、ああいうのって
他のフォルダでも同じような処理ができるAPIとかあるんでしょうか?

ただのsetattributeでhiddenやsystemにしてもああいった挙動は
実現できないですよね?
また、できないならできないでシステムフォルダだけでも実現している
APIの名前だけでも教えてください。お願いします。

727 名前:デフォルトの名無しさん :02/10/25 19:18
>>726
JScriptとフォルダをWeb形式でって言うのとの合わせ技。

なんでVBScript使わないんだろうね?(藁

728 名前:デフォルトの名無しさん :02/10/25 19:20
>>727
JScriptはMSのものですがなにか?

729 名前:デフォルトの名無しさん :02/10/25 19:21
>>728
せっかく対抗馬のVBS作ったんだからわざわざJavaScriptもどき使うこともあるまいて。


730 名前:721 :02/10/25 19:27
>>722-725
ありがd。
参考にします。

731 名前:726 :02/10/25 19:29
マジっすか。全然API関係ないやん…スレ汚しスマソ。

>>727-729
大変参考になりました。ありがとうございました。

732 名前:デフォルトの名無しさん :02/10/25 23:38
>>726
遅レスですまんが、↓のスレで聞けばいいと思うよ。
http://pc3.2ch.net/test/read.cgi/win/1011536679/

733 名前:デフォルトの名無しさん :02/10/26 18:47
メモ帳のフォントの設定などを見ると、フォントの種類によって使えるサイズが決まってますが、このサイズのリストはどうすれば取得できるんでしょうか?
たとえば、"Terminal"だったら 4,6,10,14,17 というリストです。



734 名前:デフォルトの名無しさん :02/10/27 15:52
ウィンドウを最終的に特定のDCに描画してやりたいのですが、方法がわかりません。
以下の方法を試してみましたがだめでした。

1. GetWindowDCやGetDCで取得したDCをsrcとしてBitBlt -> 前面にある矩形領域のビットマップがBitBltされる
2. WM_PRINT, WM_PRINTCLIENTを送る。 -> WM_PRINTをサポートしていないらしく何も得られない。


735 名前:734 :02/10/27 15:56
補足です。
>WM_PRINTをサポートしていないらしく何も得られない。
メッセージハンドラが実装されていないらしい、ということです。

今起動しているアプリケーションのサムネイルを表示してみたいと思っています。


736 名前:デフォルトの名無しさん :02/10/27 16:01
2000/XPならLayered Window化する
そうでなければWM_PAINTで描画するまで前面のウィンドウに隠された部分は
どこにも存在しないので不可能

737 名前:デフォルトの名無しさん :02/10/27 16:03
733 の質問の答えは漏れも知りたいんだが誰か知らないか?

738 名前:デフォルトの名無しさん :02/10/27 16:38
デスクトップに3D環境を実現するTaskGalleryのようなものを作りたいのですが、
ウィンドウの描画を完全に横取りする方法ってどなたかご存じでしょうか?
http://research.microsoft.com/ui/TaskGallery/index.htm

ここを見ると
http://research.microsoft.com/ui/TaskGallery/pages/technology.htm
Windows Redirectorというものがあるのですけど、これってデバイスドライバレベル
で実現するものなのでしょうか。

739 名前:デフォルトの名無しさん :02/10/27 17:43
>>738
ttp://www.ksky.ne.jp/~seahorse/
特別なドライバは使っていない模様です。
ソースもあるし,勉強になりますよ。まじで。

740 名前:デフォルトの名無しさん :02/10/27 18:30
>>733 >>737
TClockのソース exe\pagecolor.c にそれっぽい処理が書いてあるので参考になるかと。
でも、一覧される数字が微妙に違いますね。丸め誤差か何か?

741 名前:740 :02/10/27 18:33
質問です。他のプロセスのコマンドライン引数を取得する方法はありますか?
Win2000では、フックを使ってプロセスに忍び込ませた後、GetCommandLine()を
使って取得できたのですが、Win95ではうまくいきませんでした。

742 名前:デフォルトの名無しさん :02/10/27 18:34
>>739
紹介ありがとうございます。
アニメーションまでして非常によくできていると思います。

ただ、やろうとしていることは立体化している時にも
ちゃんとウィンドウの内容が更新されるというものを実現したいのです。
WinXPのVisualStyle機能より下のレイヤーじゃないと駄目なのでしょうかね。

743 名前:740 :02/10/27 18:36
>>741
補足です。うまくいかなかったというのは、GetCommandLine()で取得できた値が、
取得したいプロセスのものではなくて、自分自身のものが返ってきてしまいました。

744 名前:デフォルトの名無しさん :02/10/27 18:58
>>743
フックはちゃんと DLL からやったよな?
あと、GetCommandLine() の値はどうやって自アプリに送ってる?

745 名前:741 :02/10/27 19:16
>>744
レス感謝です。フックDLL内のフックプロシージャ内でGetCommandLine()を呼んでます。
値は #pragma data_seg() で作成した共有領域を介して実行ファイルに渡してます。
フックプロシージャ内のGetCommandLine()の値をファイルに書き出しましたら、
侵入先プロセスの値ではなく実行ファイルのものが返ってしまってました。

746 名前:デフォルトの名無しさん :02/10/27 19:56
>>745
#pragma data_seg() は当然 DLL 内部だよね?
別プロセスと間違えて自分のプロセスを捕まえてるという事は無い?

あ、フックの種類は WH_CALLWNDPROC?
今 MSDN 見て気付いたんだけど、「WH_CALLWNDPROC フックを呼び出すのは、
メッセージを受け取ったスレッドではなく、SendMessage を呼び出したスレッド
のコンテキストです。」 だそうな。

747 名前:746 :02/10/27 19:58
あ、746 の MSDN の説明は Windows 95/98/NT3 だそうな。
NT4 以降はメッセージを受け取ったスレッドのコンテキストみたいだ。

748 名前:746 :02/10/27 20:00
相手のコンテキストが必要なら WH_CALLWNDPROC でなくて WH_GETMESSAGE?

749 名前:デフォルトの名無しさん :02/10/27 20:06
Win32APIをやるにはどうしたらいいですか?
何が必要ですか?

750 名前:デフォルトの名無しさん :02/10/27 20:09
Win32APIのソースを
コンパイルするにはどうするんですか?


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