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


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

Win32API質問箱 Build50
251 名前:デフォルトの名無しさん :2007/02/23(金) 19:27:18
TFormってことはVCLも使ってるだろうになんでわざわざそんなめんどくさいことを
SealIn->ItemIndexじゃいかんのか

252 名前:デフォルトの名無しさん :2007/02/23(金) 19:30:21
>>251
Win 32 SDK板ですからね

253 名前:デフォルトの名無しさん :2007/02/23(金) 19:33:33
>>251
私も思ったけど、たぶん練習じゃないかなと思った
メッセージってどんな感じ?みたいな
私も昔やったことある

254 名前:デフォルトの名無しさん :2007/02/23(金) 23:24:49
必要な場合だけ AllocConsole を使って動的にコンソールを割り当てた。
そんで GetStdHandle で標準入力のハンドルをもらった。
このとき、標準入力に入力があったことを WaitForMultipleObjects で
通知してもらうことってできる?
標準入力とともに他のハンドルのシグナル状態も検出したいのです。


255 名前:デフォルトの名無しさん :2007/02/24(土) 00:41:46
シミュレーション作ってるんですが
スクロールバーを動かしてる時に
処理が止まらないようにする方法はありますか?

256 名前:デフォルトの名無しさん :2007/02/24(土) 00:55:05
マルチスレッドで描画と計算を分けるのは前提だよな。

257 名前:デフォルトの名無しさん :2007/02/24(土) 08:19:25
>>255

>>256氏が言っている様に、
シミュレーション側とGUI周り側を切り分けて、
プログラムをマルチスレッド化するべきかもね。

CreateThread関数、
WaitForSingleObject関数、WaitForMultipleObjects関数あたりを見てみ。

258 名前:デフォルトの名無しさん :2007/02/24(土) 09:16:35
>>254
コンソール入力を待てると書いてあるし、
http://msdn.microsoft.com/library/ja/jpdllpro/html/_win32_waitformultipleobjects.asp
読み取られていない入力があったときにシグナル状態になると書いてあるし、
http://msdn2.microsoft.com/en-us/library/ms686364.aspx
平気だろう。

259 名前:デフォルトの名無しさん :2007/02/24(土) 17:58:00
扶桑社から12月号 
http://www.microsoft.com/downloads/details.aspx?FamilyID=94596af5-cc58-45af-a14b-df627a31e783&DisplayLang=ja


260 名前:デフォルトの名無しさん :2007/02/24(土) 20:36:30
どなたか助けてください。

Windows アプリケーションを作成していて、
http://home.earthlink.net/~barnold2002/Acgnj/Csig0204.htm
ここの方法でコンソールを割り当てて、その上で、

    while (1) {
        char buf[256];
        fgets(buf, 200, stdin);
        fputs(buf, stdout);
    }

のようなコードを書いたんですが、
コンソールで高速にキーボード入力して Enter を押すと、
入力していない 'T' という文字が、コンソールの行の先頭に表示されるんです。

なぜこんなことになるのでしょうか?

261 名前:デフォルトの名無しさん :2007/02/24(土) 20:52:49
char buf[0x100];
while(1){
fgets(buf,200,stdin);
fputs(buf,stdout);
}

262 名前:デフォルトの名無しさん :2007/02/24(土) 20:57:14
やってみたけど、変わらないですよ。

263 名前:デフォルトの名無しさん :2007/02/24(土) 21:07:19
>>260
ふしぎだね。

四角形になるRFGTでRFGを同時押しすると
Tも押したことになってしまうタイプのキーボードとか。
んなこたーねーか

264 名前:デフォルトの名無しさん :2007/02/24(土) 21:09:51
呪われておる

265 名前:デフォルトの名無しさん :2007/02/24(土) 21:42:40
>>260
必ず’T’なのか?
>コンソールで高速に
知らず押しちゃってるってことない?

266 名前:デフォルトの名無しさん :2007/02/24(土) 21:48:10
uhihigd(ここでEnter)
Tuhihigd
こんな感じになるってこと?

267 名前:デフォルトの名無しさん :2007/02/24(土) 21:48:55
押してないよ。T がよく出るんだけど、さっきやったら ] も出てきた。
z x c v をがちゃがちゃとランダムに押しながら、
ときどき Enter を押すと、20回に1回ぐらいの割合で出てくる。

268 名前:デフォルトの名無しさん :2007/02/24(土) 21:50:01
>>266
そう!そんな感じ!

269 名前:デフォルトの名無しさん :2007/02/24(土) 21:51:14
それはそのプログラムだけで発生するわけ?

270 名前:デフォルトの名無しさん :2007/02/24(土) 21:52:21
キーボードってさ、
キーの数だけ配線が二本ずつあるのではなくて
一本は横一行で共有
もう一本は縦一列で共有
同時押しがあると見分けつかないから
昔のキーボードでは良く起きた。

271 名前:デフォルトの名無しさん :2007/02/24(土) 21:53:04
>>270
とおもう。

272 名前:260 :2007/02/24(土) 21:53:48
VC 2005 + SP1 を使っています。

ウィザードから普通のコンソール アプリケーションを作成して
同じようなプログラムを作成しても、このようなことは起きないんです。

Windows アプリケーションを作成して、動的にコンソールを作成すると
このような現象が出てくるんです。

別の人のマシンでも再現したので、私のマシンの問題ではないと思う。
(両方のマシンとも Dell 製だが、機種は違う。)


273 名前:デフォルトの名無しさん :2007/02/24(土) 21:57:35
ソース見てみたい

274 名前:260 :2007/02/24(土) 22:19:59
>>273
いや >>260 に書いたとおりなんですけど。。。
あのサイトのコードを使ってコンソールをセットアップして、
その後で fgets . fputs を繰り返すループを書くだけです。


275 名前:デフォルトの名無しさん :2007/02/24(土) 22:24:38
じゃあWindowsかVCの不具合なのかもな

276 名前:デフォルトの名無しさん :2007/02/24(土) 22:36:09
260を見て思ったんだが、FILE構造体同士の代入ってやっていいのか?
freopen("con", "w", stdout);とか
(またはconの代わりにCONOUT$など)では駄目か?

277 名前:デフォルトの名無しさん :2007/02/24(土) 22:45:56
>>276
もし俺がやるとしたら俺も>>276のほうだな

278 名前:260 :2007/02/24(土) 22:50:59
直った!下記のコードでうまくいった!ありがとう!

freopen("con", "r", stdin);
freopen("con", "w", stdout);
freopen("con", "w", stderr);


279 名前:デフォルトの名無しさん :2007/02/24(土) 23:19:32
質問です

gethostnameとgethostbynameを利用してローカルIPは取得できたのですが、
グローバルIPはAPIで取得できるのでしょうか?

280 名前:デフォルトの名無しさん :2007/02/24(土) 23:21:38
[グローバルIP]がブロードバンドルータに付いているものを指すなら、
UPNPでとるとか、実際の通信相手からpeernameを戻してもらうしかない。

281 名前:デフォルトの名無しさん :2007/02/24(土) 23:33:46
>>280
やっぱりAPIで楽はできないですかorz
ご助言ありがとうございました。

