Win32API 質問箱 Build6
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGやさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。
過去スレ
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/
Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/
Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html
参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html
0446デフォルトの名無しさん
NGNG0447デフォルトの名無しさん
NGNG追加しますと、Delphi では API レベルの細かなカスタマイズも簡単ですし、
たとえば MDI にもプロパティーをひとつ変更することです容易に対応できます
し、タブコントロールなどのコンポーネントも豊富にありますし、Delphi 自体で
コンポネントを作成して拡張できますし、ActiveX の取り込みもできます。
0448デフォルトの名無しさん
NGNG部品を他のプログラムからも利用したい
→VB、ATL、MFC、etc…汎用を目指す
→ActiveX
→Borland開発環境に限定してOK
→VCLコンポーネント
→C#、VB.NET、etc…マネージド言語から使えればいい
→.NETコンポーネント
→静的リンクできればそれでいい
→単にC++のクラスとして作る
えとせとら
0449デフォルトの名無しさん
NGNG検索はかけましたが相応しくないかもしれません。その際はご容赦ください。
最近フルカラー640*480で、D3DもDirectDrawも使わないのに高速半透明をするゲームが増えてきました
半透明というとDIBで1ドットずつ計算くらいしか思いつかないのですが、
こんな方法ではろくなスピードがでません(実際作りました)
あのゲームたちはどのような方法を使っているのでしょうか
VRAMを直接いじる方法は存在しなかったと思いますが…。
0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNGええ、もちろんです
CreateDIBSectionで関連づけて
ついでに透明度を256段階と決めて、1バイトでの混ぜ合わせテーブルをつくりました
120と64を、透明度128でまぜあわせたら92 などのテーブルです
3バイトの混ぜ合わせテーブルはつくるの不可能ですから…。
それを使ってforループでまわして書き換え
でもこれではそんなにスピードでないんですよ…
0452デフォルトの名無しさん
NGNGGDI+ ライブラリをつかってアルファブレンドしてるとか
0453442
NGNG>>445
>>447
Delphiに関してはまったく知識がないのですが、
どちらかというとコンポーネントを
「使う」のではなく「作る(再利用可能&汎用性あり)」方が主な目的です。
Delphiで作成したコンポーネントをVCに取り込むことは可能でしょうか?
>>448
>→VB、ATL、MFC、etc…汎用を目指す
目的としては汎用的なコンポーネントを目指したいなと考えています。
ActiveXが有力候補でしょうか?
ActiveXはやはりATLで作成するのが普通なのでしょうか?
>Borland開発環境に限定してOK
出来ればVC等MS系開発環境でも使用できる方がいいと考えています。
>→C#、VB.NET、etc…マネージド言語から使えればいい
現状マネージド言語(すいませんまだあまり理解していません)を使用している人が
自分の周りにいないので、普及度とかがよくわからないのですが・・・・
今後はその方向にむかっていくのでしょうか・・・
>→静的リンクできればそれでいい
一応動的なものを考えています。
0454デフォルトの名無しさん
NGNGそれはできません。ActiveX にすると良いのかも知れませんが面倒です。
Delphi のなかで使うのならラクチンですけど。
>> 出来ればVC等MS系開発環境でも使用できる方がいいと考えています。
こういう場合は、Delphi をおすすめいたしません。
しかし、言語や開発環境は道具です。良いものをなるべく容易に迅速に
つくれるのなら、道具にこだわるべきではないとも思うんですが。
0455デフォルトの名無しさん
NGNG> 今後はその方向にむかっていくのでしょうか・・・
これはいまのところ誰にもわからないのではないでしょうか。
もし、否定/肯定いずれでも断言する方がいたとしても
現状では信じない方が無難です。
0456デフォルトの名無しさん
NGNG一応DelphiでもActiveXは作れるので、その機能を用いて
ラッパーを一枚噛ませればできますけどね。
でも、素直にATLの方がいいかも(って僕はATL知りませんけれど)
作ったコンポーネントを、どういう風に活用するつもりですか?
それがわかれば絞れるかも。
0457デフォルトの名無しさん
NGNG単にお前がヘボなだけ
0458名無し@沢村
NGNG初歩的なところでつまずいているのでぜひ教えてください♪
それはmidiファイルに保存するとき、音色指定で、
32 の Guitar harmonics まではプレイヤーで聞いてみると音が出るのですが、
33 の Acoustic Bass 以降の音は出ないのですよ。
バイナリエディタで開いてみると、33 の Acoustic Bass 以降の音を指定した場合、
どうもファイルがこわれているようなのですよ…?
皆様方、これは一体どういうことなのでしょうか?
32 の Guitar harmonics までと33 の Acoustic Bass 以降とでは音色の指定の仕方が違うのでしょうか?
ちなみにMidiOutShortMessageでは同じように指定して同じように音が出るのですが…?
ぜひ教えてください!!
0459デフォルトの名無しさん
NGNGゲームは画像ファイルにアルファデータくっついてることが多いので
>>449が言ってるゲームもアルファ合成じゃないかと思います。
んで、以前アルファデータについて検索かけたとき
intelのパフォーマンスライブラリ(Image Processing Library)が引っかかりました。
http://www.intel.co.jp/jp/developer/software/products/perflib/ipl/index.htm
intelがMMX以降のPentium系CPUの実力を発揮させるために作ったライブラリのようです。
これ使ってみてはどうでしょう?
現在、本家英語サイトはIPPβ3.0に吸収されたようでIPLのページがありませんでした。
0460デフォルトの名無しさん
NGNGへぼいのでこの程度の方法しか思いつかないのです。
よろしかったらご教授をお願いいたします。
ループ部分をアセンブラで書くことによって、1.5倍程度の処理速度UPはできましたが、
それでもゲームでリアルタイムに使うのはきつかったです。
>>459
αデータつきの画像というと、DDSなどのD3D用画像が思いつきます。
でもとりあえずWin32APIにはαブレンディング合成の関数は存在しませんよね。
おもしろいライブラリを教えていただきありがとうございます。
Intel系PCのみの動作となっていますが、研究する価値はありそうですね。
近くまとまった休みがとれたら使用して報告させていただきます。
<->
自前で高速αブレンディング合成を作成された方、アルゴリズムをご存知の方、解説サイトを
ご存知の方がいらっしゃいましたらご一報くださると幸いです。
0461デフォルトの名無しさん
NGNG大変申し訳ありません。
GDIにAlphaBlend()という関数が存在するのですね。
Win98以降のみサポートだそうです。
抜き色転送もめんどうなBitBltくらいしかないので、そんなものはあるはずないと
決め付けておりました。
近く実験を行い報告させていただくことでおわびとさせていただこうと思います
スレ汚し失礼いたしました
0462デフォルトの名無しさん
NGNG結局内部ではCPUでシコシコやってんじゃないの?
俺もDIBで32ビット処理とか一応やってるけどMMX使うくらいしか思いつかないな。
アセンブラで組んでるとこにMMXまだ使ってないのなら適用してみれ。
実験するんなら事後報告よろしく>>461
0463デフォルトの名無しさん
NGNGメインスレッドからPostThreadMessageして
ワーカースレッドでGetMessageする場合
ワーカースレッドをコールバック関数にしたりする必要ありますか?
あとワーカースレッドにメッセージキューを実装しなければならない
というようなことがMSDNに書かれていたのですが
具体的にどういう事なんでしょうか?
0464デフォルトの名無しさん
NGNGDelphi氏ランなら
BorlandC++Builder使ったら?
言語がC++だから
簡単に入れると思うよ。
>DIBで重い言ってる
バックバッファとしてDIB作って
普通にCでソフトウエアレンダリングして
それをBitBltしてるだけでも、結構な速度が出ますよ。
そりゃSIMD使うともっと速くなるけど。
普通に640x480 8bit で、
画面全体を塗りつぶすだけ
for(i=0;i<(640*480);i++)p[i]=255; // わざと遅く書いた。
で
余裕で60fps切るようだったら、DIB生成かBitBltあたりに何か問題があると思う。
0465デフォルトの名無しさん
NGNG8bitならかなり速いです。
あらかじめ合成用のテーブル持てるし。
問題は16や32なわけでして
早く家に帰ってためしたいです。はい…
0466デフォルトの名無しさん
NGNG> 使ったことないから知らんけどAlphaBlend()つっても
> 結局内部ではCPUでシコシコやってんじゃないの?
アクセラレーションが有効ならドライバが直に実行するんでない?
0467名無し@沢村
NGNG初歩的なところでつまずいているのでぜひ教えてください♪
それはmidiファイルに保存するとき、音色指定で、
32 の Guitar harmonics まではプレイヤーで聞いてみると音が出るのですが、
33 の Acoustic Bass 以降の音は出ないのですよ。
バイナリエディタで開いてみると、33 の Acoustic Bass 以降の音を指定した場合、
どうもファイルがこわれているようなのですよ…?
皆様方、これは一体どういうことなのでしょうか?
32 の Guitar harmonics までと33 の Acoustic Bass 以降とでは音色の指定の仕方が違うのでしょうか?
ちなみにMidiOutShortMessageでは同じように指定して同じように音が出るのですが…?
ぜひ教えてください!!
0468デフォルトの名無しさん
NGNG音源はなに?
0469デフォルトの名無しさん
NGNG0470名無し@沢村
NGNG板違い ではありませんぞ。
素で音色をならすときは、WinAPIのMidiOutShortMessageを使ってますし、
ファイルに書き込むときは、同じくWinAPIのWrightFileを使ってますから…。
>>468
それが私は音源にうとく、音源が何かはわからないのですよ…。
ただファイルが壊れることと、音源とはあまり関係なさそうに思うのですが…。
0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNGCDの自動再生機能でhtmlを表示したいのですが、
「標準のブラウザ」で開くにはどうすればいいのでしょうか?
open=IEXPLORE.EXE ***
ではネスケ等に対応できません。
ShellExecute()させるだけの実行ファイルを作るといのが考えられますが。
ヨロシコ
0473デフォルトの名無しさん
NGNG試してみたいけど過去スレに実質WinMe/2000以降限定とか書いてあるから
俺の環境じゃ試せねー。
まあ実際問題としてOS限定するなら使いづらいAPIだな。少なくとも俺は使いたくない。
0474名無し@沢村
NGNGそう、わかった部分だけでとりあえずつくって、新しいことがわかるたびに機能をつけたす。
0475デフォルトの名無しさん
NGNG俺は必要になったら使うだろうなあ。
家のPC、2000とXPだし。
0476デフォルトの名無しさん
NGNGopen=rundll32.exe url.dll,FileProtocolHandler index.html
0478名無し@沢村
NGNG初歩的なところでつまずいているのでぜひ教えてください♪
それはmidiファイルに保存するとき、音色指定で、
32 の Guitar harmonics まではプレイヤーで聞いてみると音が出るのですが、
33 の Acoustic Bass 以降の音は出ないのですよ。
バイナリエディタで開いてみると、33 の Acoustic Bass 以降の音を指定した場合、
どうもファイルがこわれているようなのですよ…?
皆様方、これは一体どういうことなのでしょうか?
32 の Guitar harmonics までと33 の Acoustic Bass 以降とでは音色の指定の仕方が違うのでしょうか?
ちなみにMidiOutShortMessageでは同じように指定して同じように音が出るのですが…?
ぜひ教えてください!!
0479デフォルトの名無しさん
NGNG> 皆様方、これは一体どういうことなのでしょうか?
ファイルが壊れているのなら、MIDIうんぬんではなく
ファイル(またはメモリ)操作にバグがあるということでしょ。
0480デフォルトの名無しさん
NGNG0481デフォルトの名無しさん
NGNG素直にやねうらお氏のWebページか書籍を読むべし。
0482デフォルトの名無しさん
NGNGいいかげんにコピペやめれ
0483デフォルトの名無しさん
NGNGHDD,CD-ROM、リムーバブルなどです。
ボリューム名の取得ならわかるのですが。。。
0484デフォルトの名無しさん
NGNG0485デフォルトの名無しさん
NGNGいいのでしょうか?
長時間何も入力がなくても画像を提示し続けるプログラムを作りたいのですが。
SystemParametersInfo() の SPI_SETPOWEROFFACTIVE を試してみたら
正常終了したという返事が返ってくるにも拘わらず電源は切れてしまいます。
これはうちのマシンだけの現象なのでしょうか?
どなたか教えてください。環境はWindows98および2000です。
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNGWin98ならレジストリのHKEY_LOCAL_MACHINE\Enum辺りに記録してある。
あとSCSIならInquiryコマンド使うとか。
0488デフォルトの名無しさん
NGNGエクスプローラで表示されてるものと同じものが得たいならSHGetFileInfo()
0489デフォルトの名無しさん
NGNG例えば、winuser.hの以下の部分。
WINUSERAPI HWND WINAPI CreateWindowExA(…);
WINUSERAPI HWND WINAPI CreateWindowExW(…);
#ifdef UNICODE
#define CreateWindowEx CreateWindowExW
#else
#define CreateWindowEx CreateWindowExA
#endif // !UNICODE
なぜ、#defineでやってしまうのでしょうか?こうすると
MyClass::CreateWindowEx(…);
などがまともにコンパイルされないではありませんか!
これをせめて
WINUSERAPI HWND WINAPI CreateWindowEx(…)
{
#ifdef UNICODE
return CreateWindowExW(…);
#else
return CreateWindowExA(…);
#endif // !UNICODE
}
等とやってくれればまだ使い物になると思うのですが、どうでしょう?
このようなヘッダがどこかに存在するということはないでしょうか?
0490デフォルトの名無しさん
NGNGとりあえず引数も正確に書いてみろや。
0491デフォルトの名無しさん
NGNGハア?
0492デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNG> ハア?
とか言ってる暇合ったら、>>490 の言うように CreateWindowExW() と CreateWindowExA() の引数の型をちゃんと書いてみなよ。
あんたの書いてる CreateWindowEx() の引数をどうすればいいか悩むと思うから。
0494デフォルトの名無しさん
NGNGハア?
WINUSERAPI HWND WINAPI CreateWindowEx(
#ifdef UNICODE
…
#else
…
#endif
)
{
…
}
0495デフォルトの名無しさん
NGNGハア?
WINUSERAPI HWND WINAPI CreateWindowEx(
DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName,
DWORD dwStyle, int X, int Y, int nWidth, int nHeight,
HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam)
{
…
}
0496デフォルトの名無しさん
NGNGlccやmingwのヘッダはそうなってるけど
それだと#define UNICODEして明示的にANSI版を呼び出したいとき
(あるいはその逆)ではまる罠
0497デフォルトの名無しさん
NGNG> (あるいはその逆)ではまる罠
CreateWindowExWかCreateWindowExAを呼べばいいだけ。
0498デフォルトの名無しさん
NGNGププッ、やっとわかったか。
で、あんたの方法だとラップ関数を経由するから、それが嫌だったんだろ。
0499デフォルトの名無しさん
NGNG実体はLibファイルにでも入れて、それを切り換える方がいいかも。
0500デフォルトの名無しさん
NGNG> ププッ、やっとわかったか。
( ´,_ゝ`) プッ
自分の勘違いは素直に認めた方がいいよ。
0501デフォルトの名無しさん
NGNG> 自分の勘違いは素直に認めた方がいいよ。
それ >>494 に言ってんの ?
>>489 で引数書かなかったのは、不問にしても、>>490 に対して「ハァ?」って返した時点で、勝負決まったと思うけどね。
慌てて、>>494 書いたかと思ったら、逆切れですか ?
0502494
NGNG省略した引数の部分を書いてみろと言われたので
書きましたが、それがどうかしました?
で、書いたはいいが、その後はどうなったんでしょう。
是非ともアドバイスを承りたいんですが。
0503489 ◆CPP8mJMMbA
NGNG>>492
そうなんですよ。せめて#defineじゃなければ名前空間を分けて衝突は避けられるんですけど。
>>494-495
私も最初は全てそのように書き換えようと考えました。それこそ全てのヘッダまで。
定数の#defineも含めて。ただ、そこまでの労力が…
かと言ってその場で必要なものだけ宣言しなおすのも癪でして(^^;
>>496さんが仰っている状況に関しては、私も>>497さんのような解決方法でよいと思います。
lccやmingwからヘッダだけ抜き出して他の環境で、ってのはアリなんでしょうか?
>>499
確かにヘッダに定義を入れるのは気持ち悪いところですが…
0504デフォルトの名無しさん
NGNG> 省略した引数の部分を書いてみろと言われたので
> 書きましたが、それがどうかしました?
で、>>491 はどうなったん ? 都合の悪いところは、無視ですか ?
> で、書いたはいいが、その後はどうなったんでしょう。
> 是非ともアドバイスを承りたいんですが。
>>498 で、デメリット書いてますが必死すぎて見えてないのね。
0505デフォルトの名無しさん
NGNG0506デフォルトの名無しさん
NGNG反論できなくなった時の、逃げ口上...
0507デフォルトの名無しさん
NGNG0508デフォルトの名無しさん
NGNGププッ、それしか書けないんならもうやめたら ? ちょっとカッコ悪いよ。
それとも、>>504 に対してなんか言うことある ?
0509494
NGNG491って何の話ですか? 私は494ですが491ではありません。
> >>498 で、デメリット書いてますが必死すぎて見えてないのね
↓これのことですかね。
> で、あんたの方法だとラップ関数を経由するから、それが嫌だったんだろ。
必死以前に、これは
省略した引数をすべて書いてみることと
何のつながりがあるんでしょう?
引数を書けと言った意味がまずわからないのですが。
それと、「ラップ関数を経由するから嫌」なんて
質問者さんはそんな事書いてませんよね。
勝手に妄想されたのでしょうか?
納得のいくアドバイスをお願いします。
0510デフォルトの名無しさん
NGNGえ?
0511デフォルトの名無しさん
NGNG0512494
NGNGあれ? 意味が伝わりにくかったでしょうか。
まずは「引数を省略せずに書いてみる」というアドバイスに
どういう狙いがあったのかを教えてください。お願いします。
ちなみに >>493では
> あんたの書いてる CreateWindowEx() の引数をどうすればいいか悩むと思うから。
とありますが、どの辺で悩んでいいのかわかりませんでした。
0513デフォルトの名無しさん
NGNGPen3 850MHz Win2kによる実験ができましたので、報告させていただきます。
世の中に計測ページは沢山ありますけどね(^^;
・24bitBMP
・1〜3はCreateDIBSectionで領域を確保。全て640*480
・4はmallocで領域を確保
・5はCreateCompatibleBitmapで領域確保
<1>
BitBltで背景を描画
テーブルを参照して半透明画像を重ねあわせ
透明色指定に基づき、1ドットずつ色を調べて指定されたものなら転送しない
(今回は指定しておいたものの、画像内にその色は一度もでてきません)
<2>
1の透明色指定できないバージョン(if文がない分だけ速い)
0514デフォルトの名無しさん
NGNG<3>
BitBltで背景を描画
画像重ね合わせのところをアセンブラで
テーブル参照ではなく、素直に計算する
<4>
memcpyで背景転送
画像重ね合わせのところをアセンブラで
テーブル参照ではなく、素直に計算する
<5>
BitBltで背景を描画
画像重ね合わせのところをAlphaBlendで
<1>21.085ms
<2>20.187ms
<3>13.417ms
<4>13.691ms
<5>速すぎ
何度やっても4のほうが3より遅い。
純粋にメモリー書きかえしかしていない4の方が早そうなものなんですが…。
0515デフォルトの名無しさん
NGNGかなり参考になりますね。
でもちょっと気になったことがひとつ。
やねうらお氏がさらりと
>16bpp(RGB555,565)の半透明(α3bit)でWORDテーブル持ってます。
>だもんで、半透明もバリバリ速いです。(16bppのときだけ^^;)
とおっしゃっているのですが、意図するところが読めないのです。
馬鹿な私は即座に
((1 + 65536) * 65536 / 2)通りのテーブルなんて持てるわけねぇ(;´Д`)
と思ってしまったのですが、やねうらお氏の言うテーブルとはどんなものなのでしょう。
目を通しても「テーブルを持っています」としか書かれていなかったので…。
思いつくものがあったら、教えていただけると嬉しいです。
0516デフォルトの名無しさん
NGNG> 491って何の話ですか? 私は494ですが491ではありません。
あっそ、まあどうとでも言えるから。違うって言うなら、一応そう思っとくよ。
> 引数を書けと言った意味がまずわからないのですが。
>>489 は、少なくとも CreateWindowExA() と CreateWindowExW() の引数の違いは考慮してないから、それを考慮しなよ。って言う意味だよ。
> それと、「ラップ関数を経由するから嫌」なんて
> 質問者さんはそんな事書いてませんよね。
だって気付いていさなそうだからね。
> 勝手に妄想されたのでしょうか?
妄想 ? 具体的なデメリットがわかってないの ?
0517デフォルトの名無しさん
NGNGいやだからLPTSTRとかがLPWSTRとかに展開されちゃっててはまるの
説明めんどくさいからどうでもいいや
0518494
NGNG> >>489 は、少なくとも CreateWindowExA() と CreateWindowExW()
の引数の違いは考慮
> してないから、それを考慮しなよ。って言う意味だよ。
考慮していないのでなく、重要でないから
省略しただけとかもしれませんよね。
まあ仮に考慮してなかったとしましょう。
アドバイスの通りそれを考慮して書いてみました。
で、結局どんな進展があったのでしょうか?
ラップ関数を経由する話とどうつながっていくのでしょう?
> 妄想 ? 具体的なデメリットがわかってないの ?
妄想と書いたのはラップ関数のデメリットの話ではなく、
そのような意図の質問ではないということです。
同じことを書きますが、
> で、あんたの方法だとラップ関数を経由するから、それが嫌だったんだろ。
質問者は名前の衝突等を気にしているのであって
「ラップ関数を経由するから、それが嫌」なんてことは
書いていませんね。妄想でしょうか?
0519デフォルトの名無しさん
NGNG> だって気付いていさなそうだからね。
お前、言ってることがハチャメチャだぞ
0520デフォルトの名無しさん
NGNG> 考慮していないのでなく、重要でないから
> 省略しただけとかもしれませんよね。
それがダメだって言ってるの。まだわからない ?
> で、結局どんな進展があったのでしょうか?
> ラップ関数を経由する話とどうつながっていくのでしょう?
一つヒントをあげよう。
引数が違うと言うことは、別の関数が必要と言うことだよ。
> 質問者は名前の衝突等を気にしているのであって
> 「ラップ関数を経由するから、それが嫌」なんてことは
> 書いていませんね。妄想でしょうか?
あんた、ヴァカじゃないの ?
衝突を気にするからと言って、>>489 みたいなこと (=ラップ関数を作る) やると、余計面倒だ (=デメリットがある) 。って言ってんだよ。
>>489 が書いてないのは、気付いてないからだと思うよ。
で、デメリットはわかったの ? それとも、>>494 みたいに書けば全て解決と思ってるの ?
0521デフォルトの名無しさん
NGNG0522489 ◆CPP8mJMMbA
NGNGあっ、確かに…もっと手前の方で#ifdefとtypedefを山ほどかまして何とかなりませんかねぇ…
他にもラップ関数を使った場合には、
・ヘッダ内に関数定義が入る
・関数呼び出しオーバーヘッドがかかる(インラインじゃだめかなぁ)
・引数の違う場合、違いの吸収が面倒くさい
って感じになるんでしょうか。(他にも思いついたら列挙お願いします)
このくらいの範囲ではデメリットを考えましたが、後はそれと名前の衝突を
天秤にかけるしかないですかね…
0523494
NGNG> 一つヒントをあげよう。
> 引数が違うと言うことは、別の関数が必要と言うことだよ。
実体が2つ必要になるが同じ関数名では実体を2つは
作れないということでしょうか?
が、それだと引数を書かせることとは関係がないので
外れですかね?
ちょっとわからないのでヒントでなく具体的に
教えていただけないでしょうか。
> で、デメリットはわかったの ?
> それとも、>>494 みたいに書けば全て解決と思ってるの ?
デメリットは承知しているつもりです。
が、何度も言ってるように、その話をしているわけではありません。
> >>489 が書いてないのは、気付いてないからだと思うよ。
そうですか。ということは、上で書かれた
> で、あんたの方法だとラップ関数を経由するから、それが嫌だったんだろ。
というのは妄想だったということでよろしいですね。
0524493
NGNG> 他にもラップ関数を使った場合には、
と言うか、CreateWindowExA() と CreateWindowExW() の引数が違うと言うことは、ラップ関数の引数も必然的に変える必要があると言うこと。
つまり、ラップ関数も二種類持つしかない。で、
> ・ヘッダ内に関数定義が入る
と言うのが一番問題だと思う。
CreateWindowEx() をグローバルにすると当然複数ファイルにインクルードされたら二重定義になるし、static にすると、実体を複数個持つこととなる。
CreateWindowEx() だけならまだいいかもしれないけど、他にも色々あるしね。
まあ、メモリーも安いからそれでもいいやって言う人もいるかもしれないけど、あまり誉められた設計じゃないよね。
ちなみに、もし CreateWindowExA() と CreateWindowExW() の引数が同一なら、その関数はライブラリに入れて、実行時に CreateWindowExA() か CreateWindowExW() に振り分けることもできる。
だから、引数が同一かどうかはかなり重要。
0525493
NGNG> 実体が2つ必要になるが同じ関数名では実体を2つは
> 作れないということでしょうか?
> が、それだと引数を書かせることとは関係がないので
> 外れですかね?
引数が一緒だったら、ラップ関数の実体は一つにする (=ライブラリに入れておく) ことができるよ。
そんなこともわからないの ?
0526489 ◆CPP8mJMMbA
NGNG「C++向けに#defineを極限まで減らしたヘッダ激しくキボンヌ( ゚ρ゚)」
とでも要望出してみるかなぁ…
無視されるだろうなぁ…MSだし…
0527デフォルトの名無しさん
NGNG自分で書くという発想は無いのですか ?
0528494
NGNG> 引数が一緒だったら、ラップ関数の実体は一つにする (=ライブラリに入れておく) ことができるよ。
すみませんが、意味がよくわかりません。
名前も引数も同じ関数の実体を1つにできるんでしょうか?
(ちなみに、私が書いた実体というのはライブラリ単位の
話ではありません)
0529リバーコントロール?
NGNGツールバー"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 しているだけの自作関数です
0530リバーコントロール?
NGNGこれではレバー帯が2本ともまったく表示されません。
どちらか片方の帯に マスク RBBIM_CHILDSIZE と rebarbandinfo.cyMinChild = xx を足すと2本とも表示されました。
しかし、ツールバー帯のサイズが合わなくて困ってます。
同様に両方に足した場合、帯のサイズはどちらも最初に指定した帯の方のサイズになってしまいます。
こっちは更に問題で、ボタンが帯のサイズと合ってくれません。
そこで質問です。
�@帯を2本用意したときに、サイズをそれぞれ別管理できますか?
�Aツールバーのサイズに合わせて帯サイズを変更する方法はありますか?
�Bツールバーボタンのサイズを得る方法はありますか?
0531デフォルトの名無しさん
NGNG>>524 は、見てくれてる ?
> 名前も引数も同じ関数の実体を1つにできるんでしょうか?
名前も引数も同じなら、実体は一つでいいでしょ ?
もちろん機能が違うから、内部で実行時に振り分ける必要があるけどね。
でも、実体が一つでいいということはライブラリに入れることができるから、>>524 に書いた「ヘッダ内に関数定義が入る弊害」を避けることができる。
また、lcc とかは、引数の型の定義変えることでヘッダファイル上は同一に見せてるけど、これも実体は一つにはできない。
更に、>>517 の問題もあるしね。
とにかく、>>526 もそうだけど、一度実装してみればいろいろわかっていいと思うよ。
マイクロソフトの技術者だってヴァカじゃないんだからさ。
0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNG指定された座標のピクセルの RGB(赤、緑、青)値を取得します。
COLORREF GetPixel(
HDC hdc, // デバイスコンテキストのハンドル
int nXPos, // ピクセルの x 座標
int nYPos // ピクセルの y 座標
);
0535533
NGNG0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNGスレッドが実行している関数内部で一切メッセージにタッチしてなくても
WM_QUITが来ると勝手に閉じちゃったりするんですか?
ウィンドウプロシージャでESCが押されたか判断して終了するプログラムなんですが
ESCが押された時点でスレッドから応答が無くなるのか、ビジー状態でフリーズしてしまいます
コードの流れは以下のような感じ
_beginthreadex
CreateWindowEx
message loop
{
//WM_QUITが来たらbreak
do something
}
//ここでフリーズ(WaitForSingleObjectまで到達していないのに...)
いろいろ終了処理
WaitForSingleObject
CloseHandle
return 0;
0538デフォルトの名無しさん
NGNG> WM_QUITが来ると勝手に閉じちゃったりするんですか?
んなこたあない。
ところでこれは別スレッドでCreateWindowしてるの?
よくわからない。
0539デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/win/1021192107/
0540デフォルトの名無しさん
NGNGたぶん標準の機能では出来ない。
『Best of MSJ Vol.8 ワンポイントレッスン 最新プログラミングテクニック』の
1069p に解決策が載っている。
0541デフォルトの名無しさん
NGNG・この時は一番高いBarにあわせる(例:20px)
| bar1 | bar2
・この時はbar2は高さを変える(bar1:20px、bar2:16px)
| bar1
| bar2
0542デフォルトの名無しさん
NGNG別スレッドではメッセージキュー越しに文字列を受け取って
ファイルに書き出しているだけです
メインスレッド
_beginthreadex;
ウィンドウ作る;
メッセージループ開始
{
WM_QUITでbreak;
}
メッセージループから抜けた事を別スレッドに知らせる(PostThreadMessage);
ワーカースレッドへ終了メッセージを送る(PostThreadMessage);
WaitForSingleObjectしてから、終了処理;
お終い
ワーカースレッド
メッセージキューを作る;
終了メッセージが来るまでループ
{
文字列を受け取ってファイルへ書き出す(GetMessage);
}
_endthreadex;
お終い
こんな流れなんですが、メインスレッドのメッセージループを抜けたところで
ビジー状態から抜け出せなくなります
ところが、原因究明の為にデバッガでループ終了からずんずんトレースしていったら
なんと完走してしまいした・・・まったくもって意味不明です
0543542
NGNG思い切って直接起動したら完走しました・・・
デバッガのバグなんですかね?
0544デフォルトの名無しさん
NGNG99%プログラムのバグ。
0545542
NGNGつまり「デバッガで起動した場合ハングアップしてしまうバグ」を作り込んだということでしょうか・・・?
「実行に時間がかかりすぎるとハングアップしてしまうバグ」かな
初心者がマルチスレッド関係いじくると良くあるバグなんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています