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


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

Win32API 質問箱 Build5
501 名前:デフォルトの名無しさん :02/08/30 20:01
>>471
CAPTUREBLT

502 名前:デフォルトの名無しさん :02/08/30 20:04
>>485
プロキシの設定だけはIEを参照して実際の接続はWinsockで
やるような場合、今までは自動構成スクリプトに対応するのが
面倒だったけどWinInetの新たに公開された関数で楽になった。
あとSwitchToThisWindow使うとフォアグラウンドロックを回避
できるのかな? (未確認)

503 名前:デフォルトの名無しさん :02/08/30 20:14
>>502
どの関数?

504 名前:デフォルトの名無しさん :02/08/30 20:55
隠しAPIリストのWindows FunctionsのFindWindow
(に限らず他にもあるかもしれないけど未確認)は、
API自体は既出なわけだけど、それはAPIに隠し機能があったとか
ドキュメントに隠し事項があったとかそういうことけ?


505 名前:デフォルトの名無しさん :02/08/30 21:57
>>503
該当ページをWinInetで検索すればすぐ見つかるだろ…
まあいいや
DetectAutoProxyUrl
InternetGetProxyInfo
公開前からDependency WalkerでWININET.DLLを覗いて
「MSずるいよなー」とか思ってたから漏れ的には一番うれしい

506 名前:デフォルトの名無しさん :02/08/30 22:00
>>504
FreeResourceとかFillMemoryに至っては何が新しいのか
さっぱり分からないです。
あとMultimediaのところにSndPlaySound(大文字)ってあるけど
これはsndPlaySound(小文字)とは違うの? なんかクリックすると
sndPlaySound(小文字)の説明が出てくるんだけど。

507 名前:デフォルトの名無しさん :02/08/30 22:39
>>505
SDKは有償でなかった?

508 名前:デフォルトの名無しさん :02/08/30 22:44
>>507
過去ログ見てないんか>>476