282 名前:デフォルトの名無しさん :2007/02/24(土) 23:49:20
XPに限定してもいいならUPnPを操作するAPIがあったはず

283 名前:デフォルトの名無しさん :2007/02/24(土) 23:54:40
>>270
ダイオードあげる

つ ─━─

284 名前:デフォルトの名無しさん :2007/02/24(土) 23:58:24




285 名前:デフォルトの名無しさん :2007/02/25(日) 00:17:51
Win32_PingStatusじゃ無理か?

286 名前:デフォルトの名無しさん :2007/02/25(日) 00:20:36
>>270
実際には横一列、縦一列じゃなくてばらばらに設定されてる
1本回路が死んだら横1列、もしくは縦1列全滅だからな
それ防ぐため

らしい

287 名前:デフォルトの名無しさん :2007/02/25(日) 00:27:04
>>283 >>284
そうだね!

288 名前:デフォルトの名無しさん :2007/02/25(日) 08:15:54
プロテインだね!!

289 名前:デフォルトの名無しさん :2007/02/25(日) 10:18:14
VC では open_osfhandle を呼び出すことで OS のファイルハンドルから
ファイル記述子に変換することはできますが、
逆に、ファイル記述子から OS のファイルハンドルを取得するには
どうしたらよいでしょうか。

290 名前:デフォルトの名無しさん :2007/02/25(日) 10:20:39
_get_osfhandle


291 名前:デフォルトの名無しさん :2007/02/25(日) 11:47:14
フォルダやファイルを、どのアプリケーションが開いているか確認する方法はないですか。

292 名前:デフォルトの名無しさん :2007/02/25(日) 12:02:20
Process Explorerにそんな機能があったな。

293 名前:デフォルトの名無しさん :2007/02/25(日) 12:07:50
ProcessExplorerそんな機能ないだろ
単にモジュール列挙じゃない?

294 名前:デフォルトの名無しさん :2007/02/25(日) 12:18:26
Unlockerにはそういう機能がある。

295 名前:デフォルトの名無しさん :2007/02/25(日) 12:19:54
FindメニューのFindHanlde or Dll
ってそういうものだと思ていたが。

296 名前:デフォルトの名無しさん :2007/02/25(日) 13:02:30
FileMon じゃねーの?

297 名前:デフォルトの名無しさん :2007/02/25(日) 13:50:48
Handleは?

298 名前:デフォルトの名無しさん :2007/02/25(日) 14:00:11
c:\windows\system32\openfiles.exeは?

299 名前:デフォルトの名無しさん :2007/02/25(日) 14:01:36
OH.EXEは?

300 名前:デフォルトの名無しさん :2007/02/25(日) 14:23:48
http://www.atmarkit.co.jp/fwin2k/win2ktips/306openfiles/openfiles.html
これか

301 名前:デフォルトの名無しさん :2007/02/25(日) 15:58:29
あれ、WindowsXPなのに、openfiles.exeがない!

302 名前:デフォルトの名無しさん :2007/02/25(日) 15:59:12
なんだプロだけかよ…

303 名前:デフォルトの名無しさん :2007/02/25(日) 18:28:59
うんにゃ、サーバにもありんす

304 名前:デフォルトの名無しさん :2007/02/25(日) 19:26:06
regmon.exe どっかにないの?

305 名前:デフォルトの名無しさん :2007/02/25(日) 20:51:13
Process Monitorでレジストリの監視もできるだろ
と言いたいところだがLog Bootの機能がなくなってる。
Vistaで起動時のレジストリアクセスを調べるにはどうしたらいいんだ

306 名前:デフォルトの名無しさん :2007/02/25(日) 21:27:17
バイナリデータ(AA00CCDD0Aとか)を文字に変換かけるAPIとかってありますか?

307 名前:デフォルトの名無しさん :2007/02/25(日) 21:41:56
wsprintf

308 名前:306 :2007/02/25(日) 21:46:41
wsprintfでできるんだっけ?
補足するとバイナリファイルを16進表記で表示させるプログラムを作りたいんだが。

バイナリで読み込んだものをwsprintfA(..."%X"...);でやるとおかしくなった気がします。
何かの間違いかもしれないからもう一度試してきます。

309 名前:306 :2007/02/25(日) 21:49:34
やはりAA00CCDD0Aというバイナリがあったとして
wsprintfでやるとAAまでしか取得できません。
0x00に反応してると思われ

310 名前:デフォルトの名無しさん :2007/02/25(日) 21:51:29
>>309
ソースを晒すべし
0x00 は多分関係無い 言語にもよるだろうけど

311 名前:デフォルトの名無しさん :2007/02/25(日) 21:52:54
いや、1byte毎ぐるぐる回しながら、%Xで変換、という話だと思うが

312 名前:306 :2007/02/25(日) 21:54:16
>>311
あー、なるほどそういうことか。
試してみます。

313 名前:デフォルトの名無しさん :2007/02/25(日) 21:57:15
>>305
regmon.exe あったぁ〜
MSに買収されてたとは知らんかった
サンクスです


314 名前:306 :2007/02/25(日) 23:14:59
できましたが
AA0001とかだとA01としかならないです

315 名前:デフォルトの名無しさん :2007/02/25(日) 23:17:27
>>314
%02X

316 名前:デフォルトの名無しさん :2007/02/25(日) 23:18:02
%02X

317 名前:306 :2007/02/25(日) 23:24:15
>>315
それは既に試していて
もう一度やりましたがやっぱりダメでした。

A0000とかなっちゃいます

318 名前:デフォルトの名無しさん :2007/02/25(日) 23:24:58
>>306
ソースうp

319 名前:306 :2007/02/25(日) 23:30:25
http://zetubou.mine.nu/itoshiki/nozomu/zetubou5456.c

320 名前:デフォルトの名無しさん :2007/02/25(日) 23:35:12
>wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
これが原因。buff[i]はいいけど、lpPack[i]は1ループで2進むことがあるから。

321 名前:デフォルトの名無しさん :2007/02/25(日) 23:36:22
buffへコピーする必要は無いだろ。
せいぜいBYTE* packet = lpPacket;で十分。

322 名前:デフォルトの名無しさん :2007/02/25(日) 23:36:26
>>319
for(i = 0; i < Size; i++)
{
wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
}

{
int j=0;
for(i = 0; i < Size; i++)
{
j+=wsprintf(&PackData.lpPack[j], TEXT("%X"), buff[i]);
}
}

323 名前:デフォルトの名無しさん :2007/02/25(日) 23:37:03
for(i = 0; i < Size; i++)
{
wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
}

{
int j=0;
for(i = 0; i < Size; i++)
{
j+=wsprintf(&PackData.lpPack[j], TEXT("%02X"), buff[i]);
}
}

324 名前:306 :2007/02/25(日) 23:37:06
for(i = 0; i < Size; i++)
{
wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);
}

Sizeはパケットのサイズ
buffにはパケットのデータをmemcpyしてます(デバッグ用)
上記の状態でやるとAA00020B00がA02B0になっちまいます

325 名前:306 :2007/02/25(日) 23:38:32
>>320
あー、UNICODEベースで組んでるのが原因かなぁ

