Win32API質問箱 Build ..
323:デフォルトの名無しさん
07/11/21 22:11:02
何にせよまずはBeginPaintが基本ということでいいのでは?
324:デフォルトの名無しさん
07/11/21 23:09:27
>>314
URLリンク(www.microsoft.com)
URLリンク(homepage1.nifty.com)
URLリンク(homepage1.nifty.com)
URLリンク(msdn.microsoft.com)
325:デフォルトの名無しさん
07/11/22 15:20:45
エクスプローラでマイコンピュータを開くと表示される
「ローカル ディスク」や「CD ドライブ」といった文字列を取得するには
どうすればいいのでしょうか?
30分以内に小倉優子ばりのおっとりキャラで答えてください
326:デフォルトの名無しさん
07/11/22 15:23:32
shell32.dllからGetResource
327:デフォルトの名無しさん
07/11/22 15:36:31
SHGetFileInfoで取れぬのか?
328:デフォルトの名無しさん
07/11/22 15:41:26
>>327
おおいけそうな予感
ありがとー☆ミ
329:デフォルトの名無しさん
07/11/22 17:28:11
memo
URLリンク(www.microsoft.com)
330:デフォルトの名無しさん
07/11/22 17:37:49
割り込んで申し訳ないのですが、教えてください。
DirectX全画面のゲームの上から、文字や画像を表示する方法はないでしょうか?
(レイヤードウィンドウとかはダメでした。。。)
331:デフォルトの名無しさん
07/11/22 18:36:06
グラフィックカードに直接アクセスして
描画領域くりぬいてるから駄目なんじゃない?
332:デフォルトの名無しさん
07/11/22 18:42:35
よくチートツール類がやってる方法:
プロセスに潜り込んでIDrectDraw***を乗っ取り、そのBlt()あるいはBltFast()に割り込んで自分で書く。
333:デフォルトの名無しさん
07/11/22 19:19:22
>>330
俺は普通に枠なしウィンドウで文字表示したことあるけど
べつにその画面内に描画したいわけじゃないんだろ
334:デフォルトの名無しさん
07/11/22 19:37:41
330です。
説明不足ですんません&ありがとうございます。
よくMODツールなんかで見かけるやつです。
(レースゲームなんかでスピードメータを追加する改造など)
でもどうやったら、DirectDraw***のオブジェクトを乗っ取れるか?
それができたらやりたい放題ですね。
そこをぜひぜひお願い申し上げます。
(僕のプログラミングレベルでは・・
デバイスコンテキスト取ってDrawText、BitBltぐらいしかできないっす。)
335:デフォルトの名無しさん
07/11/22 19:47:33
そのレベルじゃ厳しすぎるだろ・・・
336:デフォルトの名無しさん
07/11/22 20:06:50
>>334
(1) APIフックで CreateDirectDrawの類をフックして順次wrapperオブジェクトを返す
(2) 途中まで同じで、wrapperは使わず IDirectDraw9Device 等の vtbl を書き換える
のどっちかかな。
APIフックの仕方やvtblの書き替え方を自分で見つけられる程度の実力があれば、
地味にやってけばできるでそ。
337:デフォルトの名無しさん
07/11/22 20:41:49
334です。
>>335 やっぱり?
>>336 ありがとうございやーす。
とりあえず正しい方向へ行けるのでホッとしました。
あとは学習あるのみ・・・
338:デフォルトの名無しさん
07/11/22 21:05:42
>>337
dxwndのソースが参考になるかもな。ならんかも知れんが。
339:デフォルトの名無しさん
07/11/22 21:28:37
DirectDrawって・・・
もう今じゃほとんど使われていないぞ
340:デフォルトの名無しさん
07/11/22 21:29:20
DWMをXPでいぢりたひ
341:デフォルトの名無しさん
07/11/22 21:30:23
>>338
中に「int HookDirectX(TARGETMAP *target)」こんな関数あったよ。
モロです。
地道にやってたら2週間かかってたかも
嬉しいんだけど、ちょっとはずかしい。
342:デフォルトの名無しさん
07/11/22 23:54:47
>>337
ぶっちゃけTaksiが全てのソースを公開してるんだがな
343:デフォルトの名無しさん
07/11/23 00:18:16
CはJavaとかとちがってガベコレがないから
プログラマがすべてリソースの開放をしなければならないと聞いたのですが
どの入門サイトもそれらしいコードがないのですがなぜでしょうか?
最初にメッセージボックスを表示するサンプルが多いようですが
メッセージボックスを開放する処理はどうすればいいのでしょうか?
また、ウインドウを作成したときもPostQuitMessageを送るだけで
その後ウインドウを開放するようなコードがないHPばかりなのですが
344:デフォルトの名無しさん
07/11/23 00:19:51
>>343
ネタだよな?そうだよな?
345:デフォルトの名無しさん
07/11/23 00:44:16
>>343
リソースの解放なんて必要ないよ。
一部の特殊なリソースを除けば、プロセス終了で、OSが全て片づけてくれる。
346:デフォルトの名無しさん
07/11/23 00:45:20
>>343
malloc/freeやnew/deleteというのがあるじゃないか。
GetBufferしたらReleaseBufferしなきゃならないとかもそう。
ファイルは開いたら閉じるのだってリソースの解放だ。
メッセージボックスの件はネタだと信じたい。
347:デフォルトの名無しさん
07/11/23 00:58:25
>どの入門サイトもそれらしいコードがない
>その後ウインドウを開放するようなコードがないHPばかりなのですが
文面から察するに経験豊富というわけではないだろうから、
「それらしい」や「するような」という判断自体が怪しいが
このレスからじゃあどのページをもってそう判断しているのかわからない
>Cは……プログラマがすべてリソースの開放をしなければならない
というのはC言語としての話であってWin32APIの話ではない。たとえば
>その後ウインドウを開放するようなコードがないHPばかりなのですが
の場合、「ウインドウを開放する」というコーディングはWinAPIとして要求してないと思われる。
(これもどのコードについて言っているのか解らないので推測だが)
まともなページであれば、APIとして開放しなければならないリソースはAPIの作法で開放されている。
ただその作法を知らないのであれば開放のコードは見つけられないかもしれない。
( HANDLE hFile = malloc(...) / free(hFile) なんてしないので)
なので勉強しろ。そして調べろ。
348:デフォルトの名無しさん
07/11/23 01:01:17
論文がはかどらなくてムシャクシャして書いた。
開放がすべて誤字であることに気づいたが反省はしていない。あすも平日だがまだがんばる。
349:デフォルトの名無しさん
07/11/23 01:01:27
メインスレッド内でCreateThreadで作成した複数の副スレッドのうちの特定の一つのスレッドを、
メインスレッドから停止(停止っていってもいい?スレッドを消したい)させるにはどうしたらいい?
ExitThreadでは特定スレッドを別スレッドから狙い打ちにできないような???
ねぇどうすればいい??
350:デフォルトの名無しさん
07/11/23 01:12:58
>>348
明日は休日ですよ……
351:デフォルトの名無しさん
07/11/23 01:29:16
hoge.exe: user error (GetClientRect: ヲ」ノヲ マノ・!ケgY
(error code: 578))
ってどういう意味のエラーなのでしょうか?
一部の文字化けは元からです。
コンパイル環境:mingwで g++ hoge.c -mwindow
352:デフォルトの名無しさん
07/11/23 01:34:04
>>349
ExitThreadは呼び出し元のスレッドを終了させる奴だ
別スレッドを終了させるならTerminateThread
ただ別スレッドで作成したリソースが残る可能性があるから
続行判断用のフラグをCreateThread時に渡しておく方がベターだと思う
その場合はフラグの領域が先に開放されないように注意が要るけど
353:デフォルトの名無しさん
07/11/23 01:36:26
>>351
デバッグしなさいw
354:デフォルトの名無しさん
07/11/23 01:44:19
>>352
TerminateThread、そういう関数がありましたか。。
ExitThreadはc標準の_exitthreadみたいなもんなんですね。
>>352さん指摘どおり、たしかに
「TerminateThread is a dangerous function that should only be used in the most extreme cases.」
ってありますね。
やっぱりパラメーターで渡しておくほうがよさげですね。
でもこのやり方嫌いなんだよなぁw なんか副スレッドがいつ本スレッド内のパラメーターの変更をチェックしてるんだよ、と
渡来してみます。ありがとうございました。
355:351
07/11/23 01:52:37
どういう理由かわからないのですが、
実行ファイルを削除してから再コンパイルすると正常に(?)動作しました。
356:デフォルトの名無しさん
07/11/23 05:14:13
_で始まる関数は標準じゃないぜ
これ知らないと俺みたいな一言居士がうるせーから要注意な
357:デフォルトの名無しさん
07/11/23 07:37:18
>>354
排他制御
アトミックオペレーション
358:デフォルトの名無しさん
07/11/23 09:44:32
読み取りだけなら領域が無効になってなきゃ別にいつだって良いだろ
書き込みなら排他制御すべきだが
359:デフォルトの名無しさん
07/11/23 09:55:36
____
/__.))ノヽ
.|ミ.l _ ._ i.)
(^'ミ/.´・ .〈・ リ
.しi r、_) | チャリーン
| `ニニ' / __ lヽ,,lヽ
ノ `ー―i´ | |Θ|( )
| ̄ ̄ ̄| ̄ ̄|_ |_|_|と i
|___|__|_| |_| しーJ
____
/__.))ノヽ
.|ミ.l _ ._ i.)
(^'ミ/.´・ .〈・ リ <ヘンリーはわしが育てた
.しi r、_) |
| `ニニ' / __ lヽ,,lヽ
ノ `ー―i´ | |Θ|( )
| ̄ ̄ ̄| ̄ ̄|_ |_|_|と i
|___|__|_| |_| しーJ
360:デフォルトの名無しさん
07/11/23 09:58:40
誰だヘンリーってw
361:デフォルトの名無しさん
07/11/23 10:31:49
ビルゲイツ(本名William Henry Gates III)だろ
362:デフォルトの名無しさん
07/11/23 14:32:39
Win32でメニューバーの色を取得したいのですがどうすればいいのでしょうか?
363:デフォルトの名無しさん
07/11/23 14:40:22
getsystemmetrics
364:デフォルトの名無しさん
07/11/23 14:42:00
DWORD menu_color = GetSysColor(COLOR_MENU);
365:362
07/11/23 14:49:42
>>363-364
>>362です。有難うございました。
366:デフォルトの名無しさん
07/11/23 15:31:59
>>365
誰だよwww
>>363-364
ありがとうございます。
367:デフォルトの名無しさん
07/11/23 15:40:52
ツリービューをダブルクリックでは開閉させたくないんですが、
どういう方法をとればいいんでしょうか。
368:デフォルトの名無しさん
07/11/23 17:13:30
サブクラス化してダブルクリックのメッセージを捕まえてreturn 0;をすればおk
369:デフォルトの名無しさん
07/11/23 19:46:11
>>368
やってみます。
ありがとうございました。
370:デフォルトの名無しさん
07/11/23 20:20:42
すでに起動してるアプリケーションに文字列をSendMessageするにはどうすればいいのでしょうか?
FindWindowをしてWM_APPのLPARAMに文字列を乗せて送信してみたところ
誤ったポインタが届いてしまいました
371:デフォルトの名無しさん
07/11/23 20:26:21
WM_COPYDATA
372:デフォルトの名無しさん
07/11/23 20:36:44
ポインタを別プロセスに送っても無意味
>>371かファイルマッピングを使う
373:デフォルトの名無しさん
07/11/23 20:51:36
テキストファイルから複数行の文字列を取り出し
リストビューに表示させるにはどうしたらいいですか?
374:デフォルトの名無しさん
07/11/23 20:51:37
アトムくんじゃダメなの?
375:デフォルトの名無しさん
07/11/23 20:51:47
>>371-372
出来ました!
こんな便利なのあったのかー
ありがとうございました
376:デフォルトの名無しさん
07/11/23 20:57:38
>>373
そりゃテキストファイル開いて、読んで、リストビューコントロールにに登録すりゃいいんでない?
377:デフォルトの名無しさん
07/11/23 21:19:04
複数のBMPを結合して4GBytes以上のAVIファイルを作成するには
どうしたらいいですか?
できればVideo compressorも使いたい。
378:デフォルトの名無しさん
07/11/23 21:20:49
どのように登録すればいいんですか?
379:デフォルトの名無しさん
07/11/23 22:17:05
まずパソコンの電源を入れます
380:デフォルトの名無しさん
07/11/23 22:24:19
>>379
次は?
381:デフォルトの名無しさん
07/11/23 22:25:06
入れました。
382:デフォルトの名無しさん
07/11/23 22:29:17
そしてスタートボタンをクリックします
383:デフォルトの名無しさん
07/11/23 22:31:46
>>373
これって、リストビュー1つのアイテムに複数行表示させるってこと?
ならオーナードローかな、LVS_OWNERDRAWFIXEDあたり
384:デフォルトの名無しさん
07/11/23 22:42:45
>>383
いえ、
テキストファイルから一行ずつ項目を追加したいです。
385:デフォルトの名無しさん
07/11/23 22:49:55
うるせーばかどっかいけ
386:デフォルトの名無しさん
07/11/23 22:51:55
リストビュー使うのにリストビューアイテムの追加の仕方なんて
人に聞くことじゃないでしょ。。。
調べろ禿で終わり
387:デフォルトの名無しさん
07/11/23 22:55:05
あなたがここに書いたとおりに実装すればよい
ただし、そのために何のどのような設計が必要かを検討する
さらにそのために何のどのような設計が必要か検討する これを繰り返す。
言語や実装方法依存しない設計であること、この繰り返しで疑問の余地がなくなるまでコーディングを開始しないことが重要
これが完了すればコーディングなんて一瞬で終わるし、再コーディングなんて手戻りはまず発生しない
388:デフォルトの名無しさん
07/11/23 22:58:36
ここでのレスを参考に分割ウィンドウ作っていたんですが
スクロールバーってオーナードローできないんでしょうか?
境界線を自力描画したせいか普通に置くと
境界線がスクロールバーの下をくぐるんです
389:デフォルトの名無しさん
07/11/23 23:00:37
コーディングして実際に確認しないと、言語や実装方法依存しないことが確認できない。
理論だけで集結するなら、実験をする科学者はいない。
太平洋で核実験をする国もない。
390:デフォルトの名無しさん
07/11/23 23:02:34
>>388
クライアントに直接書かずにウインドウを作ればいい。
391:デフォルトの名無しさん
07/11/23 23:03:09
ReadLinesToListviewItems()
392:デフォルトの名無しさん
07/11/23 23:44:38
>>388
MFCかWTLのソースでも見ろよ
393:デフォルトの名無しさん
07/11/24 00:08:57
フックについて詳しく書かれた書籍はありますか?
ネット上の情報ではあまり身につかないと思うので・・
394:デフォルトの名無しさん
07/11/24 03:38:42
すべてを詳しく網羅したものはない
395:デフォルトの名無しさん
07/11/24 04:35:45
Advanced Windows かなあ
396:デフォルトの名無しさん
07/11/24 10:32:43
フックなんて大して覚えることねーだろ
MSDNの説明読めば各フックが呼び出される状況は把握できるし
そしたらあとは自分で応用方法を考えるだけ
397:デフォルトの名無しさん
07/11/24 10:34:51
APIフックかも知れんよ?
398:デフォルトの名無しさん
07/11/24 10:39:45
>>395
あの分厚いやつですね
本屋でちょっと覗いてこよう
399:デフォルトの名無しさん
07/11/24 15:51:48
タブコントロールをCreateWindowで作成する際に、
TCS_RIGHTJUSTIFYを指定しているのですが、タブが最大まで拡大されません。
どういう原因が考えられますか?
400:デフォルトの名無しさん
07/11/24 18:34:22
マイクロソフトヘルプのhxsファイルはテキストなどに変換できませんか?
401:デフォルトの名無しさん
07/11/24 18:36:30
純正以外のgrepツールや全文検索のインディックスを作りたいんですが
htmlに変換することも難しいです シェアでABC Amber HxS Converter
というのがあるんですが日本語無理で、まとめて変換も出来ずつかえません
402:デフォルトの名無しさん
07/11/24 18:54:02
純正とは?
403:デフォルトの名無しさん
07/11/24 19:02:25
MSDNライブラリをインストールすると入っているMicrosoft Developer Networkが純正ツールです
404:デフォルトの名無しさん
07/11/24 19:50:44
s_hIml = ImageList_LoadImage(hInstance, MAKEINTRESOURCE(IDB_HEADER), 7, 0, CLR_DEFAULT, IMAGE_BITMAP, LR_LOADTRANSPARENT);
Header_SetImageList(ListView_GetHeader(s_hListView), s_hIml);
このようにして登録しておいたリストビューのヘッダのImage(14 x 6)を切り替えようと以下のような関数を作りました。
ところが何度呼び出しても切り替わってくれません…
一体全体どこが間違っているのでしょうか?
BOOL SetColumnState(void)
{
HWND hHeader = ListView_GetHeader(s_hListView);
int i;
for(i = 0; i < Header_GetItemCount(hHeader); ++i)
{
HDITEM hdi = {HDI_FORMAT | HDF_IMAGE};
Header_GetItem(hHeader, i, &hdi);
if(hdi.fmt & HDF_IMAGE)
{
hdi.iImage = 1;
return Header_SetItem(hHeader, i, &hdi);
}
}
return FALSE;
}
405:デフォルトの名無しさん
07/11/24 20:01:12
すみません自己解決しました
hdi.maskに入れないといけないんですね
1時間も悩んでたのになんてこった…
406:デフォルトの名無しさん
07/11/24 20:39:04
簡単なウェブブラウザ作りたいんですが、何から手を付けたらいいかわかりません。
407:デフォルトの名無しさん
07/11/24 20:41:54
おまいが作るまでも無い。既存のもので充分だ。
ちなみに、下手なウェブブラウザ作るとw3c厨に命を狙われるから覚悟しとけ。
408:デフォルトの名無しさん
07/11/24 20:45:07
>>406
独自レンダリングはどこからやっても簡単にはならないだろうなw
IEコンポーネント使っていいならIEコンポーネントの使い方から調べたらいいなじゃないかな?
409:デフォルトの名無しさん
07/11/24 20:58:50
>>407
目の前の人に厳しくなるってのは、自分の足が引っ張られるからとか、正当化のための理由は確かにあり得ると思うんだけど、こういうアカの他人に厳しい人ってのは、どういう倫理感を持ってるんだか、おれには非常に不思議だ。
410:デフォルトの名無しさん
07/11/24 21:02:31
下手に穴のあるもの作られて
それが原因でウィルスやワームばらまかれて
結局は足を引っ張られることになってる
一番低能で一番迷惑な連中がMSの糞ソフト
411:デフォルトの名無しさん
07/11/24 21:08:48
>>410
それは>>406本人ですか?
412:デフォルトの名無しさん
07/11/24 21:14:30
windows使わなきゃいいじゃん
413:デフォルトの名無しさん
07/11/24 21:27:19
自分は使わなくても世間が使うとその割合が増えて
ウィルスがそっちから流れ込んでくるだろ
最近はやったSARSみたいに
自国だけ閉鎖しててもどうにもならんのだよ
おれはWindows使わないっていうスタンスで
影響受けずに済むのは
ヒッキーだけ
414:デフォルトの名無しさん
07/11/24 21:29:35
>>413
目の前の人に厳しくなるってのは、自分の足が引っ張られるからとか、正当化のための理由は確かにあり得ると思うんだけど、こういうアカの他人に厳しい人ってのは、どういう倫理感を持ってるんだか、おれには非常に不思議だ。
415:デフォルトの名無しさん
07/11/24 21:45:37
>>399どなたかわかりませんか?
416:デフォルトの名無しさん
07/11/24 21:49:31
>>415
使い方を間違っている
417:407
07/11/24 21:50:03
アカの他人に厳しい人って、まさかと思うけど俺のことじゃないよね?
単にコピペネタなのかもしれんが。
418:デフォルトの名無しさん
07/11/24 22:06:10
>>413
mac使えば良いんじゃない?
感染のリスクは比較的低いと思うよ
419:デフォルトの名無しさん
07/11/24 22:09:08
>>413
macなら、ウィルスが流れ込んで来ても、
たいていはWin用だから、せいぜい自分は感染せずに済む
420:デフォルトの名無しさん
07/11/24 22:12:14
>>417
お前の同僚がお前のために作ったツールが穴だらけなのは迷惑かもしれないが、
赤の他人が勉強のためか、vectorに登録するためか、もしくは仕事で作ったのかしらないけど、
彼がどの程度のものを作るのかわかってもいないうちから足を引っ張ろうとするのは倫理的にどうかと思うぞ。
お前に直接迷惑がかかるわけじゃないし、
仮に彼一人が作るのをやめたところで全体的には大して変化はないだろう。
それどころか彼の向上意欲やチャンスすら奪ってしまうことになりかねない。
お前は彼に責任を取れるのか?
文句を言いたいなら実際に迷惑を被った場合だけにしろ。
421:デフォルトの名無しさん
07/11/24 22:13:47
(゚Д゚)ハァ?
422:デフォルトの名無しさん
07/11/24 22:37:47
子ウィンドウをWM_LBUTTONDOWNで親ウィンドウの下に置いて
WM_LBUTTONUPで親の上に戻そうと思ってSetWindowPos()を弄ってるんですが
もしかして親ウィンドウの下に子ウィンドウを置く事はできませんか?
全然下がらなくて困っています
423:デフォルトの名無しさん
07/11/24 23:20:19
>>420
彼乙彼
424:デフォルトの名無しさん
07/11/24 23:45:33
>>416
どういう事でしょうか?
hTabCtrl = CreateWindowEx(0, WC_TABCONTROL, NULL,
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | TCS_RIGHTJUSTIFY,
100, 100, 400, 100,
hwnd, (HMENU)HTABCTRL, GetModuleHandle(NULL), NULL);
こんな感じで指定するのではないですか?
425:デフォルトの名無しさん
07/11/25 00:16:29
GroupViewスタイルのListViewでグループの開閉(図参照)ってどうやればできるか誰かわかります?
LVGS_COLLAPSEDあたりかと思って試してみたけど変化なし・・・
図 URLリンク(www.youlost.mine.nu)
426:デフォルトの名無しさん
07/11/25 01:37:37
そりゃLVGS_***ったらGroupItemのスタイルだろ常考
コモンコントロールからの通知はWM_NOTIFYとLVN_***のはず
427:デフォルトの名無しさん
07/11/25 03:06:19
逆引きリファレンスがほしいのですが
URLリンク(www.amazon.co.jp)
を使ってる人いませんか?
ポチるかどうか悩んでるのですが
立ち読みしにいける環境じゃないので困ってまつ
428:デフォルトの名無しさん
07/11/25 03:28:07
C言語スレか推薦図書スレか買ってはいけない書籍スレで聞け
429:デフォルトの名無しさん
07/11/25 09:41:35
なんでこの程度の質問にも答えていただけないのですか?
しかも何故命令口調?
あなたに命令される覚えはありませんが?
430:デフォルトの名無しさん
07/11/25 09:48:01
スレタイ嫁よ白雉
431:デフォルトの名無しさん
07/11/25 09:48:26
スレ違い
432:デフォルトの名無しさん
07/11/25 09:52:24
いや>>428は凄く親切だと思うぞw
普通ならスレ違いの一言で切って捨てられる所を
適切な質問先を示してるんだから。
433:デフォルトの名無しさん
07/11/25 12:48:39
>>427
良書だよ
VC++版とあわせて両方かっとけ
434:427
07/11/25 13:28:26
なんで>>429みたいな成りすましがいるのこのスレ
お前らだまされてるの?
それともだまされてるフリしてんの?
435:デフォルトの名無しさん
07/11/25 13:55:13
鳥が付いてるわけでもなし
なりすましかどうかなんて誰も分からん
436:427
07/11/25 14:04:24
なんでわからないの?
437:デフォルトの名無しさん
07/11/25 14:16:24
>>424
URLリンク(msdn2.microsoft.com)
>TCS_RIGHTJUSTIFY
>The width of each tab is increased, if necessary, so that each row of tabs fills the entire width of the tab control.
>This window style is ignored unless the TCS_MULTILINE style is also specified.
438:427
07/11/25 14:17:09
俺が本物だ
439:427
07/11/25 14:31:13
そもそもTCS_RIGHTJUSTIFYって
#define 0x0000
だった希ガス
440:デフォルトの名無しさん
07/11/25 14:36:07
コンソールで GetKeyboardState を実行しても戻り値は成功になりますが
引数バッファには結果は何も押していない状態になります。(もちろん色々押しています)
ただ GetKeyboardState の直前に GetKeyState( 0 ) を実行すると
GetKeyboardState は正常な値が取得できます。
関数説明を見てもさっぱり挙動が理解できません、、
そもそも GetKeyboardState はコンソールで使用できないのでしょうか?
441:427
07/11/25 14:52:09
GetKeyboradStateもGetKeyStateも
メッセージキューが所有する仮想キー情報からキーの状態を取ってくる
メッセージキューはスレッドがUSER32.DLLに属するAPIを最初に呼び出した時に作成される
したがって初めにGetKeyboradStateを呼んだときは
キューが作られた直後なので仮想キー情報は真っ白
442:425
07/11/25 15:23:32
>>426
いや、コードから開閉したいんじゃなくて、開閉できるスタイルに設定したいんです。
>>425の画像のソフト以外で見たことないし自前でやってるのかな?
443:デフォルトの名無しさん
07/11/25 15:35:24
URLリンク(msdn2.microsoft.com)
>state
>Currently, it can only be the following.
>
>LVGS_NORMAL
>Groups are expanded, the group name is displayed, and all items in the group are displayed.
どうも使えないっぽい
.NET2.0では利用可能な模様
444:デフォルトの名無しさん
07/11/25 15:37:44
>>441
ありがとうございます。
説明不足でないですが、上記処理は何度も実行するループ部分でして
GetKeyState を入れるか入れないかで、
GetKeyboradState の動作がかわるのが、わけがわからないのです。
どちらもメッセージキューが必要ということは、
やはりコンソールではどちらも使用してはいけないのでしょうか?
_getch だと処理が止まってしまうので回避をしたいのが目的です。
445:デフォルトの名無しさん
07/11/25 15:54:40
GetAsync〜の方を使ってみたら?
446:425
07/11/25 15:57:42
>>443
サンクス。こっちでは何も書いてないんだけど、やっぱ無理かな?
URLリンク(msdn2.microsoft.com)
使い方は合ってるはずなのにできないってことは無理なのかもしれませんが
447:デフォルトの名無しさん
07/11/25 15:58:09
>>444
コンソールで入力街に入るのを回避したいなら
_kbhitでチェックしてから_getchが常道かと
448:デフォルトの名無しさん
07/11/25 17:14:34
>>437
おぉありがとうございます。TCS_MULTILINEも指定しないと無視されるようですね。
また一つ勉強になりました。しかし、>>439を見て調べたのですがTCS_RIGHTJUSTIFYは
0x0000と定義されてました。これって指定できないということなんですかね???
いくら>>424のようにしても、TCS_RIGHTJUSTIFYはあってもなくても変わりませんよね?
0と論理和とっても変化なしですしね・・・どうすれば・・・
449:440
07/11/25 18:17:38
>>445
同時キーや引数をいっぱい変えて GetAsyncKeyState を実行しまくるのが非効率でしたので
GetKeyboradState が理想でしたが、いろいろ無理そうですので素直に諦めます。
>>447
_getch よりも Get〜による同時押しも欲しかったのですが
いろいろ問題ありそうですんで諦めます 。
アドバイスありがとうございました。
450:デフォルトの名無しさん
07/11/25 19:16:31
>>425
それってツリービューじゃ駄目なの?
451:デフォルトの名無しさん
07/11/25 20:20:21
>>448
デフォルトでそういう動作っていう意味だろう
452:425
07/11/25 20:55:11
>>450
表示の切り替え(アイコンとか詳細とか)が必要なんです。
何とかならんかなぁ
453:デフォルトの名無しさん
07/11/25 20:57:57
>>452
予め自分でデータを持っておいて、ListViewがクリックされた時にその位置に挿入/削除して
擬似的にツリービュー的な動作を再現すればいいと思うが。
ネットで見かけるTreeListViewのサンプルとかがそういう事をしている。
454:425
07/11/25 21:10:19
う〜ん、そうするしかないようですね。
455:デフォルトの名無しさん
07/11/25 22:05:50
或いは詳細表示の時だけTreeViewに切り替えるとか。
456:デフォルトの名無しさん
07/11/26 02:09:51
比較的大きなドキュメントを読み込むときに、一気に読み込まず、一定のサイズごとに
シーケンシャルに読み込んでいくプログラム、例えばIE、でデータの読み込みにしたがって
右側のスクロールバーのスクロールボックスの大きさが小さくなっていく
ああいう動作はどうやって実現してるんだ?
スクロールバーの操作や、つまみ(スクロールボックス)のサイズの調整はできるんだが
読み込み中はスクロールバー自体が消えたようになってしまう。
ファイル読み込み(例えば256Byteずつ)のループ
{
ファイルの読み込み処理
行数を調べて
SetScrollInfo関数で、新しい範囲の設定
}
これでスクロールバーは更新されるはずなんだが・・ダメだ
ファイル全体の読み込み処理の終了の後、ウィンドウ全体を再描画させるとスクロールバーも出現する。
ちなみにクライアント領域の右側につく(WS_VSCROLL)、標準スクロールバーの話です。
SDK
457:デフォルトの名無しさん
07/11/26 02:16:02
>これでスクロールバーは更新されるはずなんだが
されねえよw
それだとループしてる間はWM_PAINTが発生しないから再描画されるわけないだろ
手っ取り早いのは副スレッドで読み込みとスクロールバーの設定をしてInvalidateRectする
そうすればメインスレッドは滞りなく再描画する
458:デフォルトの名無しさん
07/11/26 02:32:52
>>456
ウインドウメッセージを処理してやらなきゃ駄目だよ。
普通はマルチスレッド化、どうしてもスレッドが嫌ならループ内に
メッセージ処理を組み込む。
459:デフォルトの名無しさん
07/11/26 02:34:26
RDW_FRAME
RDW_UPDATENOW
SWP_DRAWFRAME
辺りでぐぐれ
460:デフォルトの名無しさん
07/11/26 02:34:58
それだけならDispatchMessageはさむだけで良さそうだけど
副作用出てくるような操作するときはマルチスレッドにするべき
461:デフォルトの名無しさん
07/11/26 02:36:09
こんな時間に何してんだお舞ら
462:デフォルトの名無しさん
07/11/26 02:41:05
質問に回答してるだけだが、何か?
463:デフォルトの名無しさん
07/11/26 02:45:46
>>446
まだ見てるか分からんけど
URLリンク(msdn.microsoft.com)
>LVGS_COLLAPSIBLE 状態フラグを使用すると、グループを折りたたんだり展開したりできるようになります。
>グループを折りたたむと、グループに属するリストビュー項目が非表示になります。
>プログラムで LVGS_COLLAPSED 状態フラグを使用すると、グループを折りたたむことができます。
464:456です。
07/11/26 05:27:46
一応、副スレッドでの読み込みでも同じようにやってみたけど×だったorz
>>457
スマソ
書き忘れた
SetScrollInfo();
InvalidateRect();
UpdateWindow();
と、きちんとやってるんだが
もちろんファイルから読み込んだ内容は順次表示されていく
だけど、スクロールバーが消えてしまう
で、これがなぜかわからない
一応ループ部分のソース(つっても分かりにくいと思う。)
do{
ZeroMemory(lpTemp, CHUNK_SIZE);
bRet = ReadFile(hFile, lpTemp, CHUNK_SIZE, &dwRead, NULL);
lstrcat(lppms->lpString, lpTemp);
iLines = StrChrCount(lppms->lpString, TEXT('\n')) + 1;//行数の取得
SendMessage(lppms->hwnd, WM_MY_SETRANGE, 0, (LPARAM)iLines); //メインスレッド内にある、ウィンドウプロシージャに範囲の設定の指示
//LPARAMで範囲の最大値を渡してる
InvalidateRect(lppms->hwnd, NULL, TRUE);
UpdateWindow(lppms->hwnd);
Sleep(100);
}while(dwRead && !lppms->bKill);
465:デフォルトの名無しさん
07/11/26 05:28:24
で、主スレッド内でのメッセージの受け取り
case WM_MY_SETRANGE:
si.fMask = SIF_RANGE;
si.nMin = 0;;
si.nMax = (int)lParam;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
return 0;
466:デフォルトの名無しさん
07/11/26 07:11:19
スクロールバーに再描画送ってない
467:デフォルトの名無しさん
07/11/26 08:44:59
スレッドがスリープなりして使用権を返却していない。
468:デフォルトの名無しさん
07/11/26 10:37:47
>>466だと思う
469:デフォルトの名無しさん
07/11/26 11:18:55
仮想リストビューにアイテムを追加するときは
LVN_GETDISPINFOメッセージを監視して自分で追加していくのは解るのですが
どうやってLVN_GETDISPINFOメッセージを発生させるのでしょうか?
通常のリストビューのようにListView_SetItemでいいのでしょうか?
470:デフォルトの名無しさん
07/11/26 11:26:36
アイテム数をLVM_SETITEMCOUNTで設定すれば
画面の更新が必要になると勝手に飛んでくる
471:デフォルトの名無しさん
07/11/26 11:41:54
ある自作メインアプリケーションに「ログイン」の機能を持たせ、
それを起動している最中は他の自作アプリケーションが
そのログインユーザの情報にアクセスできるようにしたいと思っています。
(メインアプリケーション終了時にログインユーザの情報も消す)
そうなると、メインアプリケーション内のログインユーザの情報を
アプリケーション間で共有できるようにしなければいけないとは思うのですが、
このようなグローバルな情報はどのように共有するものなのでしょうか。
感覚的には、「OS内で唯一のインスタンスがあって、みんなでextern参照」
といった使いかたをしたいのですが、
Mutexみたいなものを使って実現できるものなのでしょうか。
なにかよいサンプルなどがあれば、教えていただけると嬉しいです。
よろしくお願いいたします。
472:デフォルトの名無しさん
07/11/26 11:50:55
ファイルマッピングオブジェクト(メモリマップトファイル)
データが短いならグローバルアトムで十分
473:471
07/11/26 12:37:48
>>472
情報ありがとうございます。
両方調べさせていただきました。
メインアプリケーションのプロセスに聞きに行くのではなく、
各アプリケーションがそれぞれ任意のタイミングで
「メインアプリケーションがどこかにセットした現在のユーザ情報」を
自分で見に行くという動きを考えているので、
メモリマップトファイルよりはグローバルアトムのほうが
それに適した実装ができそうですかね。
こっちの方法を勉強してみようと思います。
474:デフォルトの名無しさん
07/11/26 12:48:39
>[メインアプリケーションがどこかにセットした現在のユーザ情報」を
>自分で見に行くという動きを考えているので、
>メモリマップトファイルよりはグローバルアトムのほうが
>それに適した実装ができそうですかね。
たぶん逆
その用途ならメモリマップトファイルの方が楽
アトムだと中身にアクセスするには生成した識別子(=一定ではない)を
SendMessageか何かで他のプロセスに渡さなきゃいけない
メモリマップトファイルは名前(=一定の値)でカーネルオブジェクトを呼び出せるから
何かを渡したりとかは必要ない
475:471
07/11/26 12:56:12
>>474
アトムの識別子って決めうち文字列じゃなかったんですね。
一時的なレジストリみたいなものだと勘違いしてました。
間違った方向に進むところでした。ありがとうございます。
476:デフォルトの名無しさん
07/11/26 13:00:46
>>470
なるほど
数だけ教えてあげれば勝手にやってくれるんですね
解決できました、ありがとうございました
477:デフォルトの名無しさん
07/11/26 13:12:10
>>475
ちなみにその「一時的なレジストリ」を使って実現してもいいんだよ
478:425
07/11/26 13:15:48
>>463
情報サンクス。でもLVGS_COLLAPSIBLEの値がわからないです。
誰か分かる方います?
479:425
07/11/26 13:17:14
てかvista以降って書いてない?
480:471
07/11/26 13:27:29
>>477
レジストリだと、実行中にレジストリエディタで簡単に書いたり消したりできますよね。
もちろんアトムやメモリマップトファイルでも、
本格的にセキュリティ対策するならそのまま使うわけにはいかないでしょうけど、
OS付属のエディタで読み書きできてしまうことくらいは避けておきたいなと思いまして。
481:デフォルトの名無しさん
07/11/26 13:36:04
>>479
じゃあVista以降なんだろう。残念だな。
482:425
07/11/26 13:40:42
そうなんでしょうね、諦めます。
で、次の質問なんですが、ListViewでマウスホイールが回転されたことを取得したいんですけど、
サブクラス化するしかないですよね?
483:デフォルトの名無しさん
07/11/26 13:43:19
他にも方法はあるけど、サブクラス化が一番楽でコストも低いような
484:425
07/11/26 13:54:04
おk、サンクス
485:デフォルトの名無しさん
07/11/26 16:48:58
URLリンク(software.nikkeibp.co.jp)
ここのPart3のFileCopyプログラムですが
表示されるべきのメニューが表示されません。。。
COPYやEXITなどのメニューを表示するようにするには
どうすればいいですか?
486:デフォルトの名無しさん
07/11/26 17:03:18
リソースファイル (*.rc) をコンパイルしてリンクしたか?
487:デフォルトの名無しさん
07/11/26 17:38:18
>>486
ご指摘のように
リソースファイルをプロジェクトに追加するのを
忘れていたのが原因だったようです。
表示するようになりました。ありがとうございます。
488:デフォルトの名無しさん
07/11/26 18:56:47
文字列置換や文字列検索に使える関数ってSDKにない?
489:デフォルトの名無しさん
07/11/26 19:01:02
検索や置換のダイアログの表示なら
FindTextやReplaceTextで可能です。
490:デフォルトの名無しさん
07/11/26 19:14:03
>>489
ありがとうございます
FindTextとReplaceTextについて調べてみよ
491:デフォルトの名無しさん
07/11/26 20:10:01
デバッガAがDebugActiveProcessでプロセスBにアタッチした後、
デバッガCがデバッガAのアタッチを強制的にデタッチして
プロセスBにアタッチしなおすことって、出来るんでしょうか?
その過程の間、プロセスBは停止したらダメ、という条件で。
ちょっと分かりにくいですが、要するにデバッガAをデバッガCに
差し替えてしまうことができるか、ということです。(AはCに
ついては何も知らないプログラムなので、連携した動作は
ありません)
デバッガAを強制的に終了するとプロセスBも終了してしまう
ようで、一見すると不可能っぽいのですが。OSは2000〜Vista
です。よろしくお願いします。
492:491
07/11/26 20:11:58
すみません、上げさせてください。
あと、「プロセスBは停止したらダメ」というのは、ようするに
終了は不可と言うことで、ブレーク状態になるのは構いません。
493:デフォルトの名無しさん
07/11/26 20:17:20
XP以降ならDebugActiveProcessStopってのがある。
494:デフォルトの名無しさん
07/11/26 20:34:23
>>493 どうもありがとう
495:491
07/11/26 21:14:53
教えてもらったので早速実験してみました。
WinMain(){
DebugActiveProcessStop(GetCurrentProcessId());
:
:
:
}
ってやってデバッグ実行開始したら、デバッガ(VC8)が
外れると期待したのですが、外れずにそのまま下に
行っちゃいました。
もしかしてDebugActiveProcessStopはデバッグ対象じゃなくて
デバッガのプロセスIDを渡すのかしら? それとも自プロセスが
デバッガから強制離脱することはできない…?
あるいはDebugActiveProcessを呼んだあとに、そのプログラムが
デバッグ対象を切り離す用途で使うのかも。それだと>>491の
外部からのデバッガの差し替えはできませんね。
憶測ばかりで申し訳ないですが、このAPI、ググっても細かい
ところがよく分かりませんでした。
496:デフォルトの名無しさん
07/11/26 22:04:52
コレ見た感じだと DebugActiveProcess 呼んだデバッガが自分で
デタッチするときに使うような感じっぽくない?
URLリンク(msdn2.microsoft.com)
497:デフォルトの名無しさん
07/11/26 22:30:55
ある特定のトップレベル・ウィンドウを、最前面に持ってくるのってSetWindowPos関数?
ほかにも何かいい方法ありますか?
498:491
07/11/26 22:30:58
>>496
情報ありがとう
499:デフォルトの名無しさん
07/11/26 22:57:02
>>497
BringWindowToTopはどう?
500:497
07/11/26 23:48:53
>>499 トン
これもいいな
コードがすっきりした
表に持ってきたウィンドウの再描画が完了したのを検地したのを知る方法ってある?
タイマーで1秒くらい待ってから、ってやってるけどエレガントじゃない
501:デフォルトの名無しさん
07/11/27 00:09:25
FindWindow
502:デフォルトの名無しさん
07/11/27 04:34:26
プログラムの実行中に、ウィンドウが常に最前面に表示されるようにウィンドウスタイルを変更したいです。
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_TOPMOST);
SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
うまくいきません。助けてケロ
503:デフォルトの名無しさん
07/11/27 05:10:48
てかWS_EX_TOPMOSTが付いてれば後ろに引っ込んだりしないだろ
…他にWS_EX_TOPMOSTを持ってるウィンドウがなければ
504:デフォルトの名無しさん
07/11/27 05:17:10
>>502
なんでそこまでいっておいて、SetWindowPosを調べないんだ?
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
これだけでいい。
SetWindowLongはいらない。
505:デフォルトの名無しさん
07/11/27 09:26:31
SetWindowLong入らない?
506:デフォルトの名無しさん
07/11/27 09:39:24
XPの制限ユーザー上で実行するとはProgramFiles以下に書き込めません。
Vistaではこのようなファイル操作はVirtualStoreにリダイレクトされるようです。
実際のプログラムで設定ファイルを保存する場合は、
実行されたパスが読み書き可能なものであるか? Yes→実行されたパスに書き込み
No↓
ユーザーディレクトリ(AppDataなど)を取得し、そこに書き込み
このような動作が必要だと思います。
これをどのwindowsでも確実に動作させるにはどのようなAPIを使えばいいのでしょうか。
507:デフォルトの名無しさん
07/11/27 09:45:01
>>505
CreateWindowExの段階でWS_EX_TOPMOST付けてるなら要らないと思うけど
508:デフォルトの名無しさん
07/11/27 09:45:53
>>506
常にユーザディレクトリに書けばいいやん
509:デフォルトの名無しさん
07/11/27 11:04:14
>実行されたパスが読み書き可能なものであるか? Yes→実行されたパスに書き込み
この考えがそもそも間違い
ユーザーディレクトリに置くかレジストリを使用すべき
510:デフォルトの名無しさん
07/11/27 11:33:00
共用というのであれば、それなりのアクセス権もってAll Usersに置けばいいし。
511:デフォルトの名無しさん
07/11/27 11:37:09
どうしてもやりたければOSのバージョンを取得してやればいいんじゃね
512:デフォルトの名無しさん
07/11/27 12:38:15
>>500
InvalidateRectしてからUpdateWindowすればWM_PAINTが完了するまで待てるけど
あれって他プロセスのウィンドウに使えたかな?
513:デフォルトの名無しさん
07/11/27 12:40:47
WH_CALLWNDPROCRETを見てればWM_PAINTの処理が終わったかは分かる
こんなことでフックするなんて蛇足にも程がある気がするけど
514:デフォルトの名無しさん
07/11/27 13:42:59
この場合、InvalidateRectが無くてもいいでしょう。
UpdateWindowだけで再描画されなくても、WM_PAINTは抜けてるって事だし。
515:デフォルトの名無しさん
07/11/27 14:24:24
インストールせずにスタンドアローンで使うことを想定しているのですが、
万が一ユーザーがProgramFiles以下に置いた場合でも正常に動作させられるようにしたいのです。
516:デフォルトの名無しさん
07/11/27 14:26:44
ユーザーがProgramFiles以下に置いた場合でも置かない場合でも、
常にユーザディレクトリに書いとけばいつでも正常に動作する
517:デフォルトの名無しさん
07/11/27 14:27:36
だったらなおさら、どこに配置されようとAppDataを使うべきだろ
System32に入れる奴だっているかもしれないんだし(もっともXP以前ならそこでも読み書きできるが)
518:デフォルトの名無しさん
07/11/27 14:28:28
>>515
たぶん、あなたが言いたいそれを「スタンドアローン」とは言わないと思う。
Readme にでも注意書きを書いておけば、わざわざ Program Files に
配置するスキルがあるユーザなら、意味をくみ取ってくれるんじぇね?
519:デフォルトの名無しさん
07/11/27 14:31:25
専用のインストーラ・アンインストーラを設けないなら、
ユーザフォルダやレジストリに情報残すと削除がめんどいってのは同意するけども。
520:デフォルトの名無しさん
07/11/27 16:18:05
>>515
気持ちは分かるけど、妙な俺様仕様を作らないほうがいいよ。
OSが推奨する共通の方式に従ったほうが
安全だしセキュアだし管理しやすいし将来の互換性も期待できるし
結果ユーザにとっても使い勝手が良いから。
521:デフォルトの名無しさん
07/11/27 17:35:43
>>503-505
レスありがとう
解決した。
だけど、SetWindowPos に指定するフラグで、HWND_TOPMOSTはドキュメントに載ってるが
HWND_NOTOPMOSTはヘッダー見て初めて知った
最前面化:SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
最前面化解消:SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
でOKだた
522:デフォルトの名無しさん
07/11/27 17:36:45
そういやexeあるフォルダのの下にファイル作るプログラム、そのままVistaでちゃんと動いてるなと思って
ファイル探したら、ユーザーの下のVirtualStore\Program Files (x86)\xxx の下にできてたわ。
勝手にマッピングしてくれるみたいだな。
523:デフォルトの名無しさん
07/11/27 17:56:19
>>520
MSが互換性に気をつけると思っているのですか
524:デフォルトの名無しさん
07/11/27 18:02:56
実際気をつけてるよ
525:デフォルトの名無しさん
07/11/27 18:17:32
>>522を下位互換性と呼ばずになんと呼ぶと?
526:デフォルトの名無しさん
07/11/27 18:18:56
>>525
新機能
527:デフォルトの名無しさん
07/11/27 18:28:47
GetSysColorBrush(COLOR_***)の結果と、HBRUSH(COLOR_*** + 1) って使用上で何か違うの?
528:デフォルトの名無しさん
07/11/27 18:46:04
>>524
なぜIEとFirefoxでは表示が異なるのですか?
529:デフォルトの名無しさん
07/11/27 18:51:40
Firefox の仕様準拠度が低いからだな
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4228日前に更新/231 KB
担当:undef