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


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

Win32API質問箱 Build51
501 名前:デフォルトの名無しさん :2007/04/03(火) 12:59:26
>>499
RGBQUAD の rgbReserved が 0 デフォルトなんだよね…
1-alpha と alpha がごっちゃごちゃだわ

502 名前:デフォルトの名無しさん :2007/04/03(火) 13:28:06
>>500
せめてもう少しマトモな書き方ができないものか

503 名前:デフォルトの名無しさん :2007/04/03(火) 13:52:26
LivedoorStreamingRecording()

504 名前:デフォルトの名無しさん :2007/04/03(火) 14:01:01
>>500
物理的にライン出力と入力を線でつないで録音するといいよ。

505 名前:デフォルトの名無しさん :2007/04/03(火) 15:08:08
>>503
探したじゃないかw

506 名前:デフォルトの名無しさん :2007/04/03(火) 19:28:29
プログラム中で生成したカラーのビットマップをマウスカーソルに
設定するにはどうしたらいいでしょうか? マウス用のリソースを
用意せずにリアルタイムにマウスカーソルを書き換えたいのです。


507 名前:デフォルトの名無しさん :2007/04/03(火) 19:54:33
win32APIの勉強し始めたばかりのオレが答えてみる
マウス表示を消してマウス位置を調べてそこにBMPを描画すればいいんじゃね?

508 名前:デフォルトの名無しさん :2007/04/03(火) 19:56:48
CreateCursorしといて、WM_CURSORとかでSetCursorでなくて?
システムグローバルに書き換えたい、というなら話は別だが

509 名前:デフォルトの名無しさん :2007/04/03(火) 20:17:44
よろしくお願いしまっす。

SetForeGroundWindow等でもフォアグラウンドになったりしない
ウィンドウってできないんでしょうか。

現在はWS_EX_NOACTIVATEをつけて、
WM_MOUSEACTIVATEにMA_NOACTIVATEANDEATを返すようにして
普通ではアクティブ化しないようになっています

具体的にはツールチップのようなウィンドウを
マウ筋の「スクロールを監視」に引っ掛からないようにしたいんですが。
当該ウィンドウ上でホイールを回転させると
アクティブ化しないまでも他のウィンドウのフォーカスを奪ってしまうんです


510 名前:デフォルトの名無しさん :2007/04/03(火) 20:30:48
制御したい動作のはフォアグラウンド化なのか、アクティブ化なのか、フォーカス持ちなのか。

511 名前:509 :2007/04/03(火) 21:02:37
どうも。言葉が曖昧ですんません
現在アクティブなウィンドウが非アクティブにならなきゃいいんです。。
つまりアクティブ化しないように出来ませんかってことで

512 名前:506 :2007/04/03(火) 21:02:43
>>508
CreateCursorを調べてみましたが、モノクロのビットマップカーソルは
作成できるようです。今回はカラー(24bit以上か、せめて16bit以上)
のマウスカーソルを作りたいのです。

システムグローバルではなくて、自アプリのカーソルのみです。

>>507
その方法だと、自アプリの縁を少しはみ出した状態で(ホットスポットが
自アプリ内)、クライアント領域の外にマウスが描画されないです。

513 名前:506 :2007/04/03(火) 21:11:20
カラーのマウスカーソルに関しては、CreateIconIndirectっていうのを
見つけました。

514 名前:デフォルトの名無しさん :2007/04/03(火) 21:40:59
>>512
ttp://msdn2.microsoft.com/en-us/library/ms648379.aspx

515 名前:デフォルトの名無しさん :2007/04/03(火) 23:23:11
Response & Balance 2600cc Dohc Engine Twin Turbo

516 名前:デフォルトの名無しさん :2007/04/04(水) 01:19:05
>>511
違う方法になるけどWS_EX_TRANSPARENTは駄目?

517 名前:509 :2007/04/04(水) 02:20:26
>>516
ありがとうございます。

マウスホイールが透過するようになりました
が、クリックも透過してしまいます。
なんか情報後出しになってしまいましたが。


518 名前:517 :2007/04/04(水) 02:36:46
>>517
WM_COMMANDを監視してマウ筋から送られてくるコマンド(message)に対して
return値をごにょごにょする

519 名前:デフォルトの名無しさん :2007/04/04(水) 06:46:10
>>509
WM_WINDOWPOSCHANGINGでSWP_NOACTIVATEを強制的に立てる

520 名前:デフォルトの名無しさん :2007/04/04(水) 09:52:27
マウスフックを使用したプログラムを作成しているのですが、
システムフックが上手く機能しません。以下の事例と全く同じ現象です。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200305/03050042.txt
他のプログラムのソースを参考にしたいので、何かあれば教えて下さい。
お願いします。<(_ _)>

521 名前:デフォルトの名無しさん :2007/04/04(水) 10:32:21
>>520
その先読んでみたけど仕様を勘違いしているただの間抜けにしか見えないんだが

522 名前:デフォルトの名無しさん :2007/04/04(水) 11:56:15
ウィンドウ上にボタンを配置し、クリックで新しいウィンドウを表示するプログラムを作成しています。
クリックで呼び出される側は  WM_DESTROY メッセージが来たときに

  SendMessage(hWnd, WM_CLOSE, 0, 0L);

として終了しています。
で、質問なのですがクリックで表示するウィンドウのCreateWindowで取得したハンドルは
クローズしなくてもリークしませんか?
しないといけない場合、どこですればいいのでしょうか?


523 名前:デフォルトの名無しさん :2007/04/04(水) 14:50:19
親ウィンドウが破壊されるとき、
子ウィンドウも一緒に破壊される。

524 名前:デフォルトの名無しさん :2007/04/04(水) 17:07:22
rand()の代替ルーチンがあったら教えてください

525 名前:デフォルトの名無しさん :2007/04/04(水) 17:17:03
CryptGenRandom
再現性で問題が出るかもしれないが。

526 名前:デフォルトの名無しさん :2007/04/04(水) 17:17:12
Win32APIにはないから自分で作れ。

527 名前:デフォルトの名無しさん :2007/04/04(水) 17:19:42
まあ2000以降は仕様上プロセスが終了したら基本的にオブジェクトは何も残らんけどな

528 名前:デフォルトの名無しさん :2007/04/04(水) 23:19:10
ttp://r.tabelog.com/restaurant/images/review/59/59343_29832.jpg
お○んこ画像

529 名前:デフォルトの名無しさん :2007/04/04(水) 23:51:00
お○んこ!しかも無修正!!

530 名前:デフォルトの名無しさん :2007/04/04(水) 23:51:07
>>528
うひょ〜、よだれが出てくるぜ

531 名前:デフォルトの名無しさん :2007/04/04(水) 23:55:44
>>528
もう我慢できない

532 名前:デフォルトの名無しさん :2007/04/05(木) 00:00:44
>>528
綺麗に処理してあるな

533 名前:デフォルトの名無しさん :2007/04/05(木) 00:04:27
こんやのおかずにちょうどいい。くれ。

534 名前:デフォルトの名無しさん :2007/04/05(木) 00:11:10
俺、今がちょうどこういうのが欲しくなる時間なんだ

535 名前:デフォルトの名無しさん :2007/04/05(木) 00:11:34
>>527
終了したプロセスへのハンドルをつかんでい00る、別プロセスがあるかもしれない。

536 名前:デフォルトの名無しさん :2007/04/05(木) 01:22:33
> つかんでい00る
00ってなんじゃらほい