326 名前:デフォルトの名無しさん :2007/02/25(日) 23:40:59
>>325
>>323 が正解

327 名前:デフォルトの名無しさん :2007/02/25(日) 23:44:20
wsprintf(&PackData.lpPack[i], TEXT("%X"), buff[i]);

wsprintf(&PackData.lpPack[i*2], TEXT("%02X"), buff[i]);

328 名前:306 :2007/02/25(日) 23:45:04
>>327
それはむしろi * sizeof(TCHAR)でやるべきかと。

後やはりA02B0になっちまいやすorz

329 名前:306 :2007/02/25(日) 23:46:08
多分BYTEが1バイトだからなのかなーと思うんですが


330 名前:デフォルトの名無しさん :2007/02/25(日) 23:46:23
>324
VC++のウォッチ式ならコピーせずともどうにでもできる。
>325
PackData.lpPackの型がTCHARの配列やそれに類するものでなく、
charやunsigned charなどだったらwsprintfAかs(n)printfでも使いなさい。
>327
そこは2文字書き込むから2をかけてあるのであって、
sizeof (TCHAR)では全くお門違い。



331 名前:306 :2007/02/25(日) 23:48:45
>>330
あー、そういうことなのか

>>325についてはリストビューをUNICODE形式にしちまってるから
なんとかならないですかのう。Aに全てやり直すの酷だ・・

332 名前:デフォルトの名無しさん :2007/02/25(日) 23:56:02
320の件は323なり327なりの方法で解決できる。
Unicodeは関係ない。

333 名前:306 :2007/02/25(日) 23:58:40
全然違うソースを改変してビルドしてたんでまったく結果が同じという
オナニーショーを演じていましたどうもすみません。



334 名前:306 :2007/02/25(日) 23:59:17
(´・ω・`)


335 名前:デフォルトの名無しさん :2007/02/26(月) 00:02:31
よく頑張ったお前は神だよ

336 名前:デフォルトの名無しさん :2007/02/26(月) 02:31:42
もっとわかりやすいデータを食わせて何がおきてるのかさぐる、とか
そもそも%02Xはどういう意味なのか、くらい調べようぜ

337 名前:デフォルトの名無しさん :2007/02/26(月) 12:57:25
特定のアプリに対して
キーボードのBackword/Forwardキーとかの特殊キーで
WM_COMMANDが送られるのをブロックしたいのですが、
どうすればいいですか?

338 名前:デフォルトの名無しさん :2007/02/26(月) 15:21:58
キーボードフック

339 名前:337 :2007/02/26(月) 21:36:43
>WM_COMMAND
すみませんWM_APPCOMMANDでした・・・orz

SetWindowsHookExでフックをいろいろやってみましたができません・・・orz
最初、WH_KEYBOARDをやったらWM_KEYDOWNより前に送られてるのでダメ・・・
で、PostでなくSendされてるのでWH_GETMESSAGEではキャッチできず・・・
WH_CALLWNDPROCでは
>The hook procedure can examine the message; it cannot modify it.
となっていてブロックできず・・・

340 名前:デフォルトの名無しさん :2007/02/26(月) 22:00:19
>>339
フックだけじゃダメだって。
ジャブやアッパーも織り交ぜないと。

341 名前:デフォルトの名無しさん :2007/02/26(月) 22:19:40
LVM_DELETEITEMとかでアイテムを削除した後
アイテムを追加するとInsertItemは追加できるのにSetItemのほうは
追加できなくなりました。原因に心当たりのある方がいたら教えていただきたいのですが。

342 名前:デフォルトの名無しさん :2007/02/26(月) 22:22:49
>>340
フックって意味分かってる?
あんなの出すんだったらジャブとかアッパーだしたら隙が出ちゃうよ?

343 名前:デフォルトの名無しさん :2007/02/26(月) 22:26:34
>>341
SetItemは追加じゃないんだけど、、、まあそれは置いておいて、

SetItemに指定してるアイテム番号が違うのでは?
例えばInsertItemの戻り値がアイテム番号なので、それをSetItemに指定するとか。

344 名前:デフォルトの名無しさん :2007/02/26(月) 22:27:31
CreateWindowで"BUTTON"をBS_OWNERDRAW指定して作った子ウインドウに
WM_PAINTでビットマップをコピーして表示することはできました。
このWM_PAINTをWM_LBUTTONDOWNに変えるとビットマップが表示されません。

すみませんが、どうしてなのか教えてください。

345 名前:デフォルトの名無しさん :2007/02/26(月) 22:29:19
>>343
それはないと思うんですが。
まず、LVM_DELTEITEMを送る前まではちゃんとSetItemできてて
LVM_DELTEITEMをSendした後から追加しようとするとできなくなってしまいます

346 名前:デフォルトの名無しさん :2007/02/26(月) 22:30:09
BeginPaint/EndPaintはWM_PAINTの中でしか使えない。
またそれを解決しても、後のWM_PAINTで上書きされるということが起きそう。

347 名前:デフォルトの名無しさん :2007/02/26(月) 22:31:02
>>344
BeginPaint の PAINTSTRUCT を見てみて

348 名前:デフォルトの名無しさん :2007/02/26(月) 22:35:33
>>344
よくわかんないけど、WM_DRAWITEMを使うのは?

349 名前:341 :2007/02/26(月) 22:37:51
解決しました。

350 名前:デフォルトの名無しさん :2007/02/26(月) 22:42:04
後々の為に方法を書いておくんだ

351 名前:デフォルトの名無しさん :2007/02/26(月) 22:42:35
>>347-348
ご回答ありがとうございます。
手がかりにして調べてみます。

352 名前:341 :2007/02/26(月) 23:16:12
>>350
単純に消去した時のカウントがそのままでというか
項目数取得使っとけば良かったのに何で俺staticな変数で
インクリメントしてたんだろう・・・。

という話です

353 名前:341 :2007/02/26(月) 23:41:12
ふとした疑問。
ListView_GetItemCountで取得した項目数をそのまま
ListView_InsertItemを使って追加していった場合、
果たしてそれは正しいやり方なんだろうか・・・・。

354 名前:デフォルトの名無しさん :2007/02/27(火) 00:03:48
>>339
フックでメッセージを消したいときは、メッセージをWM_NULLに
書き換えればいいんだよ。

355 名前:デフォルトの名無しさん :2007/02/27(火) 00:04:44
>>353
意味が分からんが、ちょっと興味ある。
詳しく

356 名前:デフォルトの名無しさん :2007/02/27(火) 00:32:50
テンプレのWIn32API入門の第11章の終了処理のプログラムを実行すると
Proglam still running ? というエラーがでてビルドできません
これはどういうエラーなんでしょう?
環境はWin98でBorlandの5.5です

357 名前:339 :2007/02/27(火) 00:43:42
>>354
メッセージの変更は
WH_GETMESSAGEではできるみたいですが
WH_CALLWNDPROCではできないようです。
WH_GETMESSAGEではキャッチできませんでした・・・orz

358 名前:デフォルトの名無しさん :2007/02/27(火) 00:46:27
>>356
コンパイル結果のと同じ名前のEXEが現在実行中。

359 名前:デフォルトの名無しさん :2007/02/27(火) 00:46:29
>>356
ビルドの対象のプログラムがまだ実行中

360 名前:デフォルトの名無しさん :2007/02/27(火) 02:23:23
win32apiの関数で画像の加算合成をするにはどうしたらいいですか?

361 名前:デフォルトの名無しさん :2007/02/27(火) 02:42:03
gl何とか

362 名前:デフォルトの名無しさん :2007/02/27(火) 02:53:04
>>360
DIBにすればピクセル単位で普通にCPUで読み書きできる。

363 名前:デフォルトの名無しさん :2007/02/27(火) 10:06:16
>>360
結局、演算部は自作ですよ。

364 名前:デフォルトの名無しさん :2007/02/27(火) 10:22:42
自作ルーチンで演算
これがほんとの自作自演ナンチャッテ

365 名前:デフォルトの名無しさん :2007/02/27(火) 11:06:58
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'

366 名前:デフォルトの名無しさん :2007/02/27(火) 11:09:53
( ´д)……(´д`)……(д` )

367 名前:デフォルトの名無しさん :2007/02/27(火) 12:09:26
そのまましばらくお待ちください


368 名前:デフォルトの名無しさん :2007/02/27(火) 12:11:43
  __        __       __
  |よし| ΛΛ  |よし| ΛΛ   |よし| ΛΛ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 〃 ̄∩ ゚Д゚) 〃 ̄∩ ゚Д゚)  〃 ̄∩ ゚Д゚) < >>364 全員一致で逝ってよし!
    ヾ.   )    ヾ.   )     ヾ.   )   \_____________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
\                                                \
  | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |
  |          逝ってよし認定委員会                    |
  |                                           |
\|                                           |

369 名前:デフォルトの名無しさん :2007/02/27(火) 12:47:16
>>358 >>359
解決しました、ありがとう〜

370 名前:デフォルトの名無しさん :2007/02/27(火) 13:40:46
ウィンドウクラスとウィンドウスタイル定数が全部載ってるサイト教えれ

371 名前:デフォルトの名無しさん :2007/02/27(火) 13:55:38
マイクロソフトのサイト

372 名前:デフォルトの名無しさん :2007/02/27(火) 13:56:15 ?2BP(222)
>>370
winuser.h

373 名前:デフォルトの名無しさん :2007/02/27(火) 14:12:01
BCCなんですが、GDI+のライブラリがないとjpgって表示できないんですか?

374 名前:デフォルトの名無しさん :2007/02/27(火) 14:30:57
>>373
jpg解凍ルーチンを自分で書けばいいと思うよ

375 名前:デフォルトの名無しさん :2007/02/27(火) 14:41:15
他の板ならともかく、ここで「解凍」って見るとすごくバカっぽいな。


376 名前:デフォルトの名無しさん :2007/02/27(火) 14:42:23
>>374
だめなのか。。。('A`)メンドクセ
dクス