509 名前:デフォルトの名無しさん :02/08/30 22:59
それにしても解説が手抜きだねえ
はじめて公開した関数はほとんどパラメータの説明しかないし
FreeResourceは現在return 0;だけの実装なのにいかにも
いろいろやってそうな説明してるし(たぶん昔のSDKの解説切り
貼りしたんだろう)NtCreateFileに至ってはZwCreateFileの
置換し忘れがあるし(w

510 名前:デフォルトの名無しさん :02/08/30 23:15
MS「はいはい公開すりゃいーんでしょ、公開すりゃ。ったく、たりーなぁー」

きっとこんな感じでリスト作ったはず。

511 名前:デフォルトの名無しさん :02/08/31 10:02
Deprecated なものや、既存の公開APIの組み合わせで実現可能なもの、
将来無くなるかもしれんと断りのあるもの、明らかに単なる計算ルーチンなもの
も結構あってなんだかつまらんです


512 名前:デフォルトの名無しさん :02/08/31 10:46
つーか非公開APIって本来そういうもんでしょ
今回は仕方なく公開しただけで
問題はサードパーティーには「将来なくなるから使うな」とか何とか
言っておきながら「Microsoftのミドルウェア」は
しっかり使ってるというダブルスタンダード

513 名前:デフォルトの名無しさん :02/08/31 10:50
既存のAPIの組み合わせでできるといっても
IsUserAdminとかInternetGetProxyInfoは手間がかなり違う。
自分でダイアログ用意すれば作れるからって
コモンダイアログがいらないってことにはならないでしょ

514 名前:デフォルトの名無しさん :02/08/31 10:53
>>513
そういう「これ以外に手段がありません」というやつだけ抜き出してほしかったり

515 名前:デフォルトの名無しさん :02/08/31 11:05
やってみようか。
Single-Threaded Apartments
いきなり挫折しますた(w

516 名前:デフォルトの名無しさん :02/08/31 12:16
よく分からないのが多いんで逆に「これは明らかにいらんだろ」
というものを挙げてみます。
__WSAFDIsSet - 直接使わずFD_ISSETマクロで使う。
RtlConvertSidToUnicodeString - ConvertStringSidToSidを使う。
IsNetDrive - GetDriveTypeとWNetGetConnectionで代替できる。
OpenRegStream - SHOpenRegStream*を使う。
PathGetShortPath - GetShortPathNameでよい。
SHCLSIDFromString - CLDIDFromStringを使う。
SHCoCreateInstance - CoCreateInstanceを使う。
SHCreateDirectory - SHCreateDirectoryExで代替できる。
FreeResource - Win32では何もしないので不要。
RtlCharToInteger - strtolやwcstolでよい。
RtlUnicodeToMultiByteSize - WideCharToMultiByteでよい。
ExtDeviceMode - 16ビット時代の遺物。DocumentPropertiesを使う。
RtlCompareMemory - memcmpでよい。
RtlExtendedIntegerMultiply - __int64による乗算でよい。
RtlExtendedLargeIntegerDivide - __int64による除算でよい。
RtlUniform - CryptGenRandomで代替できる。
RtlUnwind - 直接使わず構造化例外処理を使う。
RtlIsNameLegalDOS8Dot3 - XP以降ならCheckNameLegalDOS8Dot3を使う。
IsBadHugeReadPtr - 過去の遺物。IsBadReadPtrを使う。
IsBadHugeWriteOtr - 過去の遺物。IsBadWritePtrを使う。
NtQuerySystemTime - GetSystemTimeAsFileTimeを使う。
RtlLocalTimeToSystemTime - LocalFileTimeToFileTimeを使う。

517 名前:デフォルトの名無しさん :02/08/31 14:14
FD_ISSETってマクロじゃないやん


518 名前:デフォルトの名無しさん :02/08/31 16:42
DrawText関数で文字列を自動改行する場合に
改行される部分のポインタを取得したいのですが
よい方法はないでしょうか?
DrawText関数は描画した高さを返すので困っています。

519 名前:518 :02/08/31 16:43
sageてしまった (--;;

520 名前:デフォルトの名無しさん :02/08/31 19:03
>>517
BSD socketでどうなのかは知らないけどWinsockではマクロだよ
winsock.h見てみ

521 名前:デフォルトの名無しさん :02/08/31 21:50
リストビューの背景にBMP画像を表示するのってどうやるんですか?

522 名前:デフォルトの名無しさん :02/08/31 22:21
リストビューのWM_ERASEBKGNDを奪う

523 名前:デフォルトの名無しさん :02/09/01 15:46
>>518
よくわからんがGetCurrentPositionExでも試してみたら

524 名前:デフォルトの名無しさん :02/09/01 15:57
WINDOWCLASSEX
最後の3文字良いね。

525 名前:デフォルトの名無しさん :02/09/01 18:16
×WINDOWCLASSEX
○WNDCLASSEX
じゃなかったっけ?

526 名前:デフォルトの名無しさん :02/09/01 21:44
Win9x環境で、ExitWindowsExに
EWX_FORCEIFHUNG
のフラグつけたらどうなるんでしょうか?
想像では
EWX_FORCEフラグに置き換えられるのではないかと思います。
確認できる手段がなくて困っているのですが、
ご存知の方、教えてもらえませんか?

527 名前:デフォルトの名無しさん :02/09/01 21:48
ExitWindowsEx
最後の3文字良いね。

528 名前:526 :02/09/01 21:51
>527
なんでこのタイミングで書き込んでしまったのか
自問自答。。

529 名前:デフォルトの名無しさん :02/09/01 21:57
Exで終わるAPIはDowntownDXみたいでイヤ。

530 名前:デフォルトの名無しさん :02/09/01 22:04
ネットワークプログラミングスレから移動してきますた。
http://pc3.2ch.net/test/read.cgi/tech/1023359282/605-
RASPPPoEをインストールして調べてみたところ、
szDeviceTypeはRASDT_Isdnになるようです。
ここでいうISDNとはISDNボードを使った1.5Mの接続とかの
ことで、64KのふつうのISDNはRASDT_Modemになるので
RASDT_Isdnもブロードバンド扱いすればいいかと。

531 名前:デフォルトの名無しさん :02/09/01 22:08
>>530
COMポートになりすまさない内蔵ISDNとか使うとRASDT_Isdnになるよ

532 名前:デフォルトの名無しさん :02/09/02 12:45
文法的な問題で詰まってるのですが、
これはどう解釈したらいいのでしょうか?

int test()
{
   return ::GetLastError() != ERROR_SUCCESS;
}

::GetLastError() != ERROR_SUCCESS;が
真なら1を返し、そうでなければ0を返すというだけのものでしょうか?
test()がintの戻り値を返すようにサンプルではなっているので
気になっています。
intなのに1 or 0しか返さないのでしょうか?
それともなんらかの場合、GetLastError()の値を返したりしますか?

533 名前:デフォルトの名無しさん :02/09/02 13:32
>>532
MSDNの「return」見てみな。
ちなみに「真なら1」とは限らない。

534 名前:デフォルトの名無しさん :02/09/02 13:36
>ちなみに「真なら1」とは限らない。

条件演算子は真なら1、偽なら0を返す。
これは言語で規定されている。

スレ違いだけどな。

535 名前:デフォルトの名無しさん :02/09/02 13:57
>intなのに1 or 0しか返さないのでしょうか?
それをいったら BOOL 自体 int だしな
windef.h 見てみ

536 名前:532 :02/09/02 14:12
>533
見てみましたが、特にこの問題と関係ないように思えたのですが。。

>535
それはわかってますが、
0 or 1しか返さない仕様の関数に
int型の戻り値を要求するのがおかしいな、と思いまして。
0 or 1ならBOOL型で十分じゃないかと。

>534
つまり
GetLastError() != ERROR_SUCCESS
の条件式が先に 0 or 1に評価され、
それがreturn 0 or 1に
なるという流れでよろしいでしょうか?
つまり、
GetLastError() != ERROR_SUCCESS
は条件式なので、0or1の値しかなりえないと。
あってます?


537 名前:デフォルトの名無しさん :02/09/02 14:50
>>535
bool型ならじゃなくて、条件演算子ならってかいてあるじゃん
まぁ、規定されてるのはC++だけだが。

538 名前:デフォルトの名無しさん :02/09/02 15:14
答え:そのソースはCで書かれている。

539 名前:デフォルトの名無しさん :02/09/02 18:45
C++ならbool型のtrue/falseになって
Cならint型の1/0になる。
BOOLは単にintをtypedefしたもの。
で、API関係の解説はCでも使えるように大抵Cで書いてあるんじゃないのかな。

540 名前:デフォルトの名無しさん :02/09/02 20:29
くだらないかもしれないけど、質問です。
あるウインドウハンドルの
親ウインドウのハンドルを取得するAPIってありますでしょうか?
良かったら教えてください。

541 名前:デフォルトの名無しさん :02/09/02 20:30
なんか日本語おかしくてすみません。
あるウインドウの親ウインドウのハンドルを
そのウインドウのハンドルから取得できるようなAPIは無いでしょうか
ですね。
よろしくお願いします。

542 名前:デフォルトの名無しさん :02/09/02 20:37
>>540-541
GetParent

543 名前:デフォルトの名無しさん :02/09/02 20:39
これはまた・・そのまんまな名前ですね
ありがとうございました。

544 名前:デフォルトの名無しさん :02/09/02 21:24
Octal 3State Buffer君よ、探し方を聞いた方がいいと思うぞ

545 名前:bloom :02/09/02 21:34

http://www.leverage.jp/bloom/qry/search.qry?function=search

546 名前:デフォルトの名無しさん :02/09/03 16:20
「プラットフォーム SDK: デバッグ / エラーに関する処理」
にある APIについてなんですが、

>対応情報
> Windows NT/2000:Windows NT 3.1 以降
> Windows 95/98:Windows 95 以降。Windows 95 用の再配布可能なファイルとして利用可能。
> Windows CE:対応していません

「再配布可能なファイルとして利用可能」とは、どういうことですか??
この APIをコールする実行ファイルを、一般に配布して良いということですか?

547 名前:デフォルトの名無しさん :02/09/03 20:22
>>546
具体的にどのAPIなんだYO

548 名前:デフォルトの名無しさん :02/09/03 20:56
>>546
IE5に含まれるとか、そんな意味だろ。この場合、IE5は再配布可能だから、Win95
でも利用可能ということになる。
よく、対応情報の回りを読んでみそ。

549 名前:546 :02/09/03 21:02
>>547
MakeSureDirectoryPathExistsとか。

...って、MSDN英語版では、どう記載されてるのかと思って見てみたら

>Requirements
> Windows NT/2000/XP: Included in Windows 2000 and later.
> Redistributable: Requires DbgHelp.dll 5.0 or later on Windows NT 4.0 and Windows 95/98/Me.

こういうことか。すなわち、DbgHelp.dllが必要で、この DLLを再配布して良いと。

550 名前:デフォルトの名無しさん :02/09/03 21:56
NT4/98で
SHCreateShellFolderView(Ex)
相当の処理は自前でIShellView書く以外に無いのでしょうか?

551 名前:デフォルトの名無しさん :02/09/04 01:13
>>550
あれは「2000/XP上で」Microsoftのミドルウェアが使っているAPIを
公開した、という名目なのでそれ以前でもひそかに使える可能性はある。
でもIE5が必要とか。

552 名前:デフォルトの名無しさん :02/09/05 00:25
NtCreateFileでファイルの初期サイズを指定すると
連続したクラスタに割り当てられる可能性が高くなったりしますか?

553 名前:YahooBB237224170.bbtec.net :02/09/05 00:46
確かこのへんのスレだったと思うが「俺ならその(実行中の)プログラムに
もぐりこんで**を調べる」というようなのを読んだ記憶があるんだが,
どうやればそんなことが出来るんでしょうか.

554 名前:デフォルトの名無しさん :02/09/05 00:52
>553
んなことより、あんたの
名前欄はなんなんだ??

555 名前:デフォルトの名無しさん :02/09/05 01:05
>>553
フックをかけると潜り込める

556 名前:YahooBB237224170.bbtec.net :02/09/05 01:43
>名前欄はなんなんだ??

こっちが聞きたいよ.fusianasan としたらこれが出た.(今回も)
もちろんプロバイダはYBBですが,板の仕様?

それより実行中の別プログラムの何をフックするんですか?APIがある?

557 名前:デフォルトの名無しさん :02/09/05 01:52
>556
皆を代表して聞くが
なんで
「fusianasan」と入れる?

558 名前:デフォルトの名無しさん :02/09/05 02:13
>>556
ウインドウをフックする

559 名前:fusianasa :02/09/05 02:30
?
なんか特別な意味がある?
どっかでみて適当に書いただけだが.
こんかいは fusianasa と書いてみました.

window handle を入手するんですね.どうも.
たぶんまた聞きますのでよろしく.

560 名前:デフォルトの名無しさん :02/09/05 03:21
自分が管理してるデータがあって
データの一部をリストビューで表示させてるときって
データをどうやってもつんですか?

自分のデータを保持してると
リストビューにも同じ内容のデータが出来て
メモリがもったいない気がする

561 名前:デフォルトの名無しさん :02/09/05 03:31
>>560
こっちのスレの最初のほうでちょっと議論があった

Windows Programing for C/C++(Not MFC)
http://pc3.2ch.net/test/read.cgi/tech/1018239290/l50

漏れは重複して持たない主義。ただMVCの分離が…

562 名前:デフォルトの名無しさん :02/09/05 03:47
>>561
仮想リストビュー(オーナーデータ)でがんがれ。

563 名前:  :02/09/05 03:55
>>561-562
thx
ちょっと読んできます

564 名前:デフォルトの名無しさん :02/09/05 09:33
SDKのファイル・フォルダセキュリティ設定に関して質問があります。
AddAccessAllowedAceEx関数を使用し継承を設定したのですが、設定したフォルダの中に新しいフォルダを作成すると「継承元なし」のフォルダが出来てしまいます。
継承元を親フォルダに設定するにはどうしたらよいでしょうか?
OSはWindowsXPで、VC++のバージョンは6.0です。

565 名前:デフォルトの名無しさん :02/09/05 13:40
VB質問スレとの重複ですみません。
こちらの方が適当だと思いますので、質問し直させてください。
VB6.0、Windows2000で、OpenPrinter関数でプリンタのハンドルが取れません。
ローカルプリンタだと大丈夫なのですが、\\SERVER\PRINTERといった
ネットワークプリンタだと失敗してしまいます。
ネットワークプリンタの場合、方法を変える必要があるのでしょうか?

566 名前:デフォルトの名無しさん :02/09/05 15:52
それぞれがウィンドウをもつオブジェクトをクラスとして扱うために、
ウィンドウプロシージャをフレンド関数としてそのクラスにもたせています。
(メンバ関数のアドレスを取るのは望ましくないですよね?)

インスタンスはたくさんあるけれどもWndProcはひとつなので、
WndProcから見るとどのインスタンスに属するメッセージなのかが区別できません。
これを解決するために、CreateWindowでインスタンスポインタ(this)をWM_CREATEに
渡してSTLのmapにhWndとthisポインタを格納し、メッセージに応答するときは
hWndからthisをサーチしてインスタンスを決定する、という方法をとっています。

なんだか泥臭いので、もっといい方法はないでしょうか。
こういったことはよくありそうだと思うんですけど。

567 名前:デフォルトの名無しさん :02/09/05 16:19
>>566
他に定番の方法としては、

・SetWindowLong でhWndにthisポインタを関連付けて置いて、
 WndProcでGetWindowLongで取り出し。

・サンクを使う。つまり、thisポインタを埋め込んだマシンコードを
 実行中にメモリに作ってしまって、それをWndProc替わりにする。ATLとか参照。

568 名前:デフォルトの名無しさん :02/09/05 16:53
サンクって手抜き実装だと激しくメモリ使わない?
VirtualAllocの割り当て単位がページ毎だし、
サンク作る毎にメモリ確保してたら4kずつ取られてくよね

569 名前:デフォルトの名無しさん :02/09/05 17:21
なんでVirtualAlloc使うん?

570 名前:デフォルトの名無しさん :02/09/05 17:33
>>569
PAGE_EXECUTE属性をつけにゃならんだろうが

571 名前:デフォルトの名無しさん :02/09/05 17:56
>570

#include <stdio.h>
int main ()
{
unsigned char *p;
unsigned char x[] = {
0xB8,0x7B,0,0,0, // mov eax,123
0xC3 // ret
};
p = malloc( sizeof( x ) );
memcpy( p, x, sizeof(x) );
printf("%d\n",(*((int (*)(void))&x))());
printf("%d\n",(*((int (*)(void))&p))());
}

BCC32 on WinXPで実行したけど、violation出えへんかったで。

572 名前:566 :02/09/05 18:14
わざわざmapなんて使わなくてもSetWindowLongのがスマートですね。

サンクですが、要するにメモリにマシン語書いておいてそこに突入させる
わけですよね? そいつをWndProc代わりにするってのがよくわかりませんが・・・。
何にしても最後にはWndProc呼んでやらないといけないですよね?

アセンブラはPC-98時代にぶいぶい言わしたくらいで最近はとんといじってません。

573 名前:デフォルトの名無しさん :02/09/05 18:16
>>572
> そいつをWndProc代わりにするってのがよくわかりませんが・・・。
引数の hWnd を、アセンブラコードの部分でこっそり this とすり替えるんだよ。

574 名前:デフォルトの名無しさん :02/09/05 18:18
>>571
通るかも知れないけど、EXECUTE属性のないメモリ上でコードを実行させるのは行儀悪いだろ

575 名前:デフォルトの名無しさん :02/09/05 18:28
つか、ATLもそうだろ(VirtualAlloc使ってない)
文句があるなら、Microsoftにいってくれ。

576 名前:デフォルトの名無しさん :02/09/05 18:38
>>574
デフォルトで実行属性がつくから、問題ない。

そんなの処理系・環境依存だろって意見はあるかも知れんが、そもそも
VirtualAlloc とか言ってる時点で Win32 環境限定の話だしさ。

577 名前:デフォルトの名無しさん :02/09/05 18:39
>>572
おおよそのところ

memcpy( buf,
//---------------------------------
 mov dword ptr [esp+4] this
 jmp WndProc - (buf + α)
を意味するコード
//---------------------------------
 , size
);
SetWindowLong( GWL_WNDPROC, buf );

こんな感じにすると、第一引数としてhWndが入ってたはずの部分に
thisポインタの値が入った状態でWndProc関数に飛ぶので、
あとはテケトーに。

578 名前:デフォルトの名無しさん :02/09/05 18:43
>デフォルトで実行属性がつくから、問題ない。
こんなことどこに書いてある?

579 名前:566 :02/09/05 19:09
なるほど、理解できました。
行儀悪いのは大好きなのですが、hWndとthisをすり替えるってのが
ちょっとキモチワルイです。

ひとつ思ったんですが、これって誰かにサブクラス化されたらえらいことになりますね・・・。

580 名前:デフォルトの名無しさん :02/09/05 20:14
>>579
ecxにthisを入れてjmpすれば、
少なくともvcでは正常にthisが使えるよ。


581 名前:デフォルトの名無しさん :02/09/05 21:37
>>578
公式にドキュメント化されてるかは分からないなぁ。

ただ、俺は少なくともプロセスヒープは「read/write/execute可能」という前提で
プログラミングして(いちいち GetProcessHeap && VirtualProtect なんて
やってない)。MS が出してるコードも、そうなってるしさ。

582 名前:デフォルトの名無しさん :02/09/05 21:38
>>579
> ひとつ思ったんですが、これって誰かにサブクラス化されたらえらいことになりますね・・・。
なんで?

583 名前:デフォルトの名無しさん :02/09/05 22:06
質問です。
特殊キーの状態はGetKeyStateで取得できるのですが、
それ以外のキーの状態を取得するAPIはありませんか?

584 名前:583 :02/09/05 22:06
sageてしまいますた。

585 名前:デフォルトの名無しさん :02/09/05 22:24
>>583
GetKeyboardState

586 名前:デフォルトの名無しさん :02/09/05 22:45
>>585
できますた! ありがとうございます。

587 名前:デフォルトの名無しさん :02/09/05 22:56
それ以外のキーもGetKeyStateで取得出来るけど・・・?

588 名前:デフォルトの名無しさん :02/09/05 23:03
え、そうなんですか?
GetKeyboardState()で特殊キーも取得できちゃったんで、
全部コレにしてしまいました。
その、GetKeyState()で、例えばzキーやxキーを取得できるとして、
速度的にはどっちが早いんですか?

589 名前:デフォルトの名無しさん :02/09/05 23:27
安心しろ、人間がキーを打つ速度はそれよりはるかに遅い。

590 名前:デフォルトの名無しさん :02/09/05 23:29
Sleep() と GetMessage() を、
ほぼ同時に実行したいのですが、どうしたらいいですか?
いつもはPeekMessageを使ってるプログラムで暇な時にSleepしてると
フリーズしたみたいになるので、その間だけGetMessageを使いたいんですが。
GetMessageを呼んだ時に送られるメッセージとかってありますか?

591 名前:デフォルトの名無しさん :02/09/05 23:38
Sleep(0)とか

>>589
えと、ゲームを作ってて、俺マシンはK6-2の500MHzなんですよ。
んで、1フレームにイロイロ処理をしてると秒間10フレーム逝くか逝かないかで。
なんで、なるべく時間をかけたくないワケです。

592 名前:デフォルトの名無しさん :02/09/05 23:40
>>590

電波ですか?

>GetMessageを呼んだ時に送られるメッセージとかってありますか?

これがあったら無限ループ

593 名前:デフォルトの名無しさん :02/09/05 23:45
>>591
入力くらいスレッド分けろよ。
WM_KEYDOWNが来た時点でイベント起こしたりSwitchToFiberしたり汁。
そもそも、ループ毎に検出しなきゃならないのはジョイスティックくらいで、
キーボードなんかはイベントで十分。

594 名前:デフォルトの名無しさん :02/09/05 23:46
>>593
アクションゲーなんですが、スレッド使うんですか? それはちょっと。

595 名前:デフォルトの名無しさん :02/09/05 23:47
>>590
500mm秒ほど寝かせてPeakMessage使え。
スレッドの切り替え時間が十数mm秒だからほかへの影響もほとんどないし、
反応が悪くなることもない。

596 名前:デフォルトの名無しさん :02/09/05 23:52
>>590
MsgWaitForMultipleObjects

597 名前:デフォルトの名無しさん :02/09/06 00:24
>>595
500mm秒って50cm秒でしょうか?
ってどのくらいの長さですか?

598 名前:デフォルトの名無しさん :02/09/06 00:51
50cm秒って初めて聞いたなw 500mm秒も初めて聞いたけど。
多分>>595は500_秒と表現したかったんだろうけど、
ホントは500マイクロ秒と言いたかったのではないと予測。

599 名前:デフォルトの名無しさん :02/09/06 01:13
自作コントロールのサンプルみたいのありませんか?

親ウインドウにメッセージを返すのに、どの変数を
どういう風に設定すれば良いのかがわからないのです。

600 名前:デフォルトの名無しさん :02/09/06 01:35
> 親ウインドウにメッセージを返すのに
何のメッセージを返すの?

自前で処理したいメッセージなら処理してリターン、
それ以外はDefWindowProcにそのまま渡せばいいんだけど。

601 名前:デフォルトの名無しさん :02/09/06 01:49
シャットダウン、ログオフなどを
WM_QUERYENDSESSION
で検出したのはいいのですが、
lParamがシャットダウンも再起動も
共に0になってしまいます。
見分ける方法はないでしょうか?
WinXP、VC.NETです。

602 名前:デフォルトの名無しさん :02/09/06 01:58
PeakMessage萌え

603 名前:デフォルトの名無しさん :02/09/06 02:13
>>600
自作のエディットコントロールで、NotifyメッセージをEDIT互換にしたいとかじゃないの?

604 名前: :02/09/06 02:36
>>601
見分けても意味ないだろ。

605 名前:601 :02/09/06 02:47
>604
見分ける方法はあるのですか?
それともないのですか?

606 名前:デフォルトの名無しさん :02/09/06 03:08
>>605
何をやりたいのか、もう少し具体的に書いてみれば? 代案が出てくるかも
知れんぞ。

607 名前:599 :02/09/06 03:13
>>603
そんな感じです


608 名前:601 :02/09/06 03:17
>606
別スレですこし話したのですが、
ファイルを定期的にバックアップするツールを作っています。
その機能の一部に
終了時、バックアップをとる
というのがあるんですが、
これを実装するためです。
別スレでは、シャットダウン時は
重い作業厳禁、といわれたのですが、
ファイルのコピーなので仕方ないかな、と思って開発進めてます。
シャットダウン時にコピーすると応答が無い、という
ダイアログが出てしまいます。
ですから
WM QUERYENDSESSIONでFALSEを返し
システムからのシャットダウン要求を中断、
WM ENDSESSION中側でファイルの処理、
その後ExitWindowsExでシャットダウン
とするように動かしたいのですが、
一度止めて、ExitWindowsExする時に、
シャットダウンならシャットダウン、
リブートならリブート、と引数を変化させる必要が
あり、どうしても必要な情報と思ってます。


609 名前:デフォルトの名無しさん :02/09/06 05:44
>>607
そんな感じって...自分でまともに説明もできんのなら
標準のEditコントロールでも使っとけ。

通知したい時点で
SendMessage(GetParent(hwnd),
    WM_COMMAND,
    MAKEWPARAM(GetDlgCtrlID(hwnd), EN_CHANGE),
    (LPARAM)hwnd);
のような感じで呼び出せばいい。

610 名前:デフォルトの名無しさん :02/09/06 14:56
>>608
MFCスレで、そのソリューションを提示した者だ。
  if ( lParam & ENDSESSION_LOGOFF )
でちゃんと区別つけられたよ(Win2000)。

611 名前:601 :02/09/06 15:17
>610
すみません、毎度毎度ご迷惑おかけします。
あたりです。
そんな定数あるとは知りませんでした。
winusuer.h内のしかも
ExitWindowsExの近くに
#define EWX_LOGOFF 0
#define EWX_SHUTDOWN 0x00000001
#define EWX_REBOOT 0x00000002
#define EWX_FORCE 0x00000004
#define EWX_POWEROFF 0x00000008
#if(_WIN32_WINNT >= 0x0500)
#define EWX_FORCEIFHUNG 0x00000010
とあり、他のも区別できそうです。
.hへ定数を調べにいくという考えは持ってませんでした。
次から気をつけたいと思います。
ありがとうございました。

612 名前:601 :02/09/06 16:32
>611
勘違いしてました。
これはExitWindowsExの引数に使う定数ですね。
>610さんのおっしゃられてる方法だと、
確かにログオフは検出されますが、
シャットダウンか再起動かは判別できないようです。
簡易的にはWM_QUERYENDSESSIONの
lParamが1か0かで同じ判断ができるようです。
喜びのあまり、てっきり
EWX_SHUTDOWNをENDSESSION_SHUTDOWNと
勘違いしていたようです、すみません。
ENDSESSION_LOGOFFもあるならと
ENDSESSION_SHUTDOWN
なども探してみましたがどうやらログオフしかないようです。
シャットダウンと再起動を見分けることはできないのでしょうか?


613 名前:デフォルトの名無しさん :02/09/06 16:53
WIN32アプリをWM_CLOSEにより終了させる際に受け取るメッセージって
WM_CLOSE -> WM_DESTROY -> WM_QUIT
の順番でいいんでしょうか?
WM_DESTROYでオブジェクトの解法とかしてるんですけど
なんかの解法忘れがあるっぽくて、終了後CPU占有率が70%くらいになってしまう...

614 名前:610 :02/09/06 16:54
>>612 シャットダウンか再起動かの判別...オラは、わがんね。

615 名前:613 :02/09/06 19:12
メッセージの拾い忘れでした
はずかちー・・・

616 名前:デフォルトの名無しさん :02/09/06 20:42
WM_DESTROYの後にWM_NCDESTROYが来るよ・・・(ぼそっ)

617 名前:613 :02/09/06 22:06
と思ったらOSがイカレてるだけでした・・・

イカレたOSでコンパイルしたexeって
やっぱイカレてるのかな

618 名前:デフォルトの名無しさん :02/09/06 22:13
自分自身のウインドウハンドルを取得するいい方法はないっすか?

GetForegroundWindow を使えば、取得できないことはないですが
ちょっと違うんです。
あとは、GetDesktopWindow から下がっていくぐらいしかわからなかったっす。

関数の引数に与えてやれる情報は、何もないっす。

具体的には、DLL からその呼び出されているウインドウのハンドル
を取得したいのです。
DLLに直接ウィンドウハンドルを渡してやるとかは、ナシっす。
それをやりたくないのでありまして・・・。

619 名前:デフォルトの名無しさん :02/09/06 22:16
自分自身ってなに?
WndProcの第一引数にハンドルが入ってくるが

620 名前:デフォルトの名無しさん :02/09/06 22:29
http://www.torikyo.ed.jp/torie-h/
これは、田舎のひなびた小さな学校のHPを100万ヒットの
人気HPにしてあげようという運動です。現在のターゲット校は上記です。
多くの皆さんクリックしてあげて下さい。
HPに飛んだら、2,3回更新していただくと、もっとありがたいです。
どんどんコピペして他の板にまいてください。

621 名前:bloom :02/09/06 22:32

http://www.leverage.jp/bloom/start/

622 名前:デフォルトの名無しさん :02/09/06 22:35
>>618
どのウインドウのWindowProc中か知りたいということ?
スタックをさかのぼるしか方法ないと思うが

623 名前:618 :02/09/06 22:39
自分自身ってのがわかりにくかったっすね。すまんす。

実行しているプログラム=プロセスのことで、あってるのかな。

具体的にいいますと、a.exe ってのが、x.dll を使ってるとします。
このとき、a.exeが、自分自身ってことです。

そして、やりたいことというのは、x.dll からa.exe のウィンドウハンドルを
取得したいのです。

もしかして、DllMainの第一引数でOK???
もうちょっと調べてみます〜。

624 名前:デフォルトの名無しさん :02/09/06 22:45
>>623
一つのプロセスは複数のウインドウを所有できることを忘れてないか?

625 名前:デフォルトの名無しさん :02/09/06 22:47
1プロセス1ウィンドウではない。
まずこれを理解しよう。
コマンドラインで使うようなプログラムはウインドウを持たないし、
Exploror等は1プロセスでいくつものウインドウを持ってる。

626 名前:デフォルトの名無しさん :02/09/06 22:54
>>623
まぁ、プロセスが持つウィンドウを全部調べたいと仮定して、EnumWindows & GetWindowThreadProcessId が妥当なところだろう。

627 名前:618 :02/09/06 23:40
DllMainの第一引数を使って、やってやるとやりたいことが
なんとかできあたみたいです。

アドバイス役にたちました。どもッス。

628 名前:デフォルトの名無しさん :02/09/07 00:02
だれもDllMainの第一引数なんて言ってないと思うが

629 名前:デフォルトの名無しさん :02/09/07 00:26
ツールバーを作成して、ビットマップがボタンに張り付いてくれたのはいいんですが、
これってシステムの背景色で透過させることはできないのでしょうか?
システム背景色は設定で変えられるので、ビットマップの周辺に灰色を塗っただけじゃ
浮いてしまう可能性がありますし、ダサいので・・・。

それと、メディアプレーヤ6.4のツールバーのようにツールバーを下の方に移動したいのですが、
SetWindowPosを受け付けてくれません。完全に下にへばりつかせるか、上にへばりつかせるかしか
できないようです。これもなんとかならないでしょうか。

630 名前:デフォルトの名無しさん :02/09/07 00:27
age

631 名前:デフォルトの名無しさん :02/09/07 00:31
>>629
「bitblt 透過」でgoogleしる。

632 名前:デフォルトの名無しさん :02/09/07 00:45
>>631
マスクを生成して自前で透過処理を行え、ということでしょうか?

633 名前:デフォルトの名無しさん :02/09/07 00:49
0番目のパレットの色が透過になるんじゃないの

634 名前:デフォルトの名無しさん :02/09/07 01:25
>>618-619, 622-628
ネタ?かなり笑ったんだけど…

635 名前:デフォルトの名無しさん :02/09/07 01:30
すんません、フォトショップがはき出したbmpがダメダメでした・・・。

636 名前:デフォルトの名無しさん :02/09/07 01:34
プリンタに LintTo() で線を引くとえらく汚いのですが、
これは漏れのプリンタ(MJ-900C)がボロいからでしょうか?

637 名前:  :02/09/07 02:40
CreateWindowの最後の引数はなに?


638 名前:デフォルトの名無しさん :02/09/07 02:46
例外c0000026Hってなに?
3回も出やがった

639 名前::02/09/07 02:47
>637
何を聞きたいのかよくわかりません。
検索エンジンにでも聞いてください。

640 名前:638 :02/09/07 02:50
一応補足しとくと、Window開いてDirectX作るだけのWIN32アプリ

Cライクにベタ打ちしてる間は動いてたけど
DirectXの初期化とかをまとめてクラス化してったら出るようになった

んだけど、なぜか初期化の前で出る

わけわかめ

641 名前:デフォルトの名無しさん :02/09/07 02:55
コード出せ

642 名前:デフォルトの名無しさん :02/09/07 03:03
【 SetFilePointer 】
>For example, to move in the range from 2 gigabytes to 4 gigabytes set
>the contents of lpDistanceToMoveHigh to zero, or ・・・
                          ^^^^^^
なんで 0 なんですか?1なら納得なんですが...
  nSize = (nSizeHigh * (MAXDWORD+1)) + nSizeLow
ですよね???

643 名前:デフォルトの名無しさん :02/09/07 03:13
>>642
SetFilePointerのリファレンスは読んでないけど、それを見る限り間違ってないように思うけど?
2G〜4Gなら、32ビットに収まる範囲だろ?上位DWORDはゼロでいいんじゃないの?
4G〜8Gが、上位DWORD=1になるんじゃない?

644 名前:デフォルトの名無しさん :02/09/07 03:18
符号拡張だから。

サンプル通りLARGE_INTEGER使えって事だ

645 名前:642 :02/09/07 03:25
>>643

DWORD SetFilePointer(
HANDLE hFile, // ファイルのハンドル
LONG lDistanceToMove, // ポインタを移動するべきバイト数(下位32ビット)
PLONG lpDistanceToMoveHigh, // ポインタを移動するべきバイト数(上位32ビット)
DWORD dwMoveMethod // 開始点
);

確かにそうなんですが、下位32ビット lDistanceToMove は符号付って
書いてあるんです...もしかして、lpDistanceToMoveHigh が
Non-NULLのときは、lDistanceToMoveは符号無しとして扱われるのかな?

//実験すればすぐ分かりそうなもんですが...
 今カキコしてる環境では実験できないもんで(;´Д`)

646 名前:642 :02/09/07 03:27
>>644 はぁ、そうします。

647 名前:デフォルトの名無しさん :02/09/07 03:33
> もしかして、lpDistanceToMoveHigh が
> Non-NULLのときは、lDistanceToMoveは符号無しとして扱われるのかな?

そりゃそうでしょ。両方が符号ビット持ってどうするのよ。

648 名前:デフォルトの名無しさん :02/09/07 03:34
>>645
644じゃないけど
32ビットで符号つきならMSBと31ビットだけど
64ビットなら符号を上位32ビットに移せば下位32ビットの
MSBは符号を示す必要がなくなるじゃん。
下位32ビットで4GBまで表現できるわけでしょ。

649 名前:デフォルトの名無しさん :02/09/07 03:34
CreateWindow(....... LPARAM lParam) この最後の引数はなににつかうの?

650 名前:デフォルトの名無しさん :02/09/07 03:37
>>649
ウィンドウプロシージャに WM_CREATE が送られるとき、その lParam に渡すために使われます。

651 名前:デフォルトの名無しさん :02/09/07 03:39
>>649
MSDN参照。
ウィンドウを生成したときに WM_CREAT メッセージが
WinProcに飛んでくるがそのときに lParam 値に設定される。
使い方はお好きなようにどうぞ。

652 名前:651 :02/09/07 03:40
さっきからかぶってますな。ネマツ。

653 名前:642 :02/09/07 03:41
>647-648
こんな夜更けにどうも。勉強になりますた。

>For example, to move in the range from [0] to 4 gigabytes set
>the contents of lpDistanceToMoveHigh to zero, or ・・・
こう書いてくれれば...

654 名前:デフォルトの名無しさん :02/09/07 03:54
>>653
from 2 to 4 で問題ない。その少し前から文脈をよく読め。

655 名前:636 :02/09/07 10:57
自己レス
>>636

ひょっとして

CreatePen(PS_SOLID, 0, RGB(204, 204, 204))

とかで作ったペンで線書いても綺麗に出ないんでしょうか?
MSDN にそれっぽいことが。。。
中間色の直線を綺麗に出す方法どなたか教えてください。

656 名前:デフォルトの名無しさん :02/09/07 13:36
>>655
画面の色数がハイカラーやフルカラーなら普通に問題なく出るよ。
256色の場合はパレットを操らないとだめ・・・

657 名前:デフォルトの名無しさん :02/09/07 13:38
って、プリンタか。意味不明のレスしたね。ごめ。

658 名前:デフォルトの名無しさん :02/09/07 17:13
>>655
カラープリンタで1ドットの太さの線を描いてもディザリングの
処理のせいで思ったよりで綺麗に出ないんじゃないの

659 名前:デフォルトの名無しさん :02/09/07 17:18
>>655
中間色がそのまま出る、昇華型プリンタを買ってくる。

660 名前:デフォルトの名無しさん :02/09/07 18:38
デスクトップやアプリ上でのマウス操作(DownやUp、ドラッグなど)
それらに渡さないでを全て引き受けるような方法ありませんか?

661 名前:デフォルトの名無しさん :02/09/07 18:43
SetWindowsHookEx の WH_MOUSE とか、どう?

662 名前::02/09/07 18:44
>660
メッセージをフックする。
>それらに渡さないでを
そんなことしたらえらいことになるぞw

663 名前:デフォルトの名無しさん :02/09/07 19:11
>>661
フックというものですね、少し調べてみます。

>>662
>>それらに渡さないでを
>そんなことしたらえらいことになるぞw
そうなんですけどね、これができないと困るんですw

画面上でペイントみたいにお絵かきしたいんですが(お絵かきが最終目的ではありませんが・・・)
マウスのイベントをデスクトップや開いてるアプリに取られるとうまくいかないと思ったので。

664 名前:デフォルトの名無しさん :02/09/07 19:46
デスクトップ上に落書きしたいんであれば、透明なウインドウを最大化すればいいんじゃね〜の。

#define STRICT
#include<windows.h>
LRESULT CALLBACK WindowProc(HWND hWnd,UINT iMes,WPARAM wPrm,LPARAM lPrm)
{
  switch(iMes){
  case WM_DESTROY:    PostQuitMessage(0);    break;
  case WM_MOUSEMOVE:
    if(wPrm & MK_LBUTTON){
      HDC hDC = GetDC(hWnd);
      if(hDC){
        int y = HIWORD(lPrm);
        int x = LOWORD(lPrm);
        HBRUSH hb=SelectObject(hDC,CreateSolidBrush(RGB(255,0,0)));
        Ellipse(hDC,x-8,y-8,x+8,y+8);
        DeleteObject(SelectObject(hDC,hb));
        ReleaseDC(hWnd,hDC);
      }
    }
    break;
  }
  return DefWindowProc(hWnd,iMes,wPrm,lPrm);
}
--- 続きます ---

665 名前:664 :02/09/07 19:47
--- 続き ---
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR CmdLine,int CmdShow)
{
  HWND hWnd;
  MSG msg;
  WNDCLASS wc;
  memset(&wc,0,sizeof(wc));
  wc.lpfnWndProc=WindowProc;
  wc.hInstance=hInstance;
  wc.hCursor=LoadCursor(NULL,IDC_ARROW);
  wc.lpszClassName="Hello";
  if(! RegisterClass(&wc))return 0;
  hWnd=CreateWindow("Hello","Hello",WS_TILEDWINDOW,
  CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
  CW_USEDEFAULT,NULL,NULL,hInstance,0);
  if(! hWnd)return 0;
  ShowWindow(hWnd,SW_SHOWMAXIMIZED);
  while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
  return msg.wParam;
}

666 名前:660 :02/09/07 20:08
>>664
なるほど、そういう手もありましたか^^;
結構お手軽な方法ですね。



667 名前:デフォルトの名無しさん :02/09/07 21:23
斜め45度に傾いた細長のペンを作りたいのですが、出来ますか?
LOGBRUSHでDIBペンやHATCHペンではダメでした。

668 名前:デフォルトの名無しさん :02/09/07 22:24
> 斜め45度に傾いた細長のペン

意味不明

669 名前:デフォルトの名無しさん :02/09/08 01:05
ペンの形ってこと?
斜め45度に傾いた直線型のペンを作りたいとか?

670 名前:デフォルトの名無しさん :02/09/08 01:58
現在ソースの無い DLL を解析しているのですが、特定 DLL 内への呼び出しを
全てフックするなり、ログを取るなりできるデバッガ/ツールを御存知ないで
しょうか。

# いまのところ ollydbg と言うデバッガを使っているものの、DLL 内の
# エントリポイント全てにブレークポイントを設定するのは困難なので、
# もう少しいいデバッガ/ツールが欲しくなっています。


671 名前:デフォルトの名無しさん :02/09/08 02:02
風俗サイト広告逝ってよしっ!第3回戦
ただいま戦闘中!!!
嫌いな人はこちらへ漏れなく串つき
http://live.2ch.net/test/read.cgi/festival/1029826982/l30
頭のいい人限定

672 名前:グローバルIPの取得方法 :02/09/08 02:31
Web上の自作CGIや確認君から読み込む方法と
Ipconfigで書き出したテキストから読み込む方法と
試したのですが、あまりいい方法だと思いません。
みなさんどうしてます?

673 名前:デフォルトの名無しさん :02/09/08 02:43
ipconfigはグローバルIP吐かないと思うが

674 名前:デフォルトの名無しさん :02/09/08 03:00
>>673
OCNとか犀ネットの専用線なら吐く。
吐かないのはADSLでマスカレードかかってる場合。

675 名前:デフォルトの名無しさん :02/09/08 03:02
>>673
漏れは672じゃないが、
モデム直結なら、グローバルIPを吐くんじゃないの?
当方、ルータユーザーだから分からんが。




676 名前:デフォルトの名無しさん :02/09/08 03:18
ホスト名は環境変数から引いてそれを下のようにしてDNSを引く。
なお、ADSLのようにグローバルIPを変換しているような鯖は、
グローバルアドレスは実際の鯖のIPとは別なので、
あらかじめ外向けのホスト名を自分でセットしておく。

int setinetaddrbyname(struct sockaddr_in &addr, const char *s) {
struct hostent *hp;
if ((hp = gethostbyname(s)) == NULL) { // 引けない
return -1;
} else if (hp->h_addrtype != AF_INET) { // IPv6/NetWare?
return -1;
} else {
addr.sin_addr.S_un.S_un_b.s_b1 = hp->h_addr_list[0][0];
addr.sin_addr.S_un.S_un_b.s_b2 = hp->h_addr_list[0][1];
addr.sin_addr.S_un.S_un_b.s_b3 = hp->h_addr_list[0][2];
addr.sin_addr.S_un.S_un_b.s_b4 = hp->h_addr_list[0][3];
return 0;
}
}


677 名前:使えねーPaintDesktop :02/09/08 03:41
表示中のDesktop画像を取得したいのですが,PaintDeskTopでは
ActivDesktop のときに取れません.
方法はあります?

678 名前:使えねーPaintDesktop :02/09/08 03:50
↑あ,デスクトップの背景です.アイコンやウィンドウのない原画です.

679 名前:グローバルIPの取得方法 :02/09/08 04:22
>>673
そうなんですよねぇ
うちはADSLモデム直なのでipconfigでもいいのですが
環境によって使えないのはどうかと思いまして
>>676
非常に申し訳ないのですが理解不能です^^;
676さんの書き込みをヒントになんとか頑張ってみます。
分からなかったときはまた書き込むと思いますが
そのときはよろしくお願いします。
ありがとうございましたー

680 名前:デフォルトの名無しさん :02/09/08 13:26
>>668
>>669

>斜め45度に傾いた直線型のペンを作りたいとか?
そうです、ペンの形が45度傾いた物です、説明不足でした。
LineToで線を引いたときに、傾きと同じ角度の線をひくと細く、
傾きと垂直な方向に線を引くと太くなるようなペンを作りたいのです。

落書き機能を実現するためで、ペンの形を色々変えたいのですが、
丸と四角はPS_ENDCAP_ROUNDとかで実現できたのですが、斜めに傾いた
ものはつくれませんでした。

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

/ ←こういうやつ?

◆ 右下に引きずるとこうなって

  / 右上に引きずるとこうなるってやつだよな?


682 名前:デフォルトの名無しさん :02/09/08 20:02
マウスカーソルを変更するプログラムの方法について質問したいので
すが、自分の作ったプログラムのウィンドウ上ではSetCursor()API
を使用するだけで可能ですが、それ以外のウィンドウではウィンドウ
のシステムで設定されているカーソルになってしまいます。
どなたか、自分のプログラム以外のウィンドウ上のマウスカーソルの
変更方法を知っている方はいらっしゃいませんか。

683 名前:_ :02/09/08 20:24
infファイル、あれ右クリックすると[インストール]と出ますよね。
で、[インストール]するとドライバが入るわけですが、
あれってどういう機構になっているんでしょうか?

なにかinfファイルを処理するコマンドに食わせているのか、
シェル?にそういう機構が組み込まれているのか。

インストーラからドライバを入れたいのだけど...。
どうしたらいいのか検討つきません。

どなたかご存知の方いらっしゃいませんか?



684 名前:デフォルトの名無しさん :02/09/08 20:31
>>679
> うちはADSLモデム直なのでipconfigでもいいのですが
> 環境によって使えないのはどうかと思いまして
それは、しょうがない。そもそもルーター経由の場合は、ルーターのグローバル
アドレスの情報はルーターにしかないから取り様が無い。
ところで、何でグローバルアドレスを知りたいの ?
ついでに、一つのマシンに複数の IP アドレスが持てることは知ってるよね ?

685 名前:デフォルトの名無しさん :02/09/08 20:35
>>683
> なにかinfファイルを処理するコマンドに食わせているのか、
> シェル?にそういう機構が組み込まれているのか。
explorer で関連付けされてるよ。うちのマシンだと...

C:\WINNT\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %1

となっている。

686 名前:デフォルトの名無しさん :02/09/08 21:22
>>681
遅レスですみません。そうです、そういうペンです。APIで設定次第で
できるようなものではないですか? PS_ENDCAP_FLATというのがあったんですが
あれはペンの角度がラインの角度と勝手に垂直になってしまうのです。

687 名前:_ :02/09/08 22:36
ソフトからディスプレイをオフにすることはできますか?
例えば、席をはずしたいがスタンバイはしたくない場合に
使いたいと思っています。
google などで検索してもわかりませんでした。


688 名前:デフォルトの名無しさん :02/09/08 22:42
>>686
角度から計算して線の太さを変えてみたらどうか、と思ってみるテスト。
あるいはPolygonで平行四辺形を描くとか。

689 名前:デフォルトの名無しさん :02/09/08 23:05
>>682
> 自分のプログラム以外のウィンドウ上のマウスカーソルの変更

勝手にされたらウザいからやめれ

690 名前:デフォルトの名無しさん :02/09/08 23:29
>689
デスクトップキャプチャソフトとか作りたいんでないかい?
ドラッグで範囲指定できるような

691 名前:デフォルトの名無しさん :02/09/08 23:32
ドラッグ中ならマウスイベントは自分のウィンドウに飛んでくるから
何も問題ないわけだが

692 名前:デフォルトの名無しさん :02/09/08 23:33
>>688
あ、そっか。普通に計算して描画させればいいですね。
なるほど、ペンを使うことばっかり考えてました、

693 名前:デフォルトの名無しさん :02/09/09 00:06
ドラッグじゃなくてクリック→クリックで範囲指定するキャプチャソフトもあるぞ。PSPとか。
マウスカーソルも変更されてるから>>690の言ってるような可能性もないわけではない。

694 名前:デフォルトの名無しさん :02/09/09 00:14
こんばんは。どなたか教えてください・・・

マルチディスプレイ環境で、ディスプレイを指定して
(たとえばセカンダリ・ディスプレイに)Windowを
作るにはどうすればいいのでしょうか・・・

たとえば1024*768のディスプレイが2つ左右に並んでいる場合、
createWindowの引数でWindowの位置を(1300,200)とかに
すれば一応右側のディスプレイにWindowを作ることは出来ますが、
これだとディスプレイが上下にある場合に対応できない、等の
問題が生じてしまいます。必ずセカンダリディスプレイの中央に
Windowを生成したい、というときにはどうすればいいのでしょう??


695 名前:デフォルトの名無しさん :02/09/09 00:25
>>694
EnumDisplayMonitors/GetMonitorInfo (98/2000以降ゆえ注意)
あたりでセカンダリディスプレイの座標系を調べて
そこにMoveするというのはどうかなあ
やったことないので実験結果プリーズ(はぁと)

696 名前:デフォルトの名無しさん :02/09/09 00:30
>>694
EnumDisplayMonitors/GetMonitorInfo


697 名前:694 :02/09/09 00:39
>>695
>>696

 さっそくレスありがとうございます。
 また結果が出たら報告させていただきます。


698 名前:デフォルトの名無しさん :02/09/09 03:40
>これだとディスプレイが上下にある場合に対応できない、等の
>問題が生じてしまいます。必ずセカンダリディスプレイの中央に
>Windowを生成したい、というときにはどうすればいいのでしょう??

ユーザが二つのモニタを左右に配置しているか上下にしているか
コードで知ることはできるのだろうか?
コード上では、いつも左右に配置していると仮定するとよいのでは?


699 名前:デフォルトの名無しさん :02/09/09 04:25
>>683
infファイルの書式についてはPlatformSDKに簡単な説明があったはず。
ただ、深くまで知ろうとすればDDKが必要。
>>687
WindowMessage、SystemCommand(詳細忘れた。MSDN探せば直ぐ見つかる)

700 名前:デフォルトの名無しさん :02/09/09 06:06
WinMain関数が呼ばれてから破棄されるまで、
第一引数のインスタンスハンドルの値が不変であることは保証されてますか?

クラスのprivateメンバに組み込もうか
必要になる度に呼び出そうか悩み中

701 名前:デフォルトの名無しさん :02/09/09 06:19
>>700
不変というのが変数(第一引数)の値のことを言ってるのか
実際のハンドルのことを言っているのかよくわからん。

ハンドルは不変だし、
変数の方もローカルな変数である以上、
自分で書き換えるような真似をしなければ不変。

702 名前:デフォルトの名無しさん :02/09/09 06:27
ごめん言い方まずかった・・・
というか、日本語間違えました

要はOSから割り当てられたアプリケーションのハンドルが
アプリケーションが終了するまで不変かどうか知りたかっただけです

ありがとう

703 名前:デフォルトの名無しさん :02/09/09 06:28
あう・・・
>702=>700

>701へのレスでした

704 名前:デフォルトの名無しさん :02/09/09 07:14
wsocketについて質問です。

socketで接続しデータを読み込む際
非同期で読み込みたいのですが
WSAAsyncSelec を利用するのはわかりましたが、

それ以外の方法はないのでしょうか?
(ウインドウを使わずにやりたい)


705 名前:デフォルトの名無しさん :02/09/09 07:23
>>704
WSAEventSelect

706 名前:デフォルトの名無しさん :02/09/09 08:17
iocp

707 名前:デフォルトの名無しさん :02/09/09 13:21
iocpの銭形だ

708 名前:デフォルトの名無しさん :02/09/09 15:17
穴cかよ

709 名前:デフォルトの名無しさん :02/09/09 16:04
スライダーを自前で描こうと思い、サブクラス化してWM_PAINTやらERASEBKGNDやらを
書き換えたんですが、つまみをぐりぐりいじったときの描画が微妙です。

こういったことを紹介しているサイトなどはありますでしょうか?

710 名前:_ :02/09/09 20:13
>>685
>>699
ありがとうございます。
その辺から攻めてみようと思います。

711 名前:デフォルトの名無しさん :02/09/09 23:39
DrawText() とかで、任意の位置でワードラップしたいときは
自前でゴリゴリ書かないとダメですか?

712 名前:デフォルトの名無しさん :02/09/10 00:25
関数はユーザの「任意」を知ることはできませんので
自分で書くしかないのでは

713 名前:デフォルトの名無しさん :02/09/10 00:47
>>712
いや、80文字目で、とか。。。

まぁ自分でやるのは別にいいんですけど、
そういうワードラップ用コールバックが指定できる関数ありませんでしたっけ?

714 名前:694 :02/09/10 01:32
>>695
>>696
>>698

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

> やったことないので実験結果プリーズ(はぁと)

> ユーザが二つのモニタを左右に配置しているか上下にしているか
> コードで知ることはできるのだろうか?
> コード上では、いつも左右に配置していると仮定するとよいのでは?

 こんな感じでマルチモニタの情報をもらえました。
 (モニターを上下に配置したときの例)

(1つ目のディスプレイについて)
仮想モニタ上の位置(rect): (0, 0, 1600, 1024)
デバイス名: \\.\Display1\Unit0

(2つ目のディスプレイについて)
仮想モニタ上の位置(rect): (0, 1024, 1024, 1792)
デバイス名: \\.\Display1\Unit1


715 名前:694 :02/09/10 01:36
>>714
 ちなみに一つ目が1600*1024で二つ目が1024*768だった
時の例です。

716 名前:デフォルトの名無しさん :02/09/10 06:51
ウインドウズのAPIに
ソニータイマー関数はありますか?

717 名前:デフォルトの名無しさん :02/09/10 09:29
WindowsXPの一部の機種で、OSに処理を返さないプログラムが
画面に描画をしつづけると、10秒後ぐらいから描画がされないく
なってしまう現象があります。(内部での処理は正しく続く)

これってXPになってからの仕様なのでしょうか?
ちとすれ違いスマソ

718 名前:デフォルトの名無しさん :02/09/10 09:42
> OSに処理を返さないプログラムが画面に描画をしつづけると、
OSに処理を返さないってどういう意味よ。
GetMessageやPeekMessageを呼ばないってこと?
もしそうなら、WM_PAINTの処理とは他のところで
直接描画してるってこと?

> 描画がされないくなってしまう現象があります。
> (内部での処理は正しく続く)
描画がされなくなるってどういう画面になるのよ。
正しく続くって、デバイスコンテキストの取得も
描画関数の戻り値も調べてみて成功しているってこと?

もっと具体的に説明しよう。

719 名前:717 :02/09/10 09:55
>>718
舌足らずですみません。

> GetMessageやPeekMessageを呼ばないってこと?
> もしそうなら、WM_PAINTの処理とは他のところで

そうです。
InvalidateRect(hWnd, &rc, TRUE);
UpdateWindow(hWnd);
で直接WM_PAINTを呼んでいます。

他のケースではモードレスでダイアログを立ち上げて
時間のかかる処理中で進捗状況を
SetDlgItemText(hWnd, IDM_CURRENT_STATUS, sTmp);
でループ中で書き換えています。

> 描画がされなくなるってどういう画面になるのよ。

画面が真っ白になってしまいます。

> 正しく続くって、デバイスコンテキストの取得も

戻り値は調べてなかったです。
これがおかしくなってたのかな?
ちと調べてみます。

720 名前:デフォルトの名無しさん :02/09/10 10:33
>>719
>InvalidateRect(hWnd, &rc, TRUE);
>UpdateWindow(hWnd);
ループ中にメッセージ処理しなきゃ意味ないよね?

721 名前:717 :02/09/10 10:45
>>720
ん〜今までだとループに処理を戻さなくても
強制的に再描画してくれたのだが。

722 名前:デフォルトの名無しさん :02/09/10 10:48
>>719
あ、それなら俺の環境(Win98SE)も似た現象が発生するよ。

Winを起動してからかなりの時間使った後に限ってだけど、
自前の画像ビューアとかIEとかで、大きな画像を表示させると、
描画されずにクライアント領域が全部真っ白(背景色)になる。
この時、小さい画像なら描画される。
(まるでシステムリソースが残っていないような感じ)

普通のメッセージループを使って、WM_PAINTでの応答で
BeginPaint
StretchDIBits
EndPaint
としているだけなんだけどね。

API関連の戻り値は全部成功を返してくるので、
アプリケーションレベルでは異常を認識できない。

1つのマシンだけで起きるので、ビデオカード(G400)の
ドライバに関連する問題かなって思って諦めてる。

>>720
ループなど必要なし。
自スレッドのウィンドウなら、
UpdateWindowを呼んだ時にWM_PAINTが送られてくる。

723 名前:722 :02/09/10 10:50
719=722です。

724 名前:722 :02/09/10 10:52
ごめん間違った。 722=718。

725 名前:717 :02/09/10 10:59
>>722
あ、Win98SEでも発生するんですか。
手持ちのマシンではThinkPad X24 のXPで発生するのと
客先のマシンで発生してます。(機種は不明)

自作のXPマシンでは問題ないのでやっぱりVGAのドライバに
依存するんでしょうかね。
(ただこちらでは起動後の時間には関係なく発生しますけど)

情報ありがとうございました。
客先には仕様だと言って逃げることにします。

726 名前:722 :02/09/10 11:17
>>725
あとは、ハンドルの解放忘れ等によるリソースリークが
起きてないかどうかを調べてみた方がいいかもね。

727 名前:デフォルトの名無しさん :02/09/10 23:21
SetWindowRgn で楕円作ったつもりが楕円の下側が直線状に欠けてしまう
(メーターの表示板みたいな形)んですが,何が原因でしょうか.


728 名前:デフォルトの名無しさん :02/09/10 23:26
>>727
ウィンドウからはみ出したとか・・・

729 名前:デフォルトの名無しさん :02/09/10 23:26
使ったことないけど
クライアントのサイズ←→ウィンドウのサイズの差分だけ欠けてるとか。

730 名前:デフォルトの名無しさん :02/09/10 23:48
CreateWindow での設定サイズをオーバー

731 名前:デフォルトの名無しさん :02/09/11 00:43
タイトルバーが無くて
ウィンドウのサイズ変更もできない
ただ白い四角形が表示されるだけのウィンドウって作れますか?

732 名前:デフォルトの名無しさん :02/09/11 00:45
>>731
もちろん。

733 名前:デフォルトの名無しさん :02/09/11 01:09
>>716
VAIOシリーズにだけOEM供給されています

734 名前:デフォルトの名無しさん :02/09/11 01:53
質問というかなんというか・・・
http://www.users.gr.jp/ml/archive/delphi/25766.asp
ここ見ると、
規約 順序 後始末
stdcall 右から左 関数
pascal 左から右 関数
cdecl 右から左 呼び出し側
と説明されてますが、
__pascalコールで呼び出す必要のあるWin32APIってありましたっけ。
一部(wsprintfなどは__cdecl)を除いて、__stdcallですよね?
windef.hを見てもPASCALは__stdcallと定義されてるし。
x86を前提とした場合は__pascalは使われないと考えて良いのでしょうか?

735 名前:デフォルトの名無しさん :02/09/11 01:59
win16ではpascal使ってます

736 名前:デフォルトの名無しさん :02/09/11 02:03
win32は無いかな。

737 名前:びひゃ〜ん ◆CplusNDg :02/09/11 02:20
MFCだけど...MSDNのCWnd::GetFocusのリファレンスにはこんな記述が残ってるぞ。

static CWnd* PASCAL GetFocus( );

738 名前:びひゃ〜ん ◆CplusNDg :02/09/11 02:24
ってよく読んだら、
「__pascal、__fortran、__syscall
の各呼び出し規約はサポートされなくなりました。」
と書いてある。>>734にあるようにPASCALはマクロだったのね。逝ってきます。

739 名前:734 :02/09/11 02:24
>>737
いや、ですから、そのPASCALの元定義は__stdcallになってます。
(windef.h参照)

740 名前:デフォルトの名無しさん :02/09/11 02:25
>>737
741をよく読め。
> windef.hを見てもPASCALは__stdcallと定義されてるし。

741 名前:734 :02/09/11 02:26
色々ヘッダ見て回りましたが、どうやら__pascalは使われてないみたいですね。

>>738
あ、サポート外ってことでしたか。
これですっきりしました。

調べていただいた方々、ありがとうございまいた。

742 名前:びひゃ〜ん ◆CplusNDg :02/09/11 02:27
>>739-740
ごめんなさい。

743 名前:740 :02/09/11 02:30
>>741
738の引用元はSDKでなくコンパイラのヘルプでしょ。
どちらにしろ使われてはいないだろうが。

744 名前:740 :02/09/11 02:34
>>742
いえいえ。こちらこそ、
> 逝ってきます。
って書かれた後に追い打ちを掛けてしまってすみません。

745 名前: ◆BkH732nY :02/09/11 10:15
TCP/IPで、構造体の送受信はどうやればいいのですか?
サンプル等あったら教えて下さい。

746 名前:デフォルトの名無しさん :02/09/11 10:23
>>745
構造体もなにもバイナリで渡すだけだと思うのだが。

747 名前:デフォルトの名無しさん :02/09/11 15:13
WinAPIでメールを送信する場合、一番楽なのはどれですか?
やはりMAPIでしょうか?数行でできないでしょうか?


748 名前:デフォルトの名無しさん :02/09/11 15:22
>>747
つーかそんな変なの使わずともsocketで数〜十数行だと思うが。

749 名前:748 :02/09/11 15:23
とりあえず「socket smtp」で検索すれば沢山出てくるよ。

750 名前:デフォルトの名無しさん :02/09/11 15:36
休止状態をサポートしてるかどうか調べるAPIおしえてくださいまし。


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