537 名前:デフォルトの名無しさん :2007/04/05(木) 02:19:39
パーマン絵描き歌を思いだした

538 名前:デフォルトの名無しさん :2007/04/05(木) 09:51:06
ここ何スレだよw


539 名前:デフォルトの名無しさん :2007/04/05(木) 11:19:22
プロセスの実行時間を計るのはどうしたらいいんでしょうか?
実時間じゃなくてプロセスの一部の処理に使ったユーザー時間のようなもの
が欲しいです。
PDHとやらを使うのかと思ったんですがよく分かりません。

540 名前:デフォルトの名無しさん :2007/04/05(木) 12:15:38
>>539
timeGetTimeの差分じゃダメ?

541 名前:デフォルトの名無しさん :2007/04/05(木) 12:20:28
GetProcessTimesじゃらめぇ?

542 名前:デフォルトの名無しさん :2007/04/05(木) 12:49:32
>>539
>実時間じゃなくてプロセスの一部の処理に使ったユーザー時間のようなもの
>が欲しいです。

ここを詳しく。
処理に費やした時間を計測したいのか?


543 名前:デフォルトの名無しさん :2007/04/05(木) 12:58:29
CPU時間でしょ。
>>541でおk

544 名前:539 :2007/04/05(木) 13:24:19
>>542
そうです。Unixのtimeの結果のようなものを計算したいんです。
GetProcessTimesを使ってみます。ありがとうございました。

545 名前:デフォルトの名無しさん :2007/04/05(木) 13:46:06
モジュール内で抜けるまでどれくらい時間がかかてtるのかを計測したいなら
GetTickCountでいいような希ガス

546 名前:デフォルトの名無しさん :2007/04/05(木) 16:01:50
すいませんWin32API入門の第72章リソースで詰まってしまいました
BorlandC++にBCCFormを入れてます

EDGEで32×32のtest.bmpを作って、アイコンとして読み込みたいんですが
LoadIcon()は分かるんですが、そこに至るまでが???で

宜しくお願いします

547 名前:デフォルトの名無しさん :2007/04/05(木) 17:00:16
>>546
「メニュー」→「プロジェクト」→「プロジェクトに追加」
ファイルの種類を「リソースファイル (*rc)」にして、作成したrcファイルを指定する。

これだけで、後はその例通りに行けるよ。

548 名前:デフォルトの名無しさん :2007/04/05(木) 18:21:32
>>547
レスありがとうございます
でもどうやらどつぼにはまったようで、さっぱり分かりません

.RES拡張子のファイルがないので
リソースコンパイラがよく分かってないようです

549 名前:デフォルトの名無しさん :2007/04/05(木) 18:25:35
BorlandC++なら自前で .res にコンパイルしなくても
コンパイラが自動でやってくれる。

550 名前:デフォルトの名無しさん :2007/04/05(木) 18:45:41
FILETIME構造体の
DWORD dwLowDateTimeと DWORD dwHighDateTime
の各ビットの意味教えてください。
年と月と日と時間が何ビットに書かれているかわかりません。


551 名前:デフォルトの名無しさん :2007/04/05(木) 18:53:36
>>546
ビットマップファイルとアイコンファイルは別物なので
まずbmp→icoの形式変換から始めなはれ

>>550
ここがそのまんま役に立ちそう
http://wisdom.sakura.ne.jp/system/winapi/win32/win112.html

552 名前:デフォルトの名無しさん :2007/04/05(木) 18:54:25
直接ビット見たことないな

553 名前:デフォルトの名無しさん :2007/04/05(木) 18:54:52
>>550
http://msdn2.microsoft.com/en-us/library/ms724284.aspx
1601年1月1日 (UTC)からの100ナノ秒単位での経過時間。
1つの64ビット整数だと見なせばよい(実際にそう扱うならアラインメントに注意)。

そういうわけでどこのビットが年とか月とかそういう性質のものではない。
だから素直にFileTimeToSystemTimeでも使っていなさい。

554 名前:デフォルトの名無しさん :2007/04/05(木) 19:17:29
素直にfiletimetosystemtime使ったほうが早そうですね
こちらで検討してみます。
ありがとうございました


555 名前:デフォルトの名無しさん :2007/04/05(木) 19:25:07
Notepadのように、フォームの領域一杯にEDITを表示してフォームのサイズ変更に追従させたい。
ドットネットで言う
textBox1.Dock = DockStyle.Fill;
をやりたいのですが

これってCreateWindow時にウィンドウスタイルのようなもので設定するとばかり思っていたのですが
そのような設定が見あたりません。
もしかしてウィンドウプロシージャのWM_SIZEのところで、自分でEDITのサイズを変更しないといけないんでしょうか?

556 名前:デフォルトの名無しさん :2007/04/05(木) 19:28:14
そのまんまサイズ渡してやるだけ

557 名前:デフォルトの名無しさん :2007/04/05(木) 19:42:20
>>549 >>541
レスありがとう

EDGEに.icon保存形式があったのでそれにしました
色々弄ってみて最後にBCCデベロッパーのDOSアイコン(コマンド実行)から
brc32 test.rc main.exe と入力したら
何とかmain.exeのアイコンだけ変えることができました
exe起動後のウィンドウタイトルバーの横のアイコンが変わらないので
また弄ってみます

558 名前:デフォルトの名無しさん :2007/04/05(木) 19:45:32
>>557
それはウィンドウクラスのアイコンを設定すればいい

559 名前:デフォルトの名無しさん :2007/04/05(木) 19:49:08
>>556
できました。
覚悟はしていたが本当に全部で自分でやらないといけないんだな・・。

560 名前:デフォルトの名無しさん :2007/04/05(木) 19:55:08
>>558
この部分のことですよね? winc.hIcon = LoadIcon();
一応LoadIcon(hInstance, TEXT("KITTY") );とやってるんですがならないので
初めからやり直してみます

561 名前:デフォルトの名無しさん :2007/04/05(木) 20:21:26
>>140
http://www.codeproject.com/useritems/MyCell_control.asp

562 名前:アイコンで聞いた者 :2007/04/05(木) 21:02:27
何とか上手くやれるようになりました!
何度も聞いて申し訳なかったです
レスしてくれたみなさんありがとうございました

563 名前:デフォルトの名無しさん :2007/04/05(木) 23:18:48
>>561
すげえw

564 名前:デフォルトの名無しさん :2007/04/06(金) 04:31:37
デモ落としてみたけど根性ありすぎwww

565 名前:デフォルトの名無しさん :2007/04/06(金) 10:09:34
>>561
これWin32APIで作られてるのか!?

566 名前:デフォルトの名無しさん :2007/04/06(金) 10:13:48
>>561
軽く漏らした

567 名前:デフォルトの名無しさん :2007/04/06(金) 11:01:24
>>565
思いっきりWTLって書いてあるじゃねえか

568 名前:デフォルトの名無しさん :2007/04/06(金) 19:05:55
mcisend

569 名前:デフォルトの名無しさん :2007/04/06(金) 19:10:36
VC++とplatformSDKで
mcisendcommad()でデバイスを開くときに
MCI_OPEN_PARMS構造体を使う場合でデバイスタイプにMPEGVideoを指定する事は出来るんでしょうか?
mmsystem.hにはMCI_DEVTYPE_SEQUENCERまでしか定義されてないようですが…

570 名前:デフォルトの名無しさん :2007/04/06(金) 21:05:13
64ビット環境では___asmが使えないってのは本当なの?


571 名前:は@c178.016.c3-net.ne.jp ◆cplnFO9T0I :2007/04/06(金) 21:30:33 ?2BP(1000)
リストビューを使うためにLV_COLUMN構造体を定義しようとしても「定義されていない識別子です」と突っぱねられます。
VC.net20003を使っているのですが、どうすればいいでしょう。
前に痛い目を見たので#define WIN32_LEAN_AND_MEANはカットしているんですがね....

572 名前:デフォルトの名無しさん :2007/04/06(金) 21:30:39
>>570
スレ違い

573 名前:デフォルトの名無しさん :2007/04/06(金) 21:35:36
UNIXでの ls -a -r に相当するコードが知りたいです。
隠しファイル等を含む全てのファイルを再帰的に取得する方法を教えてください。

574 名前:デフォルトの名無しさん :2007/04/06(金) 21:37:21
>>573
っ FindFirstFile
っ FindNextFile
っ FindClose

575 名前:デフォルトの名無しさん :2007/04/06(金) 21:38:24
UNIX系のファイルシステムに、そもそも隠しファイルという概念など無い。
lsが勝手にフィルターしているだけ。

576 名前:デフォルトの名無しさん :2007/04/07(土) 02:09:16
>>575
それを隠しファイルというんじゃないのか

WinだってExplorerが勝手にフィルターしてるだけだし

577 名前:デフォルトの名無しさん :2007/04/07(土) 02:18:42
Win(というかFATとNTFS)にはファイル属性に隠しファイルビットがあるだろ
つーか質問はWindows上で隠しファイルを含めて検索する方法じゃないのか?
もう回答出てるけど

578 名前:デフォルトの名無しさん :2007/04/07(土) 02:26:51
VC2005でダイアログボックスを作りたいのですが、どうやって作ったらいいのかわかりません。
VC2003だったらリソースの追加でできたのですがorz
ググッてみましたがわかりませんでしたので、教えてもらえると助かります。


579 名前:デフォルトの名無しさん :2007/04/07(土) 02:56:36
>>578
Express Editionにはリソースエディタは付属しないので作れない。
別途にリソースエディタを用意するべし。

580 名前:デフォルトの名無しさん :2007/04/07(土) 03:04:14
リソースエディタとはなんですか?
リソースの作り方すらわからない(´・ω・`)

581 名前:デフォルトの名無しさん :2007/04/07(土) 03:07:18
これだからVCはオススメできない。

とりあえず、今までに作ったプロジェクトの拡張子が.rcの奴をテキストエディタで開け

582 名前:デフォルトの名無しさん :2007/04/07(土) 03:12:15
開きましたー!!

583 名前:デフォルトの名無しさん :2007/04/07(土) 03:13:34
>>580
2003で作ったときには開発環境でダイアログボックスを作れたでしょ?
あれは内部的にリソースエディタと呼ばれるツールを呼び出してただけなの
んでExpress Editionではその機能が削除されてるので作ることができない。

作ることができないといってもVCの開発環境で作ることができないだけで
リソースをプログラムから読み込むといったことは可能なので
フリーソフトのリソースエディタでダイアログを作るしかない、ってこと

584 名前:デフォルトの名無しさん :2007/04/07(土) 03:20:29
>>583
親切にありがとう。

585 名前:デフォルトの名無しさん :2007/04/07(土) 07:52:10
リソースって言っても二種類の意味で使われてない?

バイナリで書かれたリソースとテキストで書かれたのリソース
どう呼び分ければいいんだろう??

586 名前:デフォルトの名無しさん :2007/04/07(土) 07:52:42
「書かれたリソース」の間違い

587 名前:デフォルトの名無しさん :2007/04/07(土) 08:17:00
っ「リソーススクリプト」

588 名前:デフォルトの名無しさん :2007/04/07(土) 08:19:44
リソース
 ├フォーマットがテキストの
 └フォーマットがバイナリの

589 名前:デフォルトの名無しさん :2007/04/07(土) 09:02:01
コンパイル済みリソースがバイナリリソース。

590 名前:デフォルトの名無しさん :2007/04/07(土) 17:13:30
テキストのリソースファイル(.rcファイル)+バイナリ(画像など)を
リソースコンパイラでコンパイルして .res ファイルをつくり
リンカで EXEにバインドする。直接.resを編集するツールもある。

591 名前:デフォルトの名無しさん :2007/04/07(土) 21:12:44
僕ハッカー

592 名前:デフォルトの名無しさん :2007/04/07(土) 21:15:17
僕バッカー

593 名前:デフォルトの名無しさん :2007/04/07(土) 21:17:57
バカバッカー

594 名前:デフォルトの名無しさん :2007/04/07(土) 21:18:00
バカばっかー

595 名前:デフォルトの名無しさん :2007/04/07(土) 21:57:10
けこん

596 名前:デフォルトの名無しさん :2007/04/08(日) 02:15:51
winAPIでテキストエディタに文字列を書き込んで保存したいのですが、どのようにしたらよいですか?
VC使って組んでいます。

597 名前:デフォルトの名無しさん :2007/04/08(日) 02:18:20
意味が分からんな
外部のテキストエディタに文字を送り込むのか?
自前でテキストエディタを作るのか?

…単にテキストエディタじゃなくてテキストファイルってオチか?

598 名前:デフォルトの名無しさん :2007/04/08(日) 04:21:34
普通にfopen、fwrite?

599 名前:デフォルトの名無しさん :2007/04/08(日) 07:55:34
他のアプリケーションのウインドウの座標と大きさを取得するにはどうすれば良いですか?
また、座標と大きさを指定するにはどうすれば良いですか?

600 名前:デフォルトの名無しさん :2007/04/08(日) 08:00:51
GetWindowRect
MoveWindow

プロセス跨いで使えたかはシラネ

 春 の 香 り 乙 !

601 名前:デフォルトの名無しさん :2007/04/08(日) 08:51:32
>>600
ありがとうございました

602 名前:596 :2007/04/08(日) 10:28:48
>>597
テキストファイルの間違いでしたw

603 名前:デフォルトの名無しさん :2007/04/08(日) 13:44:29
マウスフックについての質問です。MOUSEHOOKSTRUCT構造体の内容を
フックプロシージャから他のウィンドウプロシージャへ渡したいのですが、
上手くいきません。フックプロシージャのコードは次の通りです。
LRESULT CALLBACK HookProc(int nCode,WPARAM wp,LPARAM lp)
{
COPYDATASTRUCT cds;
if (nCode < 0) CallNextHookEx(hHook,nCode,wp,lp);
cds.dwData = wp;
cds.cbData = sizeof(MOUSEHOOKSTRUCT);
cds.lpData = (PMOUSEHOOKSTRUCT)lp;
SendMessage(hWnd,WM_COPYDATA,NULL,(LPARAM)&cds);
return CallNextHookEx(hHook,nCode,wp,lp);
}
間違いがあれば指摘して下さい。又、参考になるソースがあれば教えて下さい。
お願いします。<(_ _)>

604 名前:デフォルトの名無しさん :2007/04/08(日) 13:54:02
相手が別プロセスなら自メモリ領域のポインタを渡しても無意味。
相手のメモリ内に領域を確保してそのポインタを渡す。

605 名前:デフォルトの名無しさん :2007/04/08(日) 14:12:44
Windows XPでのCPU使用率の取得方法を教えてください

606 名前:603 :2007/04/08(日) 14:19:45
>>604
そのためにWM_COPYDATAメッセージを使用しています。ファイルマッピングオブジェクトの
内容を参照するので、メモリを共有する必要は無いと思ったのですが。
http://yokohama.cool.ne.jp/chokuto/advanced/copydata.html

607 名前:デフォルトの名無しさん :2007/04/08(日) 14:22:09
>>603
その中だとhWndが一番怪しい。
SendMessageするときにhWndにちゃんとした値が入ってる?

608 名前:603 :2007/04/08(日) 14:36:11
問題ありません。
「猫でもわかる」の162章のように、フックプロシージャ内での処理には成功しました。

609 名前:デフォルトの名無しさん :2007/04/08(日) 14:49:03
そもそもうまくいかないって何が巧くいってないんだ?
WM_COPYDATA が hWnd の WindowProc に来ないのか、来た WM_COPYDATA からデータが取れないのか

610 名前:603 :2007/04/08(日) 15:00:54
>>609
WM_COPYDATAメッセージは届くのですが、COPYDATASTRUCT構造体の内容の参照が上手くいきません。
フックは次のようにセットしています。
#define EXPORT __declspec (dllexport)
#pragma data_seg(".shared")
static HHOOK hHook = NULL;
static HWND hWnd = NULL;
#pragma data_seg()
EXPORT HHOOK SetHook(const HWND hCaller)
{
hWnd = hCaller;
hHook = SetWindowsHookEx(WH_MOUSE,(HOOKPROC)HookProc,hInst,0);
return hHook;
}
ウィンドウプロシージャでは次のように処理しています。
case WM_COPYDATA:
if (((PCOPYDATASTRUCT)lp)->dwData == WM_NCLBUTTONDOWN) {
pmhs = (PMOUSEHOOKSTRUCT)lp;
if (pmhs->wHitTestCode == HTCAPTION) {
SetWindowText(pmhs->hwnd,"猫でもわかるフック");
}
}
break;


611 名前:デフォルトの名無しさん :2007/04/08(日) 15:22:04
>>610
> pmhs = (PMOUSEHOOKSTRUCT)lp;
pmhs = (PMOUSEHOOKSTRUCT)((PCOPYDATASTRUCT)lp)->lpData;
だろ常識的に考えて

612 名前:603 :2007/04/08(日) 15:38:41
>>611
すみません。ウィンドウプロシージャの処理を訂正します。(^_^;)
PCOPYDATASTRUCT pcds;
PMOUSEHOOKSTRUCT pmhs;
case WM_COPYDATA:
pcds = (PCOPYDATASTRUCT)lp;
pmhs = (PMOUSEHOOKSTRUCT)(pcds->lpData);
if (pcds->dwData == WM_NCLBUTTONDOWN) {
if (pmhs->wHitTestCode == HTCAPTION) {
SetWindowText(pmhs->hwnd,"猫でもわかるフック");
}
}
break;
ローカルフックには成功したのですが、グローバルフックに失敗します。

613 名前:デフォルトの名無しさん :2007/04/08(日) 16:03:20
SetWindowText が気になって仕方ないが、
WindowProc 内での pcds->dwData とか pmhs->wHitTestCode とかはどうなんだ?
正しい値を示してるのか?

614 名前:603 :2007/04/08(日) 16:46:12
他のアプリケーションにフックDLLがロードされていることは確認できたのですが、
COPYDATASTRUCT構造体の内容が空のようです。

615 名前:デフォルトの名無しさん :2007/04/08(日) 18:41:35
http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_setwindowtext.asp
> ほかのプロセス内のコントロールのテキストを設定するには、SetWindowText 関数を
> 呼び出すのではなく、直接 WM_SETTEXT メッセージを送ります。

何でフックがうまくいってないと思い込めるんだかさっぱり分からん。
明らかに間違ってたソースも「訂正します」の一言で済まされるし。

616 名前:603 :2007/04/08(日) 18:54:38
あたながたが思いのほか低スキルだったのでがっかりしています。
2ちゃんもたいしたことないですね。

617 名前:デフォルトの名無しさん :2007/04/08(日) 18:56:30
↓真603による「616は私ではありません」というレス

618 名前:デフォルトの名無しさん :2007/04/08(日) 18:56:33
615は無視かよ

619 名前:603 :2007/04/08(日) 19:50:46
>>615
SendMessage(pmhs->hwnd,WM_SETTEXT,0,(LPARAM)"猫でもわかるフック");
としたのですが、ウィンドウタイトルは変更されません。
間違ったソースを掲載したことについては深くお詫びします。大変申し訳ありませんでした。

620 名前:デフォルトの名無しさん :2007/04/08(日) 20:43:43
>>619
dll.defに
SECTIONS
.shared SHARED READ WRITE
が有るか確認するとか

char sz[100];
wsprintf(sz, "pmhs->hwnd:%p ", pmhs->hwnd);
SetWindowText(hWndExe, sz);
として様子を見るとか

621 名前:デフォルトの名無しさん :2007/04/08(日) 23:19:23
うまくいかないときには何がおきてるのかを見極めて原因究明。
期待通りにいくかいかないかだけを判断してたらいつまでたってもなおらん

622 名前:デフォルトの名無しさん :2007/04/09(月) 00:44:15
デバッガ使ってないのかね?
1ステップずつ確認すれば、問題点はすぐに分かると思うが。

623 名前:デフォルトの名無しさん :2007/04/09(月) 00:47:43
フックプロシージャのステップ実行なんて出来るの?

624 名前:デフォルトの名無しさん :2007/04/09(月) 01:14:11
フック先のプロセスにアタッチしろ。

625 名前:デフォルトの名無しさん :2007/04/09(月) 10:09:06
別にデバッガ使わなくてもログをファイルに書き出せばいいだけだし

626 名前:603 :2007/04/09(月) 10:33:11
>>620-624 レスありがとうございます。
>>620 モジュール定義ファイルは作成済みです。内容は次の通りです。
LIBRARY hook
SECTIONS
.shared READ WRITE SHARED
EXPORTS
HookProc @1
ResetHook @2
SetHook @3
pmhs->hwndの値をウィンドウプロシージャ内で出力したところ、
ローカルフックでは00060AA2でした。グローバルフックでは何も出力されませんでした。
グローバルフックではWM_COPYDATAメッセージが届いていないようです。(^_^;)
>>622 デバッガは使用していません。OutputDebugStringを使って変数の値をトレースしています。
>>623 プロセス間を跨いだデバッグ作業はどのように行うのでしょうか?
>>624 明示的にアタッチする方法があるのですか?
>>621 今までの状況を整理してみました。
・ローカルフックには成功し、グローバルフックには失敗する。
・ローカルフックの場合、フックDLLがロードされ、WM_COPYDATAメッセージが届く。
・グローバルフックの場合、フックDLLはロードされるが、WM_COPYDATAメッセージは届かない。

627 名前:デフォルトの名無しさん :2007/04/09(月) 11:00:13
WindowsXPの[ユーザのログオフ]−[ユーザー切替]−[指定したユーザーのログオン]
という作業をプログラムから操作したいんですけど可能でしょうか?
可能なら使用するAPIを教えて頂けないでしょうか?

628 名前:デフォルトの名無しさん :2007/04/09(月) 11:05:12
不可

629 名前:627 :2007/04/09(月) 11:11:17
やっぱりですね
即レスありがとうございました。

630 名前:デフォルトの名無しさん :2007/04/09(月) 11:31:48
>>627
Ginaで何とかなるでしょ。Ginaでぐぐってみたら?

631 名前:デフォルトの名無しさん :2007/04/09(月) 11:40:23
>>627
レジストリに自動ログオンの設定を書き込んで再起動

632 名前:デフォルトの名無しさん :2007/04/09(月) 11:58:25
>>626
プロセスにアタッチするのははDLLをデバッグする場合の基本操作なんだが、
そんな当たり前のことを自分で調べられないのか?

633 名前:デフォルトの名無しさん :2007/04/09(月) 14:27:57
グローバルフック成功してないんじゃね?

634 名前:デフォルトの名無しさん :2007/04/09(月) 15:14:14
Windowsで標準入力や出力がリダイレクトされてるかどうか知る方法を教えてください。

635 名前:デフォルトの名無しさん :2007/04/09(月) 15:56:31
現在VS2005を使っているのですが、作成してるネイティブアプリのVisualStyleを切るにはどの様な方法がよろしいでしょうか?
よろしくお願い致します。

636 名前:デフォルトの名無しさん :2007/04/09(月) 16:28:21
まにふぇすとぶっこわす

637 名前:デフォルトの名無しさん :2007/04/09(月) 17:01:54
むしろバージョン5のcomctl32.dllを使うようにマニフェスト書け

638 名前:デフォルトの名無しさん :2007/04/09(月) 17:27:19
>>626
コードを一から書いたら、グローバルフックでもタイトルバーが変わった。
期待した動作にならなかったら、一から作り直すのも手かと。

つか、サンプルコードのコピペはおすすめできない。

639 名前:デフォルトの名無しさん :2007/04/09(月) 18:06:07
>>636-637
レスありがとうございます。
というか何か勘違いしてました。。
VS2005では勝手に有効になると思ってましたがならないんですね・・・
この前作ったときはなってたような・・・気のせいか・・・orz

640 名前:デフォルトの名無しさん :2007/04/10(火) 00:34:29
ツリービューのノードのアイコンを一つだけ変える場合って
どうすればええすか?
Expandしたら広がったフォルダを表示とか。


641 名前:デフォルトの名無しさん :2007/04/10(火) 08:34:36
TVM_SETIMAGELIST で ImageList セット
TVM_SETITEM での fMask に TVIF_IMAGE|TVIF_SELECTEDIMAGE なり TVIF_STATE なり...

642 名前:デフォルトの名無しさん :2007/04/10(火) 12:49:04
USBリムーバブルハードディスクのデバイス識別子?(USB\Vid_04xx&Pid_10xx)とかから
割り当てられている論理ディスクのボリューム名を取得したいのですが
どの辺を参照したらいいでしょうか。
「管理ツール」→「ディスクの管理」で下側ビューの左側「ディスクn」を右クリックしてプロパティを表示させて、
「ボリューム」プロパティーシートの下側リストビューに表示されているものが欲しいです。

643 名前:デフォルトの名無しさん :2007/04/10(火) 16:50:17
SetMenuContextHelpIdに渡す「ヘルプコンテキスト識別子」ってなんなんですか?
「ヘルプコンテキスト」ってリソースで用意するんでしょうか?
それってどのような物で,どうやって作るんでしょうか?


644 名前:デフォルトの名無しさん :2007/04/10(火) 18:08:33
Win32API を使って、DLL 中のダイアログリソースの PUSHBUTTON の文字列を取得することはできますでしょうか?
FindResource -> LoadResource -> LockResource まではできましたが、文字列の取得が分からない。

645 名前:デフォルトの名無しさん :2007/04/10(火) 18:31:28
自分で解析

646 名前:デフォルトの名無しさん :2007/04/10(火) 21:03:23
>>643のレスで思ったのだが、そーいや、2005からののヘルプはどうなんお?
昔は、HTML Help Workshopとかゴリゴリ作ったが?

http://msdn.microsoft.com/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp?frame=true

ここでいいっけ?


それとも、暗黙でツールが入ってるのかな?

647 名前:デフォルトの名無しさん :2007/04/10(火) 21:10:22
ゲームプログラムで質問ですwin32apiの関数を使うよりdirectxを使った方が画像の描画は早いですか

648 名前:デフォルトの名無しさん :2007/04/10(火) 21:18:57
>>647
ちなみに、何系ゲーム?

649 名前:デフォルトの名無しさん :2007/04/10(火) 21:30:43
シューティング系ゲームです。既にwin32apiで作ったのですが画面のスクロール速度を一定以上にあげるとフレームスキップが起こるです。

650 名前:648 :2007/04/10(火) 21:38:04
>>649
画面更新に速度を要求するなら、
DirectXなんじゃね?

DirectX〜系の別スレがよろしいかと・・・

651 名前:デフォルトの名無しさん :2007/04/10(火) 22:52:12
>>644
MSDN に PEFILE.cpp というサンプルがあって、.exe/.dll の先頭から
.rsrc section を割りだし、section 内のテーブルを追い掛けると、
個々の rsrc leaf に行き付ける例があったと思う。
dialog template の構造は MSDN に説明があった。

ただ、これらを取り出したり、差し替えたりするのに、ファイルとして
開く際、使用中だと開けないことがある。開く際の属性を指定すると
可能なのかも知れないが。

652 名前:デフォルトの名無しさん :2007/04/10(火) 23:30:31
>651
いや、メモリに一度読み込めば問題なし。
昔、ダイナミックにダイアログリソース作ったときはそうやったよ。


653 名前:デフォルトの名無しさん :2007/04/10(火) 23:36:48
GetCommandLine関数を利用する場合、
みんあはや空白の分割とかどしてる?

思いつき関数作ったけど、意見求む。

654 名前:653 :2007/04/10(火) 23:38:46
前半
DWORD OrderCommandLine(LPTSTR lpBuffer, LPDWORD lpcchBuffer)
{
DWORD i, dwLen, dwPos, dwCnt, dwDiv;
TCHAR tcChr;
TCHAR szCmd[0xFFFF];
TCHAR szDmy[0xFFFF];
int fDQ;
LPTSTR lpszCur;

/* 初期化 */
::lstrcpy(szCmd, ::GetCommandLine());
dwLen = (DWORD)::lstrlen(szCmd);
szCmd[dwLen++] = _T('\0');

/* 捜査 */
for (i = 0, dwPos = dwDiv = 0, fDQ = 0, lpszCur = szCmd; i < dwLen; i++, lpszCur++){
tcChr = *lpszCur;
if (tcChr == _T('\"')){
fDQ = !fDQ;
}else
if ((!fDQ) && (tcChr == _T(' '))){
tcChr = _T('\0');
}

szDmy[dwPos++] = tcChr;
if (tcChr == _T('\0')){
dwDiv++;
}
}
szDmy[dwPos++] = _T('\0');


655 名前:653 :2007/04/10(火) 23:39:39
後半
/* 整理 */
dwCnt = 0;
if (dwDiv > 0){
for (i = 0, dwPos = 0, lpszCur = szDmy; i < dwDiv; i++, lpszCur++){
dwLen = (DWORD)::lstrlen(lpszCur);
if (dwLen > 0){
::lstrcpy(&szCmd[dwPos++], lpszCur);
lpszCur += (dwLen);
dwPos += (dwLen -1);
szCmd[dwPos++] = _T('\0');
dwCnt++;
}
}
szCmd[dwPos++] = _T('\0');
}

/* 結果 */
if (lpcchBuffer){
if (*lpcchBuffer >= dwPos){
*lpcchBuffer = dwPos;
if (lpBuffer){
::CopyMemory(lpBuffer, szCmd, dwPos * sizeof(TCHAR));
}
}
}

return dwCnt;
}


656 名前:653 :2007/04/10(火) 23:42:59
DWORD OrderCommandLine(LPTSTR lpBuffer, LPDWORD lpcchBuffer)の
LPTSTR lpBufferはバッファ
LPDWORD lpcchBufferはlpBufferのサイズ(文字単位)の入った変数のポインタ
んでOrderCommandLineは分割した数を返す。

どっかおかしいとこない?

657 名前:デフォルトの名無しさん :2007/04/10(火) 23:48:04
自作せずにCommandLineToArgvWを使ったほうが楽なのでは?

658 名前:653 :2007/04/11(水) 00:01:57
>>657
CommandLineToArgvW関数はしりませんですた... orz
調査してみますね。

659 名前:デフォルトの名無しさん :2007/04/11(水) 00:07:01
main関数のargc, argvは駄目なの?
main関数から始まるけどコンソールプログラムでないというのは変わっているかもしれないけど。

660 名前:デフォルトの名無しさん :2007/04/11(水) 00:13:42
boostにコマンドライン解析があった希ガス

661 名前:デフォルトの名無しさん :2007/04/11(水) 00:25:19
>>659
WinMain関数のLPSTR lpszCmdLine問題があったので、
片手間で作成してみました。
そりゃ、_tmain関数みたいなのが、一番いいですが。

>>660
ttp://www.boost.org/ですよね?
ここも見てみます。


662 名前:デフォルトの名無しさん :2007/04/11(水) 00:25:41
__argv,__argcとかいうのもあったような

663 名前:デフォルトの名無しさん :2007/04/11(水) 00:43:11
Googleからも出てる。
ttp://code.google.com/p/google-gflags/

664 名前:デフォルトの名無しさん :2007/04/11(水) 03:12:11
CommandLineToArgvW以外はスレ違いじゃね?
>>661
_tWinMain
VC++以外や、VC++でもバージョンによっては存在しないみたいだが
その場合はGetCommandLineW
つーかCommandLineToArgvWは_tmainが存在しなかったバージョンのVC++で
GetCommandLineWと組み合わせて使うために提供されていた(だからW版しかない)ので

665 名前:653 :2007/04/11(水) 08:17:09
>>664
情報ありがとうございます。
へー_tWinMain関数ってあるんですかー。

特に変な意識して、関数作る必要もなかったのかな?


一回、整理して考え直してみます。
皆様ありがとうございました

666 名前:デフォルトの名無しさん :2007/04/11(水) 08:55:12
>>644
不可視でダイアログ開いて、GetDlgItemText()したら?


667 名前:デフォルトの名無しさん :2007/04/11(水) 11:33:08
CSV(カンマテキスト)を分割するAPIを教えてください

668 名前:デフォルトの名無しさん :2007/04/11(水) 11:59:02
ない

669 名前:デフォルトの名無しさん :2007/04/11(水) 12:55:54
ウィンドウズの起動時間(timeGetTimeやGetTickCountで返される数値)を変更する方法ありますか?

DirectShow辺りが怪しいので
デバッグで24日間放置した状態にしたいのです


670 名前:デフォルトの名無しさん :2007/04/11(水) 13:05:35
>>669
hookして、好きな値返すとか?

671 名前:デフォルトの名無しさん :2007/04/11(水) 13:13:31
>>668
ADO等で出来なくもない気もするが

672 名前:デフォルトの名無しさん :2007/04/11(水) 13:45:05
猫でもわかる・・の第10章タイマーで、コーディングして実行したところ、
一応動くのですが、文字列が再描画されず、字が重なったようになって
しまいます。この場合、うまく表示するにはどうしたらよいでしょうか?
よろしくお願いします。

673 名前:デフォルトの名無しさん :2007/04/11(水) 13:56:55
大学院レベルの猫にしかわからないってことだね

674 名前:672 :2007/04/11(水) 13:57:59
↑で質問したものです。
InvalidateRect(hWnd, NULL, FALSE);
こいつを
InvalidateRect(hWnd, NULL, TRUE);にしたらなおった。
でも載ってるのは最初のほうですよね。
なんかほかに方法があるのかなぁ

675 名前:デフォルトの名無しさん :2007/04/11(水) 14:01:28
つ SetBkMode

676 名前:672 :2007/04/11(水) 14:04:28
>>675
実装済みです

677 名前:デフォルトの名無しさん :2007/04/11(水) 14:14:29
前と同じ幅の文字で上書きしてないとか

678 名前:デフォルトの名無しさん :2007/04/11(水) 14:33:38
>>676
TRANSPARENT で描画、リクエストをInvalidateRect(...FALSE) にしてたら
672 のように多重の重ね書きになるわけだが?

まぁ、OPAQUEにしたところで、文字列の実描画長が短くなったら
なんらかの方法で背景色で消すコードを書くはめにはなるがね

679 名前:デフォルトの名無しさん :2007/04/11(水) 14:34:58
fillrect

680 名前:デフォルトの名無しさん :2007/04/11(水) 14:41:57
ExtTextoutを結構多用したなあ

681 名前:デフォルトの名無しさん :2007/04/11(水) 16:34:21
質問です。

親のウインドウとは独立した子ウインドウで、親よりは必ず前面に。
ただし他のアプリのウインドウがより前面にある時は(親ともども)きちんとそのウインドウの背面に。

というウインドウをCreateWindowExで簡単に作ることはできないでしょうか。

・子ウインドウは、親ウインドウの中に存在するわけではない(つまりWS_CHILDではない?)
 お絵かきツールのパレットウインドウなんかがこんな感じ。
・WS_EX_TOPMOSTにすると、他のアプリのウィンドウよりも前にきてしまう


682 名前:デフォルトの名無しさん :2007/04/11(水) 16:45:13
殆ど自分で答え言っているような気がす…
親をオーナーにして (WS_CHILD と排他な)WS_POPUP で作れば良いんじゃない?

683 名前:デフォルトの名無しさん :2007/04/11(水) 16:46:37
>>681
WS_POPUPとWS_EX_TOOLWINDOWつけてみたらどう?

684 名前:デフォルトの名無しさん :2007/04/11(水) 16:51:40
>>681
ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows/aboutwindows.asp
>A window can own, or be owned by, another window. An owned window always appears in front of its owner window,
>is hidden when its owner window is minimized, and is destroyed when its owner window is destroyed.

685 名前:デフォルトの名無しさん :2007/04/11(水) 16:56:53
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowfeatures.asp
Owned Windowsのところをよく読め

686 名前:デフォルトの名無しさん :2007/04/11(水) 17:00:46
日本語でおk

687 名前:デフォルトの名無しさん :2007/04/11(水) 17:12:48
アドバイスありがとうございます。
とりあえずWS_CHILDとWS_POPUPは共存できないようです。

D-Pixedのツールウインドウが同じ実装になっていたのを思い出し、Spy++で覗いてみました。
>>683さんの言うとおりのオプションを使っていましたが、それが原因で望んだ挙動をしているわけではないようです。

とりあえず下記を、親と子両方に入れてやったところ上手く狙った挙動ができているようです。
なので問題ないといえばないのですが、より上手い方法があれば教えていただけると幸いです。

if (WA_INACTIVE != wParam)
{
 ::SetWindowLong(hChildWnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW | WS_EX_TOPMOST);
 ::SetWindowPos(hChildWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
else
{
 ::SetWindowLong(hChildWnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
 ::SetWindowPos(hChildWnd, hParentWnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
 ::SetWindowPos(hParentWnd, hChildWnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}


688 名前:デフォルトの名無しさん :2007/04/11(水) 17:13:57
他アプリウィンドウ - オーナー - ポップアップ - (最前面) で
他アプリウィンドウをタスクバーのクリックでアクティブにすると、
オーナー - 他アプリウィンドウ - ポップアップ - (最前面)
ってなることがあるんだよなあ。
Alt+Tabだと発生しないけど、なんだかなあと思う。

689 名前:デフォルトの名無しさん :2007/04/11(水) 17:25:44
>>687
共存できないとわざわざ書いたのはなぜ?
もしかして>>682を誤解してる?

690 名前:デフォルトの名無しさん :2007/04/11(水) 17:29:41
>>687
>より上手い方法があれば教えていただけると幸いです。

そういうウィンドウはOwned Windowと言います。>>685のリンク先を読んでください。

691 名前:デフォルトの名無しさん :2007/04/11(水) 17:29:47
…なぜに SetWindowLog & SetWindowPos なんだ?
CreateWindowEx でのスタイル指定で解決できるのに…

ターゲットの窓が他プロセスの持ち物なのか?

692 名前:デフォルトの名無しさん :2007/04/11(水) 17:32:35
>>689-691
すいません、682さんを誤読した上に、685さんのレスとレスがすれ違いました。
WS_POPUPとは、親ウインドウを持つウインドウのことだったのですね。

正直、オーバーラップウインドウと、ポップアップウインドウの区別がわからず
今ググっていて682さんの文章に対する誤読に気づきました。
685さんのリンク先を実践してみます

693 名前:デフォルトの名無しさん :2007/04/11(水) 17:50:25
解決できました。
WS_POPUPの解説である「ポップアップウインドウを作成する」の「ポップアップウインドウをはなんぞや?
という知識が無かったのが問題でした。

ポップアップウインドウそのものが、私の望んでいたもののようです。
WM_ACTIVEなどをまったく使わずWS_POPUPを指定しただけで解決できました。

ありがとうございました。

694 名前:デフォルトの名無しさん :2007/04/12(木) 00:43:50
DOS窓で、CreateWindowてどうやるの?
メッセージループとか。

695 名前:デフォルトの名無しさん :2007/04/12(木) 00:53:29
どうやってやるも何も普通に出来るだろ。
いったい何を言っているんだ?

696 名前:デフォルトの名無しさん :2007/04/12(木) 01:40:30
>>694
日本語でおk

697 名前:デフォルトの名無しさん :2007/04/12(木) 03:17:19
ソースコードを読んで勉強したいのですが、C言語 + Win32 API で書かれたオープンソースのアプリケーションでお薦めって何かありますか?
実践的なコードの書き方を勉強したいので、お手本になりそうなアプリがあったら教えてください。
また逆に、「このソフトの書き方は真似するな」的なのもあれば教えて頂けると有り難いです。
宜しくお願いします。


698 名前:デフォルトの名無しさん :2007/04/12(木) 04:13:51
> お薦めって何かありますか
猫でもわかる

> このソフトの書き方は真似するな
猫でもわかる

699 名前:デフォルトの名無しさん :2007/04/12(木) 04:16:14
>>698
禿道と言わざるを得ない

700 名前:デフォルトの名無しさん :2007/04/12(木) 07:39:02
あまりにも禿同杉てワラタw

701 名前:デフォルトの名無しさん :2007/04/12(木) 08:18:22
ヒントにはなるが真似は出来ない

702 名前:デフォルトの名無しさん :2007/04/12(木) 09:19:39
左右分割ウインドウをMFCを使わずに作っているのですが、相談させてください。

まず、ウインドウ全体を親ウインドウとします。

子ウインドウとして
「左側用にWS_THICKFRAMEを使ったウインドウをちょっと大きめに作って配置」
「右側に余り部分の大きさ分のウインドウ」
を貼り付けて実現しています。
左側用のウインドウの大きさが変化するたびに、右側のウインドウの大きさも変更されるようにしています。

ただ、WS_THICKFRAMEは角の近くだと「マウスドラッグで縦横の大きさを変えられる」モードになってしまいます。
まず「横の大きさしか変えられないウインドウ」は作れないのでしょうか?

それをさせないために今は「上下に大きめに作る」ようにしているのですが(角付近を触れないように)、ウインドウはデスクトップウインドウのサイズより大きくは作れないようです(?)。
そのため親ウインドウをデスクトップ画面並に大きくされてしまうと困ってしまいます。
何か対策はありませんでしょうか?

左右ができれば、上下はその応用で作成可能だと思います。


703 名前:デフォルトの名無しさん :2007/04/12(木) 09:30:11
>>702
左右の境界に少し隙間を開け、そこをドラッグすると左右に大きさが変わるようにする。
というようにMFCはなってたと思う。

704 名前:デフォルトの名無しさん :2007/04/12(木) 09:47:03
>>703
なるほど。つまり自前でドラッグシステムを作っているわけですね。
WS_THICKFRAMEを使った方法も、この斜め問題さえ解決すれば実用に耐えるのですが…。

とはいうものの、WM_SIZEを捕まえて上下の大きさが変更されたら強制的に元に戻す処理は入れています。
ただそれは格好悪いもので、もし良い方法があればと思って相談しにきました。

705 名前:デフォルトの名無しさん :2007/04/12(木) 10:44:16
WM_GETMINMAXINFO捕まえたらどうだろう
MFCしか使ってないんで良く分からないけど

706 名前:デフォルトの名無しさん :2007/04/12(木) 11:34:55
>>705
できました!
まったく知らないWMでした。ありがとうございます。

これで
tagMINMAXINFO *p = (tagMINMAXINFO*)lParam;
p->ptMaxTrackSize.y += 128;
としてやることで、デスクトップサイズよりでかいウインドウを作ることに成功。
期待通り動作できるようになりました。

707 名前:デフォルトの名無しさん :2007/04/12(木) 11:48:53
>>702,706
WM_NCHITTESTを捕まえてDefWindowProc()が
HTTOP,HTBOTTOM,HTTOPLEFT,HTTOPRIGHT,HTBOTTOMLEFT,HTBOTTOMRIGHTのときだけ
もみ消してしまう方がいいのでは?

708 名前:デフォルトの名無しさん :2007/04/12(木) 11:53:52
スクリーンショットを撮るAPIってありますか

709 名前:デフォルトの名無しさん :2007/04/12(木) 12:00:33
>>707
ウィンドウの四隅(スプリットバーの端っこ)が使えなくなるんでお薦めできない
それで無効になる領域って結構大きいし

710 名前:デフォルトの名無しさん :2007/04/12(木) 12:02:23
>>708
GetDC

711 名前:デフォルトの名無しさん :2007/04/12(木) 12:29:16
>>709
言われてみれば確かに…。16*16ほどか。
なら、座標計算して嘘の値を返すなんてのはどう?
例えば、DefWindowProc()がHTBOTTOMRIGHTの場合で
マウスが右の方にあるときはHTRIGHTを返し、下の方にあるときは0を返すとか。

712 名前:デフォルトの名無しさん :2007/04/12(木) 12:35:13
>>710
その答えで>>708が報われる事は絶対に無いだろう

713 名前:デフォルトの名無しさん :2007/04/12(木) 12:36:19
>>707
そこまでするぐらいなら普通に>>706でいいと思うんだが…
まあどっちみちWM_NCHITTESTは使うんだけど。
例えば左右に動くスプリットバーがあったとして、
その端っこにポインタを合わせたら斜め向いたカーソルが出るんじゃ
格好がつかないんで
HTTOPLEFTを受け取ったらHTLEFTを返す、みたいなことをする

714 名前:デフォルトの名無しさん :2007/04/12(木) 12:37:31
なんかアンカー間違えたり誤読したりで嫌になってきた

715 名前:デフォルトの名無しさん :2007/04/12(木) 12:40:03
適当にぐぐったらすぐサンプルコードが見つかったんで、ついで。
>>708
ttp://www13.plala.or.jp/kymats/study/MULTIMEDIA/ScreenCapture.html

716 名前:デフォルトの名無しさん :2007/04/12(木) 13:10:09
>>713
斜め向いたカーソルがでないように、上下64ドットずつ大きいウインドウを作りました

717 名前:デフォルトの名無しさん :2007/04/12(木) 17:35:48
普通は自前で全部やるものだよ。作り直したほうがいい。

718 名前:デフォルトの名無しさん :2007/04/12(木) 18:12:40
>>717
______   _      _| ̄|_  _         _
|____   |   |  | 口口  |_  _|  \\       | |  __     __ __
     / /   |  |        | |  _   ̄ ___  | |  |__|  _| |_| |_
    / /    |  |   _    | |  _| |_  |___| | |        |_  _  _\
    | |      |  \_/ /   / / /。 _|        | |  ___    .| |.|__|/ /
    \\     \   /     ̄  \/           | | |___|    |__|   ̄
       ̄       ̄ ̄                      ̄

719 名前:デフォルトの名無しさん :2007/04/12(木) 18:30:06
>>702
Splitterなんて死ぬほどサンプルあるよ
http://www.codeguru.com/cpp/w-d/splitter/

君の場合は、手を抜こうとして逆に面倒なことになってる気がする。
素直にフルスクラッチした方が楽だと思うよ。

720 名前:デフォルトの名無しさん :2007/04/12(木) 21:06:03
WTLのスプリッタのソースが見やすいと思われ

721 名前:デフォルトの名無しさん :2007/04/12(木) 21:58:22
すみません
いまコンソールのC言語のプログラムを
WinMainで始まるプログラムでも使えるようにしようとしている
のですがエラーがでてしまいコンパイルできません
エラーの内容はunsigned char*をchar*に変換できません等のものなのですが
なんとかソースを書き換えずにコンパイルできるようにできないものでしょうか?

722 名前:デフォルトの名無しさん :2007/04/12(木) 22:04:32
え、キャストしちゃいけないの?

723 名前:デフォルトの名無しさん :2007/04/12(木) 22:10:59
キャストすると1000ヶ所以上あってどうにもならない感じです

724 名前:デフォルトの名無しさん :2007/04/12(木) 22:12:58
BCCにするんだ

725 名前:デフォルトの名無しさん :2007/04/12(木) 22:14:49
置換使えないのかい

726 名前:デフォルトの名無しさん :2007/04/12(木) 22:18:07
1000箇所ぐらいなら1時間で何とかなると思うが・・・
というかSuletiGay

727 名前:デフォルトの名無しさん :2007/04/12(木) 22:20:01
置換も使えなさそうです
文字列の型にunsigned char*を使っているのが問題のようで
置換をしようにもどうにも絞れません

728 名前:デフォルトの名無しさん :2007/04/12(木) 22:23:39
#define unsigned

729 名前:デフォルトの名無しさん :2007/04/12(木) 22:29:26
charをデフォルトでunsignedとみなすコンパイルオプションがなかったっけ?

730 名前:デフォルトの名無しさん :2007/04/12(木) 22:29:47
VCには存在するな

731 名前:デフォルトの名無しさん :2007/04/12(木) 23:05:42
unsigned char*からchar*へ変換できないなんて、
単にWindowsプログラムのほうではC++としてコンパイルしているだけだと思う。
Cなら(警告は出るだろうが)エラーにならずにコンパイルできるはず。

732 名前:デフォルトの名無しさん :2007/04/12(木) 23:21:58
コンパイルオプション/Jでは配列のunsignedchar*がchar*に変換できないらしく
だめでした情報ありがとうございます

733 名前:デフォルトの名無しさん :2007/04/12(木) 23:26:48
とりあえず F4 でエラー行に飛べることを知ってるだけで
効率はかなり変わると思うよ
F4 → カーソル移動 → Ctrl+V → (以下ループ)

734 名前:デフォルトの名無しさん :2007/04/12(木) 23:27:36
ごめん、VC 限定ね… VC スレと勘違いした

735 名前:デフォルトの名無しさん :2007/04/12(木) 23:52:06
いえ、ありがとうございます
ですが元のソースはいじるわけにはいかないんですよ
ちょっと勝手に書き換えるとまずい事情がありまして

736 名前:デフォルトの名無しさん :2007/04/12(木) 23:59:12
WinMainから始まろうと、mainから始まろうと、
同じCのソースコードであることに変わりはない。

片方でコンパイルできたものが、もう片方でコンパイルできないなんて、
(argc/argcやmainそのものに依存している場合などを除いて)有り得ない。

>>731は試した?

737 名前:デフォルトの名無しさん :2007/04/13(金) 00:00:18
>>735
そういうことってよくあるよね。
あ〜邪魔臭いコードでもいじれない。

738 名前:デフォルトの名無しさん :2007/04/13(金) 00:22:56
>>735
Cでは警告は出ないようだ。
こんな感じでC++とCのコードは混ぜることが出来る。

extern "C" {
#include "古いコード.h"
}

cl 新しいコード.cpp 古いコード.c


739 名前:デフォルトの名無しさん :2007/04/13(金) 01:03:16
とりあえず古いソースのヘッダをincludeしている箇所を
extern "C"{}で囲ってみましたが効果ないっぽいです
情報ありがとうございます

740 名前:デフォルトの名無しさん :2007/04/13(金) 01:18:34
>>739
意味わかってないだろ

741 名前:デフォルトの名無しさん :2007/04/13(金) 01:26:44
IDEから使うと /TP がデフォになってるな。
これをはずせば拡張子に応じたコンパイルをしてくれるが、
プリコンパイルヘッダーやら他のところで引っ掛かりが出てるよ。
混ぜるのはこいつのレベルじゃ無理かもしれんね。

742 名前:デフォルトの名無しさん :2007/04/13(金) 09:35:23
文字列に付けるszってなんですか?

743 名前:デフォルトの名無しさん :2007/04/13(金) 09:39:19
Win32APIでは構造体のサイズを取得してそのサイズを構造体にセットするというのをよく使いますが、
何故このようなやり方をするのでしょうか?

744 名前:デフォルトの名無しさん :2007/04/13(金) 09:42:10
>>742
ハンガリアン記法

745 名前:デフォルトの名無しさん :2007/04/13(金) 09:43:57
>>743
バージョンが上がって仕様が変わって構造体の内容が変わっても
互換性を維持するため。

746 名前:デフォルトの名無しさん :2007/04/13(金) 10:06:09
まじ?

747 名前:デフォルトの名無しさん :2007/04/13(金) 10:09:16
>>742
zero(\0)終端string(文字列)の略

748 名前:デフォルトの名無しさん :2007/04/13(金) 10:36:38
nsはなんですか?

749 名前:デフォルトの名無しさん :2007/04/13(金) 10:46:51
>>748
質問まとめてしろよ

750 名前:デフォルトの名無しさん :2007/04/13(金) 12:01:00
>>746
>745のことならマジ。


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