377 名前:デフォルトの名無しさん :2007/02/27(火) 14:58:40
ライブラリ無いとどんな画像形式でも表示なんか無理だと思うんだが…

378 名前:デフォルトの名無しさん :2007/02/27(火) 15:00:54
GDI+じゃなくても、OleLoadPictureあたり使えばイインジャネ?

379 名前:デフォルトの名無しさん :2007/02/27(火) 15:10:46 ?2BP(222)
IEコンポにやらせるとか。

380 名前:デフォルトの名無しさん :2007/02/27(火) 17:17:10
>>373
自分でこっそり使うツール程度で単に表示させたいだけなら、
Susieプラグインでも使えばいいんじゃない。
BMP(DIB)さえ扱えるなら、.spiは結局DLLなので
静的ロードしてやれば自分で書くコードはほとんど無くて済むだろうし。
# 昔読んだプラグイン仕様の記憶から書いてるのでどっか間違ってるかも。

一例としてSusieプラグインを挙げたけど、
JPEGならフリーのライブラリがいくらでもあると思う。
# 思いついた確実に存在するJPEG読み込みのDLLがSusieプラグインだったので。

もし商用利用する場合はライブラリのライセンスを要確認のうえで。


381 名前:デフォルトの名無しさん :2007/02/27(火) 17:21:09
むしろlibjpeg

382 名前:デフォルトの名無しさん :2007/02/27(火) 17:26:30
UpdateLayerdWindowでblend.SourceConstantAlphaに255をセットした場合は成功して表示されるんですが、それ以下の数字を入れた場合Functionがエラーとなりエラーコードが87=パラメータが違います。となってしまいます。
Functionを呼ぶ前のスタイルとか何かに問題があるんでしょうか?

383 名前:デフォルトの名無しさん :2007/02/27(火) 18:09:00
>>382
スレ違い...と言いたいが、
GDI+スレはないんかいw

384 名前:デフォルトの名無しさん :2007/02/27(火) 18:12:11
Platform/Windows SDKにヘッダとライブラリがあるんだし、扱うとしたらここだろ。
その違いが把握できるなら.NET系のスレもありだとは思うが。

385 名前:デフォルトの名無しさん :2007/02/27(火) 18:34:05
何ですれ違いなん?普通にUser32.dll のAPIじゃなかと?

386 名前:デフォルトの名無しさん :2007/02/27(火) 18:35:29
gdiplus.dllだろ

387 名前:デフォルトの名無しさん :2007/02/27(火) 18:56:35
GDI+スレとか無いからここでいいんじゃね?
APIじゃないけど

388 名前:デフォルトの名無しさん :2007/02/27(火) 19:00:56
http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_updatelayeredwindow.asp?frame=true

ヘッダー:winuser.h 内で宣言
インポートライブラリ:user32.lib を使用

というわけで、gdiplus.dll の関数ではなく、単なる Win32API です。

389 名前:デフォルトの名無しさん :2007/02/27(火) 20:26:46
>>373
jpg表示したいだけなら、OleLoadPictureでいいんじゃね?
前処理が面倒だが、jpgだけじゃなくBMP/GIF他も一緒に扱えるし。



390 名前:デフォルトの名無しさん :2007/02/27(火) 21:39:34
やべー jpg なんて libjpeg 一択と思ってた
png に libpng 使ってるんですが、これもひょっとしてメジャーじゃなかったり?

391 名前:デフォルトの名無しさん :2007/02/27(火) 22:06:55
>>382
255 = 0xFF = 0b11111111で 、
実際はblend.SourceConstantAlphaをリングシフトして、
OS(ドライバ?)は最下位ビットをAND判定してるとか?

nパーセントの透過率 = ((0xFF * n) / 100)

392 名前:デフォルトの名無しさん :2007/02/27(火) 22:34:01
>>382
::GetDeviceCaps(hDC, SHADEBLENDCAPS)の結果は?

393 名前:389 :2007/02/28(水) 00:13:00
>>390
表示だけでなく、生成や変換もやる場合は、libXXXでいいんじゃね?
Susieプラグインとかよりライセンス条件緩そうだし。
WindowsのAPI/DLLだけで済むならそのほうがいいと思うんでOleLoadPicture
を勧めた訳だが。


394 名前:デフォルトの名無しさん :2007/02/28(水) 07:57:46
子プロセスの出力をパイプで受け取り、それをistreamで読み出すには
どうしたら良いのでしょうか?
スレ違いなら誘導お願いします。

395 名前:デフォルトの名無しさん :2007/02/28(水) 08:01:00
パイプで受け取る方法はググればサンプルが見つかる。
istreamがC++のやつのことなら、Boost.Iostreamsを使うのが楽。

396 名前:394 :2007/02/28(水) 08:18:45
>>395
ありがとうございます。おっしゃる通りistreamはC++のやつのことです。
これからググって調べてみる事にします。

397 名前:デフォルトの名無しさん :2007/02/28(水) 14:18:14
他のアプリが呼び出した DeviceIoControl()
の内容を横取り(もしくは覗き見)する方法はあるでしょうか?


398 名前:デフォルトの名無しさん :2007/02/28(水) 14:20:09
アル

399 名前:デフォルトの名無しさん :2007/02/28(水) 14:27:15
ラッパDLLは無理くさいからIAT書き換えればいいんじゃないのかな。
Advanced Windowsに物凄い詳しく書いてあるよ。

400 名前:デフォルトの名無しさん :2007/03/01(木) 07:37:23
新規質問お願いします。

デバイスコンテキストに文字を書くAPIを探しています。

「A」と書いたときには「∀」と文字を上下反転させる事ができるAPIはないでしょうか?
TextOut、DrawTextにはしてい方法が見つかりませんでした。

APIの組み合わせでもフォント設定でもいいので知っていたらお願いします。

後、文字の背景は透過しているので、「TextOut」→「StretchBlt」で張り付けた絵を反転するのは無しでお願いします

401 名前:デフォルトの名無しさん :2007/03/01(木) 08:14:20
>>400
単純に回転ならCreateFont関数でnEscapementで角度指定だっけな?

垂直、水平はしらん

402 名前:デフォルトの名無しさん :2007/03/01(木) 08:15:36
CreateFont

403 名前:402 :2007/03/01(木) 08:16:36
かぶったすまん

404 名前:デフォルトの名無しさん :2007/03/01(木) 11:56:14
>>400
g.TranslateTransformで反転表示させることも出来るよ(・∀・)イイ!!
そのほうが多分効率いいと思う。

405 名前:デフォルトの名無しさん :2007/03/01(木) 18:25:26
画像のビューワみたいなものが作りたいのですが、サムネイルを表示する部分は
そのようなコントロールがあるのでしょうか。それともウィンドウに直接(?)書いて
マウスの座標などでクリックされた画像を判定したりしているのでしょうか。

開発環境は Visual C++ 2005 Express Edition です。

406 名前:デフォルトの名無しさん :2007/03/01(木) 20:09:35
>>405
IExtractImageインターフェイスだっけな?

407 名前:デフォルトの名無しさん :2007/03/01(木) 21:07:05
リストビューでよくね?

408 名前:405 :2007/03/02(金) 08:41:49
>>406
ありがとうございます。
調べてみたのですが、サムネイルを生成するのに非常に便利そうで助かります。
この取得した画像を表示するコントロールなどがあるものかと悩んでいました。

>>407
リストビューの大きいアイコン表示を使うということでしょうか。
それとも(あまり詳しくはないですが)オーナードローというもので、描画する
のでしょうか。とりあえず試してみたいと思います。
ありがとうございました。


409 名前:デフォルトの名無しさん :2007/03/02(金) 08:47:10
>>408
正しいかどうかは分からないが、俺はリストビューの大きいアイコンで画像サムネイルビューアを作ったことがある。

後は つ[イメージリスト]

410 名前:デフォルトの名無しさん :2007/03/02(金) 21:29:09
お気に入りとか、履歴とかのシステム標準(?)のアイコンを取得する汎用的な
やり方はありますか?

今はExtractIconEx()でshell32.dllからインデックス直値で取ってますが...
OSが変わるたびに変えないといけないし('A`)

411 名前:デフォルトの名無しさん :2007/03/02(金) 21:53:29
あ、SHGetSpecialFolderLocation()→SHGetFileInfo() でいけそうですが
他に簡単な方法があれば。

412 名前:デフォルトの名無しさん :2007/03/02(金) 23:19:36
画像編集ソフトなどのアンチエイリアスをかけたペンをつくるため
Ellipseの範囲内を(線も)1ピクセルずつ操作したいのですが、
何か良い方法はありませんか?

413 名前:デフォルトの名無しさん :2007/03/02(金) 23:41:34
具体的にどのレベルの話をしてるんだい?
「DIBでやるのが普通」って答えを求めてるのか、
それとも「普通にやったんじゃ遅いから高速化する
方策はないか」てな話なのか。

414 名前:デフォルトの名無しさん :2007/03/02(金) 23:55:06
>>413
一応読み込んだピクセルビットにXY軸指定すれば
ピクセルを修正できる関数は作ったんですよ。
それをSetDIBitsToDeviceで表示するという感じで。
だからリージョンかラスタオペレーションか何かで
いじればできないかな・・・って

415 名前:デフォルトの名無しさん :2007/03/03(土) 00:21:49
>>414
1.グラデーション分のペン作成(単色のペンで)
2.ペンのストロークをサンプリング
3.2のストロークに対し、1のペン描画を反映。グラデーション分のビットマップを作成。
4.グラデーション別に平均化処理し、ORる

だめか?

416 名前:デフォルトの名無しさん :2007/03/03(土) 11:04:04
サウンド音量固定の件で質問した者ですが、
おかげ様でできました!

でAPIの質問ではないのですが、
いきがかり上聞かせて頂きます。

まずければ他へ行きます。

ボリューム再設定アプリを実行するタイミングとして
1. Windows起動音が鳴るより前
2. Windows終了音が鳴る前
としたいのですが、うまくできません。
(ボリュームが上がっててビックリする事が多いので(^^;)

スタートアップに登録したら1の場合、
いつも鳴ってる途中で実行されます。

2の場合やりかたがわかりません。
Windows XP HOMEなのですが・・・

417 名前:デフォルトの名無しさん :2007/03/03(土) 12:44:50
エクスプローラやIEのアドレスバーの様にReBarにコンボボックス、ボタンを順に配置したいです。
ツールバーにコンボボックス(セパレータの上に配置)を入れてをバンドに入れる方法を見つけたのですが、
このコンボボックスはリサイズできないのでしょうか?
厳密には、セパレータの幅変更になりますけど。
また、目的のアドレスバーをスパイしてみると、ひとつのバンドにコンボボックスとツールバーを入れているようでした。
それを行うメッセージなりAPIがあるんでしょうか。

418 名前:デフォルトの名無しさん :2007/03/03(土) 13:01:43
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/rebar/rebar.asp

419 名前:デフォルトの名無しさん :2007/03/03(土) 13:05:33
1つのバンドは1つのウィンドウしか占有できないから、
適当な子ウィンドウをバンドに置いて、その子としてコンボボックスなりツールバーなり置けばいい。

420 名前:デフォルトの名無しさん :2007/03/03(土) 14:25:52
>>416
うちのPC音でないから起動音のタイミングはわからないけど
サービスにすればスタートアップよりはやい

2は一番安直なのが常駐させてWindows終了時のメッセージ(忘れた
を捕捉する方法かな
サービスにしても常駐になるし

vectorとかに行けば終了時の処理を登録できるものぐらいあると思うからそれ使うのも楽かもね

421 名前:デフォルトの名無しさん :2007/03/03(土) 14:57:22
>>416
1・HKLM\Software\Microsoft\Windows\CurrentVersion\Runはどうだい
2・Windowsはシャットダウンする手前に全トップレベルウィンドウに対して
 WM_QUERYENDSESSIONを投げるからそれを受け取って処理してみたらどうだい。
 ちなみにWM_QUERYENDSESSIONに対してTRUEを返せばシャットダウンを許容、
 FALSEを返せばシャットダウンを禁止(シャットダウン自体が中止される)する。
 一つでもウィンドウがFALSEを返せばシャットダウンは中断される。

422 名前:デフォルトの名無しさん :2007/03/03(土) 17:39:02
終了時に保存等の処理をしたいならWM_QUERYENDSESSIONよりも、
WM_ENDSESSIONだと思うけど。

423 名前:デフォルトの名無しさん :2007/03/03(土) 18:26:48
WNDCLASSとWNDCLASSEX
CreateWindowとCreateWidnowEx
どこがどう違うのか教えてください。

424 名前:デフォルトの名無しさん :2007/03/03(土) 18:29:02
指定できるのが増えてる

425 名前:デフォルトの名無しさん :2007/03/03(土) 19:19:06
なるほど、だからExですか。なんつってww


426 名前:デフォルトの名無しさん :2007/03/03(土) 19:50:01
>>423
WNDCLASSEXの方はcbSize,hIconSmメンバが追加されている。
cbSizeが追加されたことにより、
構造体の拡張も視野に入っているかもね。
>>196-198,200-204を参照
あと、hIconSmはスモールアイコンを指す。

メンバはWNDCLASS構造体に重複部分があるから、
RegisterClass関数は内部で、RegisterClassEx関数を呼んでいるかも。



427 名前:デフォルトの名無しさん :2007/03/03(土) 20:05:30
GetWriteWatch って、SDK に
Windows NT/2000:対応していません
って書いてありますが、本当は使えるんですか?


428 名前:デフォルトの名無しさん :2007/03/03(土) 20:25:23
>>427
1にああ書いてあるとおり、英語版を見てみろ。
http://msdn2.microsoft.com/en-us/library/aa366573.aspx
Requirements
Client Requires Windows Vista, Windows XP, Windows Me, or Windows 98. 
Server Requires Windows Server "Longhorn" or Windows Server 2003. 


429 名前:デフォルトの名無しさん :2007/03/03(土) 20:44:21
情報ありがとう。そうか、対応していないんだね。残念だなー。

430 名前:デフォルトの名無しさん :2007/03/03(土) 21:30:11
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄


431 名前:デフォルトの名無しさん :2007/03/03(土) 22:15:42
>>422
WM_ENDSESSIONだとタイムアウトで強制的に打ち切られるから
保存しようとしているデータの性質によっては怖くて使えない

432 名前:デフォルトの名無しさん :2007/03/03(土) 22:16:12
質問です。XP、VS2005 で Win32 アプリを作成しています。
ピクチャコントロールにスクロールバーをつけたのですが、うまく動作しません。

LONG_PTR style;
style = GetWindowLongPtr(hWnd, GWL_STYLE);
SetWindowLongPtr(hWnd, GWL_STYLE, style | WS_VSCROLL | WS_HSCROLL);

SCROLLINFO info;
info.cbSize = sizeof(LPSCROLLINFO);
info.fMask = SIF_RANGE | SIF_PAGE;
info.nMin = 0;
info.nMax = 9;
info.nPage = 3;
SetScrollInfo(hWnd, SB_HORZ, &info, TRUE);

hWnd はピクチャコントロールのハンドルです。
SetScrollInfo は正常に動作し、期待通りのスクロールバーが表示されるのですが、それだけで、
まるで無効になっているかのようにマウスでつかむこともできず、WM_VSCROLL も WM_HSCROLL も来ません。
(Spy++ でも確認しました。)

原因が全くつかめません、何か手がかりはないでしょうか…。


433 名前:デフォルトの名無しさん :2007/03/03(土) 22:51:28
>>432
ピクチャコントロールの親でメッセージ受けようとしてないか?

434 名前:デフォルトの名無しさん :2007/03/03(土) 22:54:12
>>432
誤:info.cbSize = sizeof(LPSCROLLINFO);
正:info.cbSize = sizeof(SCROLLINFO);
>SetScrollInfo は正常に動作
エラー返してないかい?


435 名前:デフォルトの名無しさん :2007/03/03(土) 23:02:12
XPって C:\Documents and Settings\"ユーザ名"
のフォルダ選択して、
右クリック → 共有とセキュリティ → 共有(タブ)
で表示させたウインドウで、
□このフォルダをプライベートにする
のON/OFFができますよね?
このON/OFF操作で行われる処理をコマンドラインで
自動的にやる方法知りませんか?(例えばWIM32APIとか)
cacls.exe だとできないみたいだし、
いろいろ他の方法当たったけど、見つからんです。。


436 名前:デフォルトの名無しさん :2007/03/03(土) 23:10:31
>>434
>LPSCROLLINFO
うわぁぁぁぁ

エラー返してましたorz ありがとうございます!

437 名前:デフォルトの名無しさん :2007/03/03(土) 23:16:08
>>435
SetNamedSecurityInfo()


438 名前:デフォルトの名無しさん :2007/03/04(日) 00:07:51
WindowsMobile向けの関数一覧って無いですかね。使えるのと使えないのとあってよくわからんです。

439 名前:デフォルトの名無しさん :2007/03/04(日) 09:15:54
Windowsサービスを登録するAPIってないですか

440 名前:デフォルトの名無しさん :2007/03/04(日) 09:20:17
CreateService

441 名前:デフォルトの名無しさん :2007/03/04(日) 11:46:18
Win64って特に意識しなくてもアドレス幅が64bitになるの?
intとかvoidとか64bitで、mallocで4GB以上の連続した
領域が確保されるの?

単なる興味本位な質問ですが、良かったら教えて。

442 名前:デフォルトの名無しさん :2007/03/04(日) 11:52:46
Win64はLLP64

443 名前:デフォルトの名無しさん :2007/03/04(日) 11:56:29
互換性を考えて int は 32bit だったはず

444 名前:デフォルトの名無しさん :2007/03/04(日) 12:25:44
Win32 longlong→64bit、long→32bit、int→32bit
だったのが
Win64 long→64bit、int→32bit

になったんじゃなかったっけ?
longlongはどうなったか覚えてないけど

445 名前:デフォルトの名無しさん :2007/03/04(日) 12:28:57
>442-444 ありがとう
LLP64でググったらよく分かった
64bit環境でも色々有るんだねUNIX系とクロス開発は大変そう

俺は関係ないけど。

446 名前:デフォルトの名無しさん :2007/03/04(日) 12:31:58
>>445
ほんとC言語って移植性ねーな

447 名前:デフォルトの名無しさん :2007/03/04(日) 12:32:48
どうして適当なこと言う奴が後を絶たないのか

448 名前:デフォルトの名無しさん :2007/03/04(日) 12:39:03
.NETとかjavaみたいに分厚いフレームワークじゃないからなぁ
うっとうしいっちゃ鬱陶しいな

449 名前:デフォルトの名無しさん :2007/03/04(日) 21:46:02
>>446
MISRA-C,SECとか見てるけど、
移植性ねーっていうけど、C言語自体はそれほど閉鎖的じゃない。

視野が狭いPGが多いだけであって・・・

450 名前:デフォルトの名無しさん :2007/03/04(日) 21:47:19
446のようなバカが多くて困る。

451 名前:446 :2007/03/04(日) 21:50:43
そろそろカチンときそうです。

452 名前:デフォルトの名無しさん :2007/03/04(日) 22:07:37
まったくだ。
色んな環境を熟知していて
頭のいいやつが細かいことにも様々な工夫を凝らせば
C言語は移植性が高いんだよ。

453 名前:デフォルトの名無しさん :2007/03/04(日) 22:12:30
ifdefとtypedefの嵐で万事解決です

454 名前:デフォルトの名無しさん :2007/03/04(日) 22:16:25
ifndefってなんて読むの?
イフンデフ?

455 名前:デフォルトの名無しさん :2007/03/04(日) 22:31:59
タスクマネージャに表示されるような個々のプロセスのCPU使用率や
メモリ使用量を取得したいが、そんな関数あります?

456 名前:デフォルトの名無しさん :2007/03/04(日) 22:34:07
はい

457 名前:デフォルトの名無しさん :2007/03/04(日) 22:56:05
>449
C言語はそれほど閉鎖的じゃないけど
プログラマーはかなり閉鎖的だね

458 名前:デフォルトの名無しさん :2007/03/04(日) 23:25:38
ありがと。Pdh系API使ってやります。

459 名前:デフォルトの名無しさん :2007/03/04(日) 23:33:54
というかあらゆる処理系依存に精通していて
常に気を使うなんてやってられないだろ。
ガンガンに処理系やWin32APIに依存しちゃえよ。

460 名前:デフォルトの名無しさん :2007/03/05(月) 00:23:19
HANDLEにクラスとかのポインタを結び付けれるAPIはありますか?
HWNDに対してのSetPropみたいなAPIを探してます

461 名前:デフォルトの名無しさん :2007/03/05(月) 00:37:59
>>460
ハッシュテーブルにもっとけばいいだろ。
そんなのAPIに頼ることか?

462 名前:デフォルトの名無しさん :2007/03/05(月) 00:42:59
>>461
HWNDに対してのSetPropの存在意義を256文字以内で説明せよ

463 名前:デフォルトの名無しさん :2007/03/05(月) 00:45:24
>>461
SetProp の存在意義を否定してないか?w

464 名前:デフォルトの名無しさん :2007/03/05(月) 00:51:22
いずれにしても残念ながらHANDLEに対するSetPropのようなものは存在しない。
自前で連想配列でも持っておくしかない。

第一HANDLEと言ってもカーネルハンドルからそうでないものまでいろいろあるし。

465 名前:デフォルトの名無しさん :2007/03/05(月) 00:52:06
多分無い

どうせハンドルの類の整数値は一意なんだから適当に
mapみたいなデータ構造作っちゃえばいい

466 名前:デフォルトの名無しさん :2007/03/05(月) 01:26:41
>>460
ちょっと調べただけなのだがSetTokenInformationがそれっぽい引数の取り方をしてなくもないとおもわれ

467 名前:デフォルトの名無しさん :2007/03/05(月) 01:39:41
SetThreadTokenも要チェックや!!

468 名前:デフォルトの名無しさん :2007/03/05(月) 02:59:43
ウィンドウのサイズが変更されたとき、決まった縦横比で固定されるようにするには
どうすればよいでしょうか?

469 名前:デフォルトの名無しさん :2007/03/05(月) 03:23:18
計算する

470 名前:468 :2007/03/05(月) 03:28:21
>>469
もちろんそうなんですが、WM_SIZEで変更後のサイズを受け取り、それを基に
SetWindowPosで設定すると、その設定によって再びWM_SIZEが呼び出され続けて
どんどん小さくなる、といった現象が起こります・・・。

471 名前:デフォルトの名無しさん :2007/03/05(月) 03:28:31
WM_POSCHANGING

472 名前:デフォルトの名無しさん :2007/03/05(月) 03:30:55
>>470
想像して笑ってしまった。面白いことをやってるな

473 名前:デフォルトの名無しさん :2007/03/05(月) 03:41:42
そもそも同じ比率になったのにルーチン呼び続けてる仕様が間違ってるんじゃ枚か

474 名前:デフォルトの名無しさん :2007/03/05(月) 05:39:32
>>470
朝からちょっとワロタ

475 名前:デフォルトの名無しさん :2007/03/05(月) 07:01:18
萌えるウィンドウだな

476 名前:デフォルトの名無しさん :2007/03/05(月) 07:02:31
恥ずかしくて段々小さくなるウィンドウ

477 名前:デフォルトの名無しさん :2007/03/05(月) 07:08:05
>>470
そっからは自分で頑張れ。
これを自力で解決できんようなら、プログラミングなんて他人にやらせとけ。

478 名前:デフォルトの名無しさん :2007/03/05(月) 07:19:26
>>470
クライアント領域のサイズとウィンドウサイズ混同してないか?
あと計算はWM_GETMINMAXINFOとかWM_SIZINGでやれ

479 名前:468 :2007/03/05(月) 11:23:46
できました!
ありがとうございました!

480 名前:デフォルトの名無しさん :2007/03/05(月) 11:44:48
そういう微笑ましいバグってなんだか面白い。


481 名前:デフォルトの名無しさん :2007/03/05(月) 17:05:40
タスクバー上で動く時計を作っていたのですが、
case WM_TIMER :
GetLocalTime(&st);
wsprintf(str,TEXT("%d時%d分%d秒"),st.wHour,st.wMinute,st.wSecond);
SetWindowText(hWnd,str);

これだとちゃんと動くのですが、

case WM_TIMER :
GetLocalTime(&st);
wsprintf(str,TEXT("%d時%d分%d秒"),st.wHour,st.wMinute,st.wSecond);
InvalidateRect(hWnd,NULL,TRUE);
return 0;

WM_PAINT :
・・・
SetWindowText(hWnd,str);

こうWM_PAINTの方で他の文字表示処理と一緒に出力しようと思ったら、
最小化した時、あるいはCreateWindowでウィンドウを画面外に作成した時
などにちゃんとタスクバー上で動作しないのですがなぜでしょうか?


482 名前:デフォルトの名無しさん :2007/03/05(月) 17:07:30
最小化したり画面の外へ追いやったりしたら、
ウィンドウの中を描画する必要が無いからWM_PAINTは呼ばれない。

483 名前:デフォルトの名無しさん :2007/03/05(月) 17:11:36
>>482
即レスありがとうございます!><
てっきり描画の必要が無くても自分でInvalidateRectで送れば呼ばれるのかと思ってましたorz

484 名前:デフォルトの名無しさん :2007/03/05(月) 17:15:10
拡張スタイルの WS_EX_LEFTSCROLLBAR についての質問です
同スタイルが動作する環境かを知りたいのです。MSDNで同スタイルは
「ヘブライ語やアラビア語などの読みの方向をサポートしている言語をシェル言語としているシステムで有効です。他の言語では、このスタイルは無視されます。」
と書かれていました
私の環境では同スタイルを定義すると動作するので
GetSystemMetrics関数でSM_MIDEASTENABLEDの引数を指定し戻り値がTRUEになると思っていたのですがFALSEでした

このことからヘブライ語やアラビア語をサポートしているシステムかどうかが取得出来ないので動作する環境かが判断出来ません
又、「他の言語では、このスタイルは無視されます」と書かれているので
動作不可環境では拡張スタイルに定義されていても動作しないようになっているのでしょうか
それとも拡張スタイルから同スタイルが削除されるのでしょうか
後者ならば拡張スタイルの同スタイルの有無を確認したらいいだけなのでサポート云々の話ではなくて簡単なのですが
私の環境では同スタイルが動作しているので確認も取れません
誰か詳しい方宜しくお願いします

485 名前:デフォルトの名無しさん :2007/03/05(月) 17:32:58
メモ帳で、
ユダヤに対する冒涜かアラーに対する冒涜を記述して、
OSが再起動したら対応している。

486 名前:デフォルトの名無しさん :2007/03/05(月) 19:01:25
ExtractIconExとDestroyIconについて教えてください。
以下のコードを実行し、大体4800回程アイコンハンドルの取得と解放を
繰り返すと、ExtractIconExが失敗するようになってしまいます。
解放の仕方を間違えているのでしょうか。

Dim lngCount As Long
Dim lngIconHandle(0) As Long
Dim lngRet As Long

Do While True
  lngRet = ExtractIconEx(App.Path & "\test.ico", 0, 0, lngIconHandle(0), 1)
  If lngRet <> 1 Then
    Stop
  End If
  lngRet = DestroyIcon(lngIconHandle(0))
  If lngRet = 0 Then
    Stop
  End If
  lngCount = lngCount + 1
Loop


487 名前:デフォルトの名無しさん :2007/03/05(月) 19:35:01
>>486
ngRet = ExtractIconEx(App.Path & "\test.ico", 0, 0, lngIconHandle(0), 1)

ngRet = ExtractIconEx(App.Path & "\test.ico", 0, 0, lngIconHandle(0), 0)
にしたら

488 名前:486 :2007/03/05(月) 19:53:36
>>487
4800くらいで失敗してしまいます。

ちなみに、アイコンを一個取り出すから
最後の引数に1と書いていたのですが、
0にしてみても普通にアイコンハンドルが取得できました。
ここを0とするとどうなるのでしょうか?




489 名前:デフォルトの名無しさん :2007/03/05(月) 20:07:19
0でなく1で正しい。第三引数を0にしてるのが悪いんでないか

Dim lngCount As Long
Dim lngIconHandle(1) As Long
Dim lngRet As Long

Do While True
  lngRet = ExtractIconEx(App.Path & "\test.ico", 0, lngIconHandle(1), lngIconHandle(0), 1)
  If lngRet <> 1 Then
    Stop
  End If
  lngRet = DestroyIcon(lngIconHandle(0))
  If lngRet = 0 Then
    Stop
  End If
  lngRet = DestroyIcon(lngIconHandle(1))
  If lngRet = 0 Then
    Stop
  End If
  lngCount = lngCount + 1
Loop

490 名前:デフォルトの名無しさん :2007/03/05(月) 20:09:39
ExtractIconEx の宣言と DestroyIcon の宣言はどーなってるん?
# DestroyIconの引数が byRef になってて、iconハンドルへのポインタ渡してるんじゃねーの?

491 名前:デフォルトの名無しさん :2007/03/05(月) 20:14:23
それなら最初のDestoyIconでエラーになるんじゃね?

492 名前:デフォルトの名無しさん :2007/03/05(月) 20:16:48
シングルスレッドのGUIアプリでGetOpenFileName()を呼び出したところ、
ダイアログの処理用と思われるスレッドが幾つか生成されました。

OpenFileのダイアログを閉じてメインウィンドウに戻ったあと、
メインウィンドウの×を押してWM_DESTROYを発生させ、
WindowProcのWM_DESTROYでPostQuitMessage(0)を呼びました。

メッセージループは正常に終了し、
自動的にExitThreadが呼ばれてスレッドが終了したところまではデバッガで確認できました。

しかし、ダイアログの処理用と思われるスレッドが残っています。
残ってしまう原因にお心当たりある方はいらっしゃいませんか。

493 名前:486 :2007/03/05(月) 20:17:03
>>489
失敗します。
ExtractIconExの戻り値が0になってしまいます。
GetLastErrorの結果も0でした。

>>490
↓の様になっております。
アイコンハンドルの部分は、ExtractIconExの方はByRef、
DestroyIconの方はByValです。

' アイコンハンドルを取得
Private Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" _
(ByVal lpszFile As String, _
ByVal nIconIndex As Long, _
ByRef phiconLarge As Long, _
ByRef phiconSmall As Long, _
ByVal nIcons As Long) As Long

' アイコンハンドルを破棄
Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long


ちなみにCで書いてみたら問題なく動いているのでマシンのせいではなさそうです。

494 名前:デフォルトの名無しさん :2007/03/05(月) 21:24:59
>>492
複数回GetOpenFileNameを呼ぶと、
同じスレッドで処理されているのかな?
流用利用って事で
(前回開いたパス情報等の保持として・・)

・・・内部でCOMを呼んでたりして。

495 名前:デフォルトの名無しさん :2007/03/05(月) 21:45:56
>>492
たぶん正常な動作 ms謹製のnotepadでもスレッドが残る

496 名前:デフォルトの名無しさん :2007/03/05(月) 21:51:31
>>495
初めて知った。すごい仕様だな…

497 名前:デフォルトの名無しさん :2007/03/05(月) 21:58:40
>>494-496
ありがとうございました。
素敵すぎる仕様のようで、諦めて従います・・・・・・

498 名前:494 :2007/03/05(月) 22:10:03
今、メモ帳アタッチしてみたけど、
スレッドは流用してないみたいだなぁ。

499 名前:デフォルトの名無しさん :2007/03/05(月) 22:29:32
>>493
>ByRef phiconLarge As Long, _
なのに
>lngRet = ExtractIconEx(App.Path & "\test.ico", 0, 0, lngIconHandle(0), 1)
と呼び出してるが、
(BASIC? の仕様次第だけど)リテラルに対する参照渡しはどうなんだろ?
→参照されてる
→一時オブジェクトを作り値代入し、その一時オブジェクトへのポインタを渡す
という動作なら、ラージicon のハンドルが漏れてる


500 名前:デフォルトの名無しさん :2007/03/05(月) 22:46:27
>>486
失敗したとき、GetLastError()の値は?


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