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


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

Win32API 質問箱
751 名前:デフォルトの名無しさん :01/11/07 23:20
Viewは、ファイルじゃない。
ファイルにマップされた「メモリ」だ。

ふつうにメモリ操作しとけ。

752 名前:デフォルトの名無しさん :01/11/07 23:21
Viewは使い終わったらきちんとUnmapしとけ。
してないだろ

753 名前:デフォルトの名無しさん :01/11/07 23:29
EXPORT LRESULT CALLBACK MyHookProc(int nCode, WPARAM wp, LPARAM lp)
・・・・・・・
・・・・・・・
hMapFile1 = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "MyObject1");
//SetFilePointer(hMapFile1,0,0,FILE_BEGIN);
buf=(char *)MapViewOfFile(hMapFile1,
FILE_MAP_ALL_ACCESS, 0, 0, 0);

ハンドルが各プロセスに継承できるみたいですがまだやってません。
なので、毎回呼んでます。OpenFileMapping&MapViewOfFile
何千回もやるので、UnMapViewOfFileはフックの終了時
に一回だけやります・・・

754 名前:デフォルトの名無しさん :01/11/07 23:57
UnmapはMapした回数分きちっとやれ。
手を抜くな。

755 名前:デフォルトの名無しさん :01/11/08 00:00
>>753はメモリを何千回も確保したあとで、最後に一回だけ解放するタイプか?(藁

756 名前:デフォルトの名無しさん :01/11/08 00:12
戻り値をチェックしていますか?

757 名前:デフォルトの名無しさん :01/11/08 00:59
あと、OpenFileMapping でオープンしたハンドルはちゃんと CloseHandle しないといけない。
でないとシステムにハンドルがどんどん溜まっていく。
特に別プロセス内(例えばエクスプローラとか)でハンドル作るので、
解放し忘れはシャットダウンするまで解放されない可能性があって、
非常に(゚Д゚)マズー!

758 名前:デフォルトの名無しさん :01/11/08 01:05
WinXPで追加されたAPIってどんなのがあるの?

759 名前:デフォルトの名無しさん :01/11/08 01:06
システムフックで使われるDLLは各プロセスにロードされるとの事ですが、
これは、例えば、
プロセスが10個走っていて、
DLLのコード領域だけでが1メガメモリを消費する場合、
最初から物理メモリは10メガ消費されるのでしょうか?

それとも、コード領域に変更があった時に初めてコード領域を
コピーするのでしょうか?

760 名前:デフォルトの名無しさん :01/11/08 01:20
いや、コード領域はDLLのファイルマッピングなんで、ムダにメモリを消費はしません。
ただしマップされるアドレスはプロセスごとに異なります。

んで、コード領域は読み出し専用なんで、変更できません。たしか。

データ領域はプロセスごとに用意されますです。

761 名前:デフォルトの名無しさん :01/11/08 01:21
>>759
> 最初から物理メモリは10メガ消費されるのでしょうか?
No

> それとも、コード領域に変更があった時に初めてコード領域を
> コピーするのでしょうか?
Win NT/2000/XP 系では、その通り

Win 9x/ME 系だと、そもそも書き込めない (copy on write が実装されてないので)
だからシステム DLL に対してブレークポイントを設定できません

762 名前:760 :01/11/08 01:26
>>761
あ、NTはそーなんだ。情報さんくす。

763 名前:760 :01/11/08 01:36
>>761
・・・コード領域って変更できたっけ?
言われてみれば確かにブレークポイントを仕掛けるために
書き換えないといけないよな・・・
あれ???

764 名前:デフォルトの名無しさん :01/11/08 03:02
>>755
ぬわにぃぃぃ!笑われてしまいました。けどどーもうれしいっス。
FileMappingはなんだかmallocやglobalallocに似ていて、
これらの命令は大して時間のかからない命令だと聞いたことがあるので
そう思ってUnmapもいっぱいやることにします。クローズもやります。
返り値もやります。ありがとうございます

765 名前:デフォルトの名無しさん :01/11/08 04:04
・・・・うまくいきました。快適な動作です。
けれど、毎回openfilemapping,closehandleをしているのに、なんで
値が残っているのがわかりません。、たとえば、マッピングじゃ
なく、ほんもののファイルだったら、closehandleしても”ファイル名”の
ファイルが残るわけですけど、今回はいわば”MyObject1”というファイルが
残ると考えるのでしょうか。けれど、そのばあい、プログラムが終了しても、
”MyObject1”というファイルが、残ることとなり、これを消すにはどうしたら
いいかわかりません。MyObject1自体どこにあるかわからないし・・・・

766 名前:デフォルトの名無しさん :01/11/08 04:07
CreateWindowEx で WS_EX_TOPMOST とやっても
新たに作られたウィンドウの下になってしまいます
常に最前面を保証することは出来ないんでしょうか?

767 名前:デフォルトの名無しさん :01/11/08 07:21
TOPMOSTしてるのは98%ドキュンプログラム。

768 名前:デフォルトの名無しさん :01/11/08 09:25
>765
リファレンスカウントがある。全部CloseHandleしたらファイルもなくなるはず。
ところで、Dllのロード時にOpenFile&MapViewしてアンロード時にUnmap&Close
してやればいいんじゃないの?まあ快適ならそれでいいけど。

769 名前:デフォルトの名無しさん :01/11/08 10:43
>>765
Openしたものだけじゃなく、Createしたものも含めて全部
アンマップ&クローズしたら、消えるはず。

770 名前:デフォルトの名無しさん :01/11/08 10:46
>>766
そんなソフト使いたくない。邪魔だ。消えれ。

・・・という個人的な感情を置いとくなら、
タイマかなんかで常にSetWindowPosで前にもってくれば良いのでは?

771 名前:デフォルトの名無しさん :01/11/08 11:07
ついでにZOrderいじるのも99%ドキュンプログラム。

772 名前:t.t :01/11/08 11:08
Bitmap A(大)とBitmap B(小)を用意しまして、
Bitmap AをWindowに描画して、Bitmap Aの座標系
でBitmap Bを回転して描画しようとしています。

回転させたBをAに描画しますと、白い隙間ができてしまいます。
何か方法がございましたらご教授願います。

773 名前:デフォルトの名無しさん :01/11/08 11:16
いまいち解からん。隙間ってなに?
何か方法って、何をどうしたいの?

774 名前:デフォルトの名無しさん :01/11/08 11:17
>>772 それは Win32API の質問なのか?

775 名前:デフォルトの名無しさん :01/11/08 11:28
>>770 >>771
LiveDoorとか広告付きプロバイダのクライアントソフト作ってるんだろ

776 名前:デフォルトの名無しさん :01/11/08 11:34
>>770
作ってるのはスクリーンセーバなので常に最前面にあって欲しいのです
それと高速化のため描画をケチって変化があった部分だけにしてるので
他のウィンドウに前へ出てこられると画面に残ってしまうのが困るのです

777 名前:デフォルトの名無しさん :01/11/08 11:38
他のウィンドウが前へ出てきたら
スクリーンセーバーを終了というのはどうでしょう。

778 名前:デフォルトの名無しさん :01/11/08 12:00
>>777
いちおうWM_ACTIVATEを拾って終わるようにはしてるんですが
なんか悔しいので常に最前面にする方法はないのだろうかと

ちなみに >>772 はBを回転してWindowに描画するのではなく
Windowをドット走査して回転後のBの範囲なら色を転写で済むかと

それから >>767 >>771 >>775 は逝って良しかと

779 名前:デフォルトの名無しさん :01/11/08 18:07
>>768,769
納得いきました。ありがとうございます。

780 名前:デフォルトの名無しさん :01/11/09 18:15
>>772
「あるドットが回転・拡大後にどこに当たるかを算定すると、
ドットが抜けて白くなったり、計算量が増えてイヤン。
拡大・回転後のドットが元々はどこにあったのか、を算定
すると、そのあたりが旨くいって(・∀・)イイ!」
という記事をどっかで、見たことがあるな。

781 名前:デフォルトの名無しさん :01/11/09 21:52
多分まだ作らないんですけどドライバはどーやって作ったり
コンパイルするんですか?

782 名前:デフォルトの名無しさん :01/11/09 21:58
ほとんどがCとアセンブラで書かれてる。
たまにぜんぜん違うので書かれてるかも知れない。

DDK嫁

783 名前:デフォルトの名無しさん :01/11/09 23:10
質問ッ!
フォントのベースライン位置を取得する方法はありませんか!

複数種類のフォントが混在する文字列を、
ベースラインにそろえてビシッと描画したいのです!
でもTextAlignは「ベースラインを指定」でなく「左肩」を指定したい!
(描画開始位置として左肩座標を指定し、かつ、
 基準となるフォントのベースライン位置に
 ほかのフォントのベースラインを合わせたい)
さぁ、君ならどうするッ!?

784 名前:デフォルトの名無しさん :01/11/09 23:14
めんどくさいのであきらめる

785 名前:デフォルトの名無しさん :01/11/09 23:24
GetGlyphOutlineで、ちまちま調べながら書く。

786 名前:デフォルトの名無しさん :01/11/09 23:32
>>780
Cマガジンぽい

787 名前:デフォルトの名無しさん :01/11/09 23:53
>>785 レスありがとうッ!
うーん、しかしGetGlyphOutlineはあまりにも生っぽいかなぁ‥‥。
なんかもっと一撃でベースラインを得る手段が有っても
よさそうなもんなのになー。

「ベースラインから」指定で、メモリDC上に
背景塗りつぶしを伴う描画をさせ、
ピクセルを走査して実際に描画された高さを得て、
ベースラインからの上下高さを計算する
‥‥という泥臭い方法を思いついた。

だがもっとスマートなやり方きぼん。

>>784のレスにも愛を感じたYO‥‥アリガd

788 名前:785 :01/11/10 00:05
>>787
あー。
なぜ思い付かなかったのか。
GetTextMetricsだ。

789 名前:デフォルトの名無しさん :01/11/10 00:21
>>788
あ、そうか!!
TEXTMETRICの解説も目を通してたがBaselineって名前のメンバを探してた‥‥
しかしなるほどこれでいける!↓
http://akasaka.cool.ne.jp/phys/physjpn/htextmetric.htm

了解ッ! ありがとぉ!!

790 名前:デフォルトの名無しさん :01/11/10 03:17
テキスト中で}を検索すると、カタカナの「マ」も引っかかってしまう
のですが、こういうのはどうしたらいいんでしょう。。
だいたいコンパイラとかはどうやって判別してるのかが疑問だし興味があります。

791 名前:デフォルトの名無しさん :01/11/10 03:35
>>790
2 バイト文字の先頭バイトだったら (_ismblead()) 次のバイトを読み飛ばす。
マルチバイト文字列をやめて、ワイド文字列にしても良いけど。

792 名前:デフォルトの名無しさん :01/11/10 04:08
>>780 778に同じこと書いてあるじゃん。

793 名前:デフォルトの名無しさん :01/11/10 06:07
wsock32.dllにEnumProtocolがあります。
dllを自作して使用したことがあって(GetProcAdressを用いて)。
あるんですが、どうも今回はGetProcAdress(hSoLib,"EnumProtocol")と
やっただけではカーネルの例外とかなにやらのページ違反がでるので
だめです。GetProcAdressで、windows\systemのdllを使う方法
とかを調べれば光が見えてくるでしょうか?

794 名前:デフォルトの名無しさん :01/11/10 12:06
>>793
WinNT & VC++6(SP0かな)の環境だと、
wsock32.dllに実際に含まれているのは
  EnumProtocolsA (forwarded to MSWSOCK.EnumProtocolsA)
  EnumProtocolsW (forwarded to MSWSOCK.EnumProtocolsW)
で、EnumProtocols自身は、VC98/Include/NSPAPI.hで
上記のいずれかに#defineされてる。
本当にwsock32.dllでEnumProtocols()が提供されてる?
実際試してみたけど、GetProcAddress()はNULLを返すよ。

795 名前:デフォルトの名無しさん :01/11/10 17:48
我流でいい方法を見つけました。それはimplibで.libを作ってから
手っ取り早くtypeあるいはmoreすることです。そうすると、
EnumProtocolsAとEnumProtocolsWはあって、EnumProtocols()は
ないです。(ごめんなさい)けれど、EnumProtocolsAでさえ、
やはりGetProcAdressできません。(Win98、純粋なフリーコンパイラ)
main.cppの(my)includeファイルで、#define EXPORT extern "C" __declspec(dllexport) __stdcall
を使ったりするのか、、わかりません。また報告します

796 名前:デフォルトの名無しさん :01/11/11 22:44
APIじゃないかもしれませんが・・・。

CDのオートランなんだけど
autorun.infに
[autorun]
OPEN=AUTORUN.EXE
ICON=AUTORUN.EXE
て今までかいていたのだけど

AUTORUN.EXEに引数を渡すのにはどうすればいいのでしょうか?
[autorun]
OPEN=AUTORUN.EXE -option
ICON=AUTORUN.EXE

だと動きませんでした。どこかにちゃんとしたドキュメントはないのでしょうか?

797 名前:デフォルトの名無しさん :01/11/12 10:13
autorun.exe -option を ShellExecute する autorun2.exe を作るんじゃダメ?

798 名前:デフォルトの名無しさん :01/11/12 17:08
CreateWindowで作ったエディットコントロールの背景色を
変えたいのですが、WM_CTLCOLOREDIT、SetBkColor()で
文字のある行の背景色は変わるのですが、何もないところの
色はシステムのカラーになってしまいます。全体的に背景色
を変えるにはどうすればいいんでしょうか。

799 名前:教えてクン :01/11/12 17:35
さっきほど間違えて,VB質問へ書いてしまった...

あの,CreateFileA等のDLLのソースは
公開されてるのでしょうか?
それに,似たDLLを作りたいので,どなたかご存知の方
よろしくお願いします.

800 名前:デフォルトの名無しさん :01/11/12 17:38
>>798
WM_CTLCOLOREDITで、背景にしたいブラシのハンドルを返します。
このハンドルはエディットボックスが存在する限り保持しないといけませんが、
最終的には自分で破棄してください。

801 名前:デフォルトの名無しさん :01/11/12 17:39
>>799
APIのソースは公開されてないはずです。
似たDLLって一体・・・?

802 名前:教えてクン :01/11/12 17:47
>801
そうですか,ありがとうございました.
ある理由でWinAPIが使えない環境なんで,
独自のAPIを作らなければいけなくなってしまって...

803 名前:デフォルトの名無しさん :01/11/12 19:28
ハンドルとかが難しくてわかんないからWIN32API禁止とか言われたんだろう。
かわいそうに..

804 名前:教えてクン :01/11/12 19:38
>803
いえ違います.あるHWに特化していて,
WinAPIじゃ同期がとれないので,
作る羽目になりました.
もちろんWinAPIもコールできますけど,
NT系のOSだと,キャッシュとかするし,
まあ理由はいろいろです.
ソフト屋さんはHWのことあまり考えないからまいっちんぐ

805 名前:803 :01/11/12 19:42
あらららHW絡みですか。

NTならROWLEVELアクセスとかも一応あるから
それでがんばってみては?

806 名前:デフォルトの名無しさん :01/11/12 20:07
WINAPIの使い方が解りません
<windows.h>を読み込めばいいのですか?

807 名前:デフォルトの名無しさん :01/11/12 20:16
Platform SDKのドキュメントを読みなさい

808 名前:デフォルトの名無しさん :01/11/12 20:39
803=アホ

809 名前:794だけど、795は793だよな? :01/11/13 05:48
>>795
乗りかかった舟なんで、もうちょっとつきあうけど、
WinNT & VC++6.0(sp0)の環境で、EnumProtocols()ではなく、
EnumProtocolsA()やEnumProtocolsW()に対してGetProcAddress()を試みると、
Non-NULLが返るんで、きちんとアドレスは取れている。

フリーのコンバイラを使ってるってみたいなんで、それ絡みかも。
参考までに、ソースも貼っとくね。
assert()で引っかからなければOK!

#include <windows.h>
#include <stdio.h>
#include <assert.h>

int main(void)
{
  typedef INT (*func)(LPINT, LPVOID, LPDWORD);

  HINSTANCE hDLL = LoadLibrary("wsock32.dll");
  assert(hDLL != NULL);

  func pEnumProtocols = (func)GetProcAddress(hDLL, "EnumProtocolsA");
  assert(pEnumProtocols != NULL);

  FreeLibrary(hDLL);

  return 0;
}

810 名前:教えてクン :01/11/13 10:25
>803
Thanx

811 名前:デフォルトの名無しさん :01/11/13 22:11
Windows XP では、GetVersionEx() は何を返すのだろう?
やっぱ、VER_PLATFORM_WIN32_NT で、
verInfo.dwMajorVersion は6とか?

812 名前:デフォルトの名無しさん :01/11/13 22:36
795は793です(793)>809
(僕はテキストエディタも作ってた進化する無料マニアです)
まずはありがとうございます。>809
インターネットに少しはまり過ぎてしまいまして、ちょっと
ネット疑惑症ぎみです。

結局自分のコンピュータから吐き出される情報(多分結局は文字列だと思う)と、
どこに発信されているかを、システムレベル(?)で捕らえたい
と思ってます。つまり自分(てめー)のコンピュータが何をしているか
くらいは知っておかなきゃあかん、くらいの意気込みで前向きにやってます。
通信に関しては初心者なので手当たりEnumProtocolsAから
入ってみようか、と思い立ちました。

アプリレベルのプロトコル(?)もあるし、直接文字列を取ってもよくわかんない
かも知れないんですが、とりあえずはそこからやるしかありません。

EnumProtocolsA以外に使える概念とか言葉があったら
適当に教えてください。(EnumProtocolsはまだうまくいって
ないですが、クリアしたいとおもいます)

813 名前:デフォルトの名無しさん :01/11/13 22:38
今アニメーションを表示させるプログラムを書いているのですが、
フレームの表示にSetDIBitsToDeviceを使用しています。
どうやらSetDIBitsToDeviceが処理速度のネックになっているのですが、
より高速な手続きはあるのでしょうか?

814 名前:デフォルトの名無しさん :01/11/14 00:04
>>813
画面とDIBのピクセルフォーマットを合わせること。
256色以下なら、パレットも完全に一致させること。
・・・要するに、色変換処理が起こらないようにしろってことだな。

それで速度が不足なら、DirectDraw でも使い給へ。

815 名前:813 :01/11/14 01:12
>>814
ありがとうです。
>画面とDIBのピクセルフォーマットを合わせること。
というのは、24bitのDIBを転送するのであれば、
画面も24bitにしろってことでしょうか。
現在24bitのDIBを転送しているのですが、画面のプロパティで
24bitに設定するより16bitに設定した方が速い感じです。

816 名前:デフォルトの名無しさん :01/11/14 01:24
>>811
Windows XP は確か Windows NT Ver. 5.1 です。
Windows 2000 とはわずか 0.1 しかバージョンが違いません。

817 名前:デフォルトの名無しさん :01/11/14 03:17
>813
bit合わせはチップセットとVGAカードによる
http://www2.bbspink.com/test/read.cgi/erog/999446678/329-404
取り合えず前、調べられる範囲で調べた結果だがこんな結果になった
個人的にはなんとも言えないという感じなので処理の都合で考えるといい

VGAのVRAMにアニメーションデータが入りきるならDirectDrawは100%有効
でなきゃ逆に遅くなる場合もある
アニメーションなら場合によってはオーバーレイサーフェイスが有効かも

取り合えず今24bitデータで持ってるなら
データ自体を16bitへ落すことを考慮すべし
それだけで大幅に変わるはず

あと本当にSetDIBitsToDeviceがボトルネックなの?
HDDとかじゃなくて?

818 名前:デフォルトの名無しさん :01/11/14 03:25
ぬぉーーーー、報告です。
結局EnumProtocolsAは、スタティックライブラリにありました。
(前はAが抜けていた)いやしかーーーし。
システムにはいっぱいDllが転がっているので、これを使えるようになるために
思い、GetProcAddressにこだわりました。

WSOCK32.DLLからGetProcAddressを使うには、
Kernel32.dllのGetModuleFileNameExが、ヘッダtlhelp32.hを用いて
使えることを参考にしたんですが、
typedef int (WINAPI* PENUMPROTOCOLS)(LPINT,LPVOID,LPDWORD);
int WINAPI EnumProtocolsA(LPINT,LPVOID,LPDWORD);
・・・・・・
fpEnumProtocols =(PENUMPROTOCOLS)GetProcAddress(hSockLib,"EnumProtocolsA")
とやればうまくいきます。EnumProtocolsAの宣言がないと、fpEnumProtocols(1,2,3);
の代入のところでプログラムが凍り、フリーライブラリすると画面が消えるはめはめマン
でした。あぁ、これでこれからはいざというときシステムDLLが使える(ます)

しかし、結局EnumProtocolsって何の役に立つんですか?
表示したらf・とか表示されて終わってしまいました。僕は疲れました。

・・・漏れはなかなかやる男でした。これからもいろんなことを教えてください。

819 名前:デフォルトの名無しさん :01/11/14 03:30
ちなみにdefやdmpや__declspec(これはまだ不確か)
とか、も知りました。externがグローバル宣言だつーのも
再認識しました。でもアンダーバーの意味がわかりません。。

あぁ・・・・・・

820 名前:デフォルトの名無しさん :01/11/14 06:32
>>819
アンダーバーはMicrosoft独自拡張を意味する。
とヘルプにも書いてあると思うけど。

821 名前:デフォルトの名無しさん :01/11/14 07:57
>>813

 環境によっては、DIBSectionにしてそのHBITMAPで描画すると
わずかに速くなる場合もある。

822 名前:811 :01/11/14 12:25
>>816
そうなんだ〜。>XP=NT5.1
つまり、XPは2000との違いはインターフェースだけで
中身はほとんどカワランということ?(w

823 名前:デフォルトの名無しさん :01/11/14 14:30
>>822
なにを今更・・・

824 名前:デフォルトの名無しさん :01/11/14 16:05
>>820
アンダーバーが1つと2つでどう違うのかも、なぞです。
(僕にはヘルプもないんです汗)

825 名前:デフォルトの名無しさん :01/11/14 16:50
>>768
その方法だと、DLLメインのプロセスでしか
ハンドルが定義されないため、フックを掛けた
他プロセスでは改めてOpenFileMappingを被フック
プロセスごとにやらないとだめです。
(主DllでのCreateFileMappingとCloseHandleも
結局一回づつはやりますが。)
>>809
assertありがとうございました。

826 名前:デフォルトの名無しさん :01/11/14 17:24
>>824
なぜ無いの?

827 名前:デフォルトの名無しさん :01/11/14 19:34
無料コンパイラにはそんな良いものはついて
こないョ・・・(クラックなんかしてないョ・・・前は、ゲームとかは・・(謎))

828 名前:デフォルトの名無しさん :01/11/14 19:43
>>826
俺のお気に入りにある目くるめく
参考HTMLの数々を見せてあげたい

829 名前:デフォルトの名無しさん :01/11/14 19:47
間違えて上げてしまいました

830 名前:デフォルトの名無しさん :01/11/14 19:48
でも見せてあげないんだろ? (w

831 名前:デフォルトの名無しさん :01/11/14 20:01
そんなに見たいんなら方法を考えてくれ
お気に入りを圧縮するくらいはワケナイゾ

!??

832 名前:デフォルトの名無しさん :01/11/14 20:21
お気に入りの中にWTLの良リンク無い?一つでイイからさ。
適当に使ってるから、用法あってるのか心配になってきたよ。
ここ以外で一つよろしく http://www.codeproject.com/wtl/

833 名前:デフォルトの名無しさん :01/11/14 20:26
>>827
なぜMSDN Onlineを使わないんですか

834 名前:デフォルトの名無しさん :01/11/14 20:35
使ってるけどあのサイトは基本的に
複雑すぎて使えない。関数の検索をして
ひっかかったものをお気に入りに入れるくらい。
>>833

835 名前:デフォルトの名無しさん :01/11/14 20:38
はっきりいってない>832

836 名前:デフォルトの名無しさん :01/11/14 20:40
ネットストーカーこえぇーーーーー(TBS)

837 名前:デフォルトの名無しさん :01/11/14 21:12
>>834
DirectXのヘルプが英語ででてくるのでビビって読めない、の間違いだろ。

838 名前:832 :01/11/14 21:25
>>835
マジすか(;´Д`) 今やMFCやATLに変わるスタンダードだと思ってたよ。
あたしゃネット環境すら整ってない化石野郎なもので…。.NETなんてしりません。

こんなに便利なのに…、流行ってないならやっぱ使わない方が
良いのかなぁ。いや将来の事を考えての話です。レスどうもでした。

839 名前:デフォルトの名無しさん :01/11/14 22:16
WTLはCLRに化けました
って事でC#やれ

840 名前:デフォルトの名無しさん :01/11/14 22:25
>>839
Tonyさんですか?( ´Д`;
>>825
え、フックでインストールされた時でも、そのプロセスでDllMainは呼ばれるよね?
違ったっけ。

841 名前:デフォルトの名無しさん :01/11/14 23:30
>>834
MSのサイトからPlatformSDKのドキュメント落としてくれば?

842 名前:デフォルトの名無しさん :01/11/14 23:39
つーか関数名分かってるならgoogleで検索すれば
MSDNがほぼ上位に引っかかるんだが。

843 名前:813 :01/11/15 00:48
どうもありがとうです。

>>817
>データ自体を16bitへ落すことを考慮すべし
>それだけで大幅に変わるはず
これが、少し面倒なので24bitでデータを持っているのですが、
勉強だと思って16bitでいけるように努力してみたいと思います。

>あと本当にSetDIBitsToDeviceがボトルネックなの?
>HDDとかじゃなくて?
メモリ上にデータがあるので、HDDは関係ないです。
SetDIBitsToDeviceをなしにするとfps 55くらいなんですが、
ありだとfps 45程度です。

>>821
どこかで見た気がします。
調査してみます。

844 名前:813 :01/11/15 02:50
>>821
>環境によっては、DIBSectionにしてそのHBITMAPで描画すると
>わずかに速くなる場合もある。
CreateDIBSection&BitBltにしたらfpsが1,2近くあがりました。
感謝。

845 名前:デフォルトの名無しさん :01/11/15 02:52
837>>lccのヘルプはあるけど(英語)読むよ。
つーか、不便には違いない<英語。sdkのヘルプみたいのも
あるけど、話してたのはそのヘルプのことじゃあなくて、
アンダーバーのことが書いてあるヘルプなの。

846 名前:デフォルトの名無しさん :01/11/15 03:57
>843
オンメモリにもてる程度のデータ量ならDirectDrawもいけるかもね
VRAM容量がふんだんにあることが認識できたらDirectDrawルーチンに
切り替えるとかやってみたら?

というか45FPSで納得できないんか?(´Д`;)

847 名前:デフォルトの名無しさん :01/11/15 04:25
>>845
アンダーバー云々もMSDNに書いてあるんだが。

848 名前:デフォルトの名無しさん :01/11/15 18:51
CreateFileの FILE_FLAG_NO_BUFFERINGなんですけど。

MSDNの「Windows 2000 アプリケーションの互換性」に、
「Windows 2000 では、特に Ultra 66 IDE デバイスのように、新しいデバイスを
 サポートするときには境界合わせが多少異なる場合もあります。」
とあります。
「多少異なる場合」ってどんな場合で、どう異なるんですか?

849 名前:813 :01/11/15 23:24
>>846
DirectDrawへの変更も考えてみます。

>というか45FPSで納得できないんか?(´Д`;)
まだ、完成していないんです。(´Д`;
30fpsまではOKだと考えていますが、転送はけっこう時間を食っているので。
fps落ちたら、転送はあまり重要でなくなってくる・・・のだろうか。

850 名前:デフォルトの名無しさん :01/11/16 04:04
>>847それは探せというほうが・・・無理だ・・・・
目の酷使を避けることは僕の中で優先順位高いんです

851 名前:デフォルトの名無しさん :01/11/16 14:31
>>850
てめえの都合なんか知ったことかよ。
目を使いたくなかったらvia voiceでも入れろ。

そんなのを2chで教えてもらおうなんて虫が良すぎる。

852 名前:デフォルトの名無しさん :01/11/16 16:30
>>851
850 != 弱視 ? 禿同

853 名前:デフォルトの名無しさん :01/11/16 17:49
あおんなカス
オメーにオセーてもらったかどうかなんてわかんねーんだYO
どうせ低スキルの癖にYO
うせな

854 名前:847=851 :01/11/16 19:12
>>853
2chなんか見てると目に悪いだろ。
頭は相当悪いみてえだけどな。

855 名前:デフォルトの名無しさん :01/11/16 19:41
┌──────────────────────―─―┐
│□ ■2ch BBS ..− Microsoft Internet Explorer    囗曰区||
├───────────────────────┬─┤
│ファイル(F) 編集(E) 表示(V) お気に入り(A) モナー(∀)   |::田|
├────────────────┬──────┴─┤
| ←     →     ×     圍    合  |   Q          》|
| 戻る   進む   中止  更新  ホーム |  検索          |
├────┬───────────┴──┬─┬───┤
│アド レス(D) | □http://www.2ch.net/2ch.html  |▼|⇒移動|
├────┴───┬┬─────────┴─┴──┬┤
│                ├┤                      ├┤
|LINUX          ||                      ||
│UNIX           ||                      ||
│プログラマ.  ┌───────────────────────┐
│プログラム技| 2ch                                 |
│        ├───────────────────────┤
│        | >>853 は不正な処理を行いました。   ┌───┐   |
│        | 残念ですが >>853 の人生を          | 終了 |   |
│        | 終了させてあげて下さい。(推奨)       └───┘   |
│        |                                  |
│        └───────────────────────┘
│特別企画        ├┤                      ├┤
├┬──────┬┼┼┬────────────┬┼┤
├┴──────┴┴┴┴──┬─┬─┬─────┴┴┤
│□ エラーが発生しました    |  |  |●インターネット |
└─────────────┴─┴─┴───────┘

856 名前:デフォルトの名無しさん :01/11/16 19:49
>>813
CreateDIBSection()

857 名前:遅レスカコイイ :01/11/17 00:41
>>856
>>821 >>844

858 名前:gler :01/11/17 04:14
1:QueryPerformanceFrequency();
QueryPerformanceCounter();
この2つの使い方教えてください。

859 名前:デフォルトの名無しさん :01/11/17 04:26
>>858
なぜMSDNを(以下略

860 名前:gler :01/11/17 04:41


861 名前:デフォルトの名無しさん :01/11/17 20:35
ブラクラって知ってますか?

862 名前: ◆osama43U :01/11/17 21:56
ブラクラ…Brother Class
共通の基底クラスから派生したクラス。
ex)
class A;
class B : public A;
class C : public A;
のとき、BとCは相互にブラクラである。

863 名前: ◆osama43U :01/11/17 21:59
ちなみに、共通のクラスを所有しているクラスをシスクラ(Sister Class)という。

ex)
class A;
class B {
    A a;
};
class C {
    A a;
};
のとき、BとCは相互にシスクラである。

864 名前:デフォルトの名無しさん :01/11/17 22:01
ウケたがスレ違いだ

865 名前:デフォルトの名無しさん :01/11/18 03:07
全検索後に対象を選んで一括で置換するの置換ルーチン
の完成だ!バンザイ
ある関数の中の変数名だけ変えたいときとかあんだろ?
そういう風にしたのダ
リストビューは複数選択の選択されているものの番号インデックス
を得るListView_GetNextItem(orLVM_GETNEXTITEM同じだゴルぁ)
は再起的に使うことを中心に説明しとけよ。ちょっとてこずったゾ

ちなみに着色ルーチンも強化したんだゴルぁ。

ダイアログコールバック内でのstaticの大切さについて教えてください
僕はGetDlgItem(hDlg,...)使ってるけどHWND hLview=クリエイトリストビュー
はstatic HWND hLviewでないといけないんです。あとchar str[64]も
static char str[64]じゃないとだめです。なんとstrlen(str)は、strに
きちんと文字列が入ってるのにもかかわらず常に7とかいってます。なんで?
staticについて教えてください

866 名前:デフォルトの名無しさん :01/11/18 16:31
saMuiYO!

867 名前:デフォルトの名無しさん :01/11/19 00:21
MessageBoxEx使って英語指定しても「はい」「いいえ」が日本語のままなのですが
こんなものなのでしょうか?
こんな感じです。

MessageBoxEx(Handle, &BoxMsg[1], &BoxCaption[1], MB_YESNO|
MB_ICONQUESTION|MB_APPLMODAL, LANG_ENGLISH )

868 名前:デフォルトの名無しさん :01/11/19 00:28
>>867
MessageBoxEx() のヘルプから抜粋

> それぞれの言語にローカライズされた Windows 95/98 や Windows NT/2000 は一般に、
> 特定の言語セットのリソースだけを保持していることに注意してください。たとえば、U.S. 版
> は LANG_ENGLISH、フランス語版は LANG_FRENCH、ドイツ語版は LANG_GERMAN、日
> 本語版は LANG_JAPANESE を提供します。

俺も詳しくは知らんが、日本語版の Windows で実行する限り LANG_ENGLISH 使えんので
は?

869 名前:デフォルトの名無しさん :01/11/19 01:25
TextOutで書いた文字がなんか他のウィンドウに
さえぎられると消えちゃうんだけどどーしたらいいかな

870 名前:デフォルトの名無しさん :01/11/19 01:32
WM_PAINTで描画をしなさい

871 名前:デフォルトの名無しさん :01/11/19 01:39
>>869
ソレが自然だとは思うが、alpha-blendでも使ってみるか?

872 名前:デフォルトの名無しさん :01/11/19 01:50
>>869
ディスプレイに油性マジックで書けば消えないよ!

873 名前:デフォルトの名無しさん :01/11/19 12:28
>>869
また書き直す

874 名前:クロスボウとやら :01/11/19 12:39
APIの質問ッス。

マルチもモニタ環境で任意のモニタにウィンドウを表示させるには
どすればいいのでしょ?とりあえず、モニタの列挙とかやってみたいんすけど。
それ関係のAPIがあれば教えて下さい。
マルチモニタは、デュアルヘッドとかじゃなくて、ビデオカードが2枚
刺さってるタイプっス。DirectXには依存したくないです。

875 名前:デフォルトの名無しさん :01/11/19 12:58
>>874
つか、マルチディスプレイの制御は、GDIですらDirectXに頼ってるから
DirectX以外に方法はないと思う。

876 名前:デフォルトの名無しさん :01/11/19 15:06
SetWindowsHookEx( WH_JOURNALPLAYBACK,...);
によって
プレイバックツールを作成中に気付いたんですが

Windowsキー関連の動作がプレイバックされません
ログを取ってみると
イベント自体はしっかり投げていますが
単純に無視されているようです(前後の他の動作は問題ない)

これは仕様なんでしょうか?

参考までに環境
VC++6.0、Win2k&Win98

877 名前:デフォルトの名無しさん :01/11/19 15:25
>>872
今度は消せなくなったんですけど(;_;)
どんなAPIで消せますか?

878 名前:デフォルトの名無しさん :01/11/19 15:26
>>877
模型店でラッカー薄め液を買ってきましょう。

879 名前:デフォルトの名無しさん :01/11/19 15:57
僕のノートの液晶が白く濁ってもとに戻りません

880 名前:デフォルトの名無しさん :01/11/19 16:08
>>879
燃えないゴミの日に出しましょう。
きれいサッパリ消えます。

881 名前:デフォルトの名無しさん :01/11/19 17:05
MFCで作ったDLLをSDK側から呼び出したいんですが
こういう事はできるんですか。

882 名前:デフォルトの名無しさん :01/11/19 17:18
>>881

意味が分かりません。
MFC Appウィザード(DLL)で作ったDLLはDLLをロードできる言語でたいていロードできます。
(引数とかにクラスなんか使っていなければ。)
後、名前が変に変形するので前もってチェックして下さい。

883 名前:デフォルトの名無しさん :01/11/19 17:19
>>881 アセンブラでMFC側の作った名前を呼び出すサンクルーチンを作れば可能

でもMFC側でC用のインターフェースルーチンを作った方が10倍簡単
クラスインスタンスは void * で渡せ

884 名前:超初心者 :01/11/19 18:45
質問です。

CreateFileで開いた通信リソースに、WriteFileで書き込みをするなどの操作をすると、
たまに「ERROR_OPERATION_ABORTED」エラーが返ってきます。ひどいときには
一度閉じないとどうにもならなくなっちゃいます。

もともとwin98で動いていたソフトでそのときはなんともなかったんですが
win2kで動かしてみたらこんなことが起こるようになってしまいました。

作った人はもういないし、私はCしかわからないし、ヘルプやらなにやら見てももう
お手上げです。
何でもよいのでヒントとかあったら教えてください。お願いします。。

885 名前:879 :01/11/19 20:14
>880
その手があったか(・∀・)!
ありがとう!

886 名前:881 :01/11/19 22:40
「MFC の拡張 DLL(MFC の共有 DLL 使用)」じゃなくて
「MFC の共有 DLL を使用」の方でやったらできました。

887 名前:デフォルトの名無しさん :01/11/19 23:22
キーボードの「@」キーが現在押されているかどうかって知る方法ありますか?
仮想キーコードリストに載ってなかったもんで、どうしたものやら。。

888 名前:デフォルトの名無しさん :01/11/19 23:27
VkKeyScan('@') こうか。。。C0だった。

889 名前:デフォルトの名無しさん :01/11/20 01:04
>>876
WH_JOURNALPLAYBACKってWH_WNDPROCとどうちがうの?

890 名前:デフォルトの名無しさん :01/11/20 12:22
>>889
何故MSDNを(以下略

891 名前:876 :01/11/20 12:41
ごめ〜ん
調べてたらMSDNに思いっきり書いてあったよ〜
仕様だそうだ・・・

さて、回避方法あるんかな・・・

892 名前:クロスボウとやら :01/11/20 15:38
>>875
レスどうも。

>>GDIですらDirectXに頼ってるから
マジっすか?

なんとなくEnumDisplayMonitors()ってやつが使えそうです。
ttp://sysneitf.hoops.ne.jp/monitors.html

893 名前:デフォルトの名無しさん :01/11/20 16:05
>>884
GetLastError() の値は調べた?

894 名前:超初心者 :01/11/20 17:31
>>893
はい、そうすると995ってエラーが返ってきちゃうんです。
非同期書き込みを行っているのですが、Witefile()が失敗(0返ってきた)したときの
GetLastError()の値は995(ERROR_OPERATION_ABORTED)か
997(ERROR_IO_PENDING)です。

995が返ってきたらGetOverlappedResult()で処理が終わるのを待とうとするのですが
これも失敗することがあって、このときのGetLastError()の値は995でした。
こんなときはどういう原因を考えればいいんでしょう・・・

895 名前:デフォルトの名無しさん :01/11/20 18:04
>>894
995(ERROR_OPERATION_ABORTED)の意味は、
「The I/O operation has been aborted because of either
a thread exit or an application request.」
(スレッドが終了したか、アプリケーションが要求したから)
とあるな・・・

896 名前:1 :01/11/20 18:05
createFile(...)を使って
ファイル書き込みをする場合、
バッファリングは不要でしょうか?
それとも,バッファリングした方が効率が上がるのでしょうか?

897 名前:デフォルトの名無しさん :01/11/20 18:12
>>896
相手が普通のファイルならファイルシステムレベルでキャッシュ&バッファリング
してるから、アプリで余計なことしない方がいい。

898 名前:デフォルトの名無しさん :01/11/20 19:05
>>897
胴衣。漏れなんか、10バイトずつでも
毎回 WriteFile(...) してるぞ(ワラ

899 名前:デフォルトの名無しさん :01/11/20 20:16
WM_DROPFILESが来たとき、それがマウスの右ボタンか左ボタンかによって
ドロップされたかどうか分かる方法ってありますか?

900 名前:デフォルトの名無しさん :01/11/20 20:32
ある描画アプリのショートカットを自分用にカスタマイズして使おうと
キーボードフックして、適当にメッセージ置き換えてます。

なんとかFとかスペースなど、単体のキーはPostMessageでそのアプリに
送れるのですが、肝心なctrl+F等の複合キーの送り方が分かりません。
ctrlとFを同時に送ってもうまくいかなくて…何かご存じの方アドバイスお願いします。

901 名前:デフォルトの名無しさん :01/11/20 20:34
>>899
そのハンドラでGetAsyncKeyStateで調べればいいのでわ?

902 名前:デフォルトの名無しさん :01/11/20 20:49
>>900
WM_KEYUPとかWM_KEYDOWNをひっかけてるなら、lParamの上位ビット。
詳しくはMSDNで。

903 名前:900 :01/11/20 21:27
>>902
ありがとうございます!>>901みて、アプリ側でctrl検出してたら駄目じゃん
…とか思って絶望してたところです。まだよく理解できてないのですが
できると分かっただけでやる気倍増です。感謝感激

904 名前:デフォルトの名無しさん :01/11/20 23:41
>>901
GetAsyncKeyState(WM_LBUTTON)とやっても、右でも左でも0が帰ってきてしまうです。
つーか、ドロップされた時点ではボタンは離されてるんでこれでは駄目なようです。

やっぱり、OLE D&Dにするしかないのかなあ・・・

905 名前:デフォルトの名無しさん :01/11/21 01:27
>>904
仮想キーコード間違ってない?

906 名前:デフォルトの名無しさん :01/11/21 01:33
VK_LBUTTON だな。

907 名前:デフォルトの名無しさん :01/11/21 01:43
>>905-906
レス書いたときのtypoでした。すいません。

908 名前:FTO :01/11/21 14:39
質問です。
ある矩形内のグラフィックを回転させて別の場所に画像を表示させるAPIとかってありますか?
やっぱり回転変換させてやらないとだめなんでしょうか。

909 名前:デフォルトの名無しさん :01/11/21 14:56
>>908

ないと思う。

910 名前:デフォルトの名無しさん :01/11/21 14:59
gdiplus使えば、カンタンに出来るよ。
Windows95が対象外になってしまうけど。
ひとつの案として言ってみた。

911 名前:デフォルトの名無しさん :01/11/21 15:16
タスクトレイに表示されている他のアプリケーションのアイコンの状態を調べる
方法はないのでしょうか?(NOTIFYICONDATAのszTip程度の情報で良いのですが)
今できていることはタスクトレーのハンドル(クラス名は"TrayNotifyWnd")
を取得することぐらいです。

912 名前:デフォルトの名無しさん :01/11/21 19:32
エディットコントロールをサブクラス化して、キーアップとマウスアップ
を捕まえてます。捕まえたとき、WM_LINEFROMCHARを送って行番号を
取得してるんだけど、キーアップの時はWM_LINEFROMCHARはうまく行番号
をとれるんですけど、マウスアップの時は、うまくいかない。
コントロールがそのとき同時にマウスアップのときにラインナンバーを
決定してるからかもしれないんだけど、どーもうまくやる方法ないかな。
EN_SELCHANGEのマスクを解除して(付けて?)良さげだけど、あんまり
メッセージ増やりたくないし、うまい方法ないかな

913 名前:デフォルトの名無しさん :01/11/21 20:29
>>912

Delphi のコードですまんが、うまくいったよ。

procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
st,ed,ln:DWORD;
begin
SendMessage(Memo1.Handle,EM_GETSEL,WPARAM(@st),LPARAM(@ed));
ln := SendMessage(Memo1.Handle,EM_LINEFROMCHAR,WPARAM(ed),0);
Label1.Caption := IntToStr(Ln);
end;

914 名前:デフォルトの名無しさん :01/11/21 20:48
case WM_LBUTTONUP:
//Lindex = SendMessage(hMyEdit,EM_LINEFROMCHAR,-1,0);
SendMessage(hMyEdit,EM_EXGETSEL,0,(LPARAM)&Pchr);
Lindex = SendMessage(hMyEdit,EM_EXLINEFROMCHAR,0,(LPARAM)(DWORD)Pchr.cpMin);
ShowInformation(GetParent(hMyEdit),500,50,Lindex,"%-d行目です ");
break;
WM_KEYUPのときも同様な処理でそっちはうまくいくんだけど、
こっちがうまくいかない。もういっそのことあきらめようかとも
思ってる。ちなみにmfcなしでイベントハンドラ云々って扱えるの?
つーか、、マウス押すと(Lindexは0を返す)
選択範囲があるとき(色が反転してるとき)、選択範囲の上で
もう一度クリックすると、そのときだけ正しいラインを返すのです。

915 名前:デフォルトの名無しさん :01/11/21 20:49
(レスさんくす)

916 名前:デフォルトの名無しさん :01/11/21 20:59
912多分SetCaptureあたりの問題だった。
世話かけました。。

917 名前:913 :01/11/21 23:36
>>914

>SendMessage(hMyEdit,EM_EXGETSEL,0,(LPARAM)&Pchr);
>Lindex = SendMessage(hMyEdit,EM_EXLINEFROMCHAR,0,(LPARAM)(DWORD)Pchr.cpMin);

>WM_KEYUPのときも同様な処理でそっちはうまくいくんだけど、
>こっちがうまくいかない。

EM_EXGETSEL も EM_LINEFROMCHAR も Lparam と Wparam の
設定が変なような気がするが?

918 名前:デフォルトの名無しさん :01/11/22 14:41
>>917うーん、
EM_EXGETSEL
wParam = 0;
lParam = (LPARAM) (CHARRANGE FAR *) lpchr;
EM_EXLINEFROMCHAR
wParam = 0;
lParam = (LPARAM) (DWORD) ichCharPos;
(宣言はCHARRANGE Pchrにて)
おいらのヘルプじゃこうなってる。EXLINEFROMCHARとLINEFROMCHARでは
LPARAMとWPARAMが逆らしいんだけどなぁ。

で、結局、イベントマスク設定して、親ウィンドウでNOTIFYでWM_LBUTTONUPを
捕らえる方法でやるとうまくいきました。ほんとはサブクラス化のコールバック
内で全部一括して扱いたかったんだけどね。やっぱ、サブクラス化の方のコール
バック内ではWM_LBUTTONUP(DOWNは問題ない)の送られ方がちょっと違う。
他ウィンドウにあったフォーカスがコントロールに移る時だけはWM_LBUTTONUPは
送られてくるみたいだけど、いったんコントロールのキャレットにフォーカスが
移ると、LBUTTONUPはもう送られてこない。もよう。

919 名前:デフォルトの名無しさん :01/11/22 14:48
で、そこで別の新たな問題がありました。
メインWndProc内でCHARRANGE Pchrを宣言すると、
なぜか描画がおかしくなる。(これを消すと描画は問題ない)
static CHARRANGE Pchrとかやると、描画のおかしさが変化するし。
(Pchr自体使わなくてもそうなる)
PAINTSTRUCT paintをstatic PAINTSTRUCT paintとかやってもだめだしなぁ。
ちょっとメモリリークとかにも興味持ち出したし、この辺、どう?
はっきりいってただのCHARRANGE Pchrの宣言が引き金にはなってるんだけど、
CHARRANGEなんてPAINTSTRUCTとかHDCとかともかけ離れた存在のようにも
見えるし、関係性がわからない。BeginPaint,EndPaintとかの開放も(DeleteObjectとかも)
注意はしているのにですな。

920 名前:デフォルトの名無しさん :01/11/22 14:49
(しまいにはCHARRANGE Pchrはグローバルで宣言してうまく
いってるけど、気になる僕に一言とか二言もよろしくお願いしたいです)

921 名前:どなたかご存知? :01/11/22 15:24
ウィンドウメッセージのキューイング数ってどれくらいなんでしょ〜か。

WM_USER+αでウィンドウメッセージを多数使用している画面があって、
且つ取りこぼし厳禁。
なんで、キューイング数の上限を知りたいのですが。

922 名前:913 :01/11/22 15:29
>>918

おー、エディットコントロールではなく、リッチエディットコントロール
ですね。びっくりした。

>>919
>サブクラス化の方のコール
>バック内ではWM_LBUTTONUP(DOWNは問題ない)の送られ方がちょっと違う。

そうか。元のウィンドウ関数は、最初に実行してるの? それとも後?

>919

>BeginPaint,EndPaintとかの開放

元のウィンドウ関数を、最初に実行してるんだったら、これは必要ないのでは?
WM_PAINT を処理する必要があるの?

923 名前:デフォルトの名無しさん :01/11/22 16:13
SetTimerで指定した識別子と、返ってきた識別子が違う、というのは
頻度的には、どれくらいのもんなんでしょ?
空リソース量とかいった、そのときの状況に依存したりするもんなのかなぁ...

924 名前:デフォルトの名無しさん :01/11/22 16:50
>>922
あぁ、ペイント処理は、まったく別問題なんだけど、
BeginPaintとEndPaintはWM_PAINT(WndProcの)でやってること
なんだけど、まぁ、つまり、とりあえずWM_LBUTTONUPの
あれを、NOTIFYでやってやっとこさ、うまくいったんだけど、
そのあと、今度は描画に問題が出てしまったもんだから、
(BeginPaintとEndPaintのことを)書いた。(描画のとこの
割り当てと開放とかの問題じゃたぶんない、と言いたかった)
ただCHARRANGE Pchrを宣言するだけでなぜか描画がおかしく
なる・・・と。

えーっと、CallWindowProc(org_proc...)は最後で呼んでるから、後、って
ことかな。

925 名前:デフォルトの名無しさん :01/11/22 16:58
>>923
HWNDは?

926 名前:913 :01/11/22 17:23
>>924
>えーっと、CallWindowProc(org_proc...)は最後で呼んでるから、後、って
>ことかな。

今回の問題とは関係ないかも知れませんが、とくに元のウィンドウ関数の内容を
書き換える、などの特殊事情がないかぎり、サブクラスのウィンドウ関数では
もとのウィンドウ関数を最初に実行しておくことをお薦めします。特に、描画
関係では WM_PAINT に伴う、BeginPaintとEndPaint の特殊性から、先に元の
ウィンドウ関数を実行しておかないと、表示が変になることがあります。わた
しも以前経験しました。そして、サブクラスのウィンドウ関数で WM_PAINT を
処理するときは、GetDC() と ReleaseDC() を使った方が良いです。

>ただCHARRANGE Pchrを宣言するだけでなぜか描画がおかしく

これについては全く分かりません。すみません。

927 名前:923 :01/11/22 17:27
>925
NULLじゃないです。

928 名前:デフォルトの名無しさん :01/11/22 18:24
>>927
連続してSetTimer()を呼び出してみたけど、
2490個タイマーを作ったところで戻り値0になった。
GetLastError()は120。OSはWindows 98。
それまでは指定したのと同じ値が返ってきた。
今までもWM_TIMERのハンドラでタイマーIDは定数で
コーディングしてきたけどタイマーが動かなかった
ことはない。

929 名前:デフォルトの名無しさん :01/11/22 18:27
>>924
変数を宣言しただけで挙動が変わる、というのならバッファオーバーランを疑うなあ。
それか、未初期化のポインタを使ってるとか。

930 名前:デフォルトの名無しさん :01/11/22 19:29
>>928
MSDNのSetTimerの説明には、nIDEventパラメータで指定した値が
WM_TIMERのwParamに入ると書かれているから、定数で問題ないと思われ。

931 名前:923 :01/11/22 19:36
>928
わざわざ実験どうもです。
自分も、返り値が違うといった場面に遭遇した事が無いんだよね...
そういうものなのか...

932 名前:デフォルトの名無しさん :01/11/22 20:11
>>930
だよねー。
MSのサンプルとかも定数だし。
一応、SetTimer()の戻り値はタイマ識別子だから、
引数で100を渡して300が返ってきたら、要求したタイマ識別子は100でも
実際のタイマ識別子は300、ということでwParamには300が入ってくる
罠かと思って。

933 名前:デフォルトの名無しさん :01/11/22 20:27
SetTimer()の戻り値を保持しておいて、KillTimer()に使うのでわ?

934 名前:デフォルトの名無しさん :01/11/23 00:13
926
>>913
描画に関してはまったく疎かったんだけど、結局は、

case WM_CREATE:
で、
hWndRadio = CreateWindow(....);
の直後に、
hFont=(HFONT)SendMessage(hWndRadio, WM_GETFONT, NULL, NULL);
をやっていたのが原因だった。多分うまく取れていなかった。
直後だとコントロールフォント自身のフォント設定が
不安定っぽい感じだった。Sleep()とか使ってもだめだった。
結局hFont=(hFont)GetStockObject(GUI_DEFAULT_FONT);GetObject(...)
で、ややこしいlfをこれまたいろいろ試してやっと大丈夫になった。
WM_GETFONTでうまく取れたように見えてたのはなんかの偶然だった。
あぁ、つかれた。でも結局メモリリーク関係なかったけど、
おかげで外国産のいいものを手に入れた。英語で感謝してきました。
フォントがうまくいってたやつを、それでデバッグモードで起動すると
文字がおかしくなることも結構助けになたヨ。おかげでいまでは
デバグモードで起動しても問題なく動く。

あぁ、お疲れ様といってください

935 名前:デフォルトの名無しさん :01/11/23 00:17
WndProc内に戻ったPchrに乾杯

936 名前:デフォルトの名無しさん :01/11/23 02:08
HTTP serverにデータを送信したいので、HttpSendRequest()を使いたいのですが、クッキーも送れますか?
それとも、クッキーは別関数で送るのでしょうか?
クッキーの送り方が解らないので、知りたいです。

937 名前:デフォルトの名無しさん :01/11/23 17:48
WTLのAppWizardで、例えばSDIを作成した場合、そのプロジェクトに
イベント追加可能なDialogを後から挿入することって出来ますか?

普通にDialog挿入するとテンプレート作ってくれないですよね…。
今は仕方がないのでDialogベースの仮プロジェクト作って
あとから本プロジェクトにコピペしてるのですが色々、管理が面倒で…。

WTL、情報が少なくて参ってます。ご存じの方、どうか宜しくお願いします。

938 名前:デフォルトの名無しさん :01/11/24 02:29
WinAPIの世界へよーころ

939 名前:937 :01/11/24 02:36
>>938
かちゅ〜しゃでみてたらレス付いてたから、一瞬よろこんじゃったYO!(笑

940 名前:936 :01/11/24 02:46
>>939
俺も(W

941 名前:亜井 上男 :01/11/24 14:10
一つのプロセスの中に複数のスレッドがあり、各スレッドから非同期で
同一ファイルに書き込みを行いたいんですが、どのような排他制御を
行えば完璧でしょうか。

942 名前:デフォルトの名無しさん :01/11/24 14:21
そんな処理の仕方をしないこと

943 名前:デフォルトの名無しさん :01/11/24 14:22
MutexかCriticalSectionを使いなさい。

944 名前:デフォルトの名無しさん :01/11/24 15:53
>>936
lpszHeadersに"Cookie: CUSTOMER=WILE_E_COYOTE"とかを入れればよいだけでは。
HTTP Cookieの仕様はhttp://www.netscape.com/newsref/std/cookie_spec.htmlあたりで。

945 名前:デフォルトの名無しさん :01/11/24 15:57
DOS窓のような奴をエディット コントロール使ってやろうと思ってるんだけど、
3つのことで困ってます。
・プログラム側からテキストを出力する方法
・ENTERで入力された行を取得する方法
・バッファの上限に行くと入力出来なくなるのを回避する方法
もしかしてエディット コントロール使うこと自体間違っているのかな?
誰か教えて。

946 名前:デフォルトの名無しさん :01/11/24 16:20
>>945
エディットコントロール使うこと自体間違ってる。
教えたよ。
コンソールをアロケートするヨロシ。

947 名前:デフォルトの名無しさん :01/11/24 19:02
でかい表示用エディットコントロールと、一行の入力用
エディットコントロール作ってあたかも一つのウィンドウの
ように見せる。行の取得はリターンキーのKeyonとかを
捕らえる。とかね

948 名前:945 :01/11/24 20:24
エラーやログ表示+若干のコマンド実行が出来るようなウインドウを
>>946
エラーやログ表示+若干のコマンド(オリジナル)が
実行出来るような物がほしいもんで。
コンソールだとちょっと使い勝手が…。

>>947
DOS窓のように、出力の一部だけ保持するような物が作りたいのですが、
エディットコントロールで文字吐きつづけるとバッファが一杯一杯になってしまうんで。
バッファが一杯にならないように始めに書いた奴から消していくには
どうしたら良いのやら…

949 名前:デフォルトの名無しさん :01/11/24 20:57
>>948
コントロールに頼らず自分で描画するようにすればいいだろ?

950 名前:デフォルトの名無しさん :01/11/24 20:59
マニアックな質問だよね。結局アルゴリズムの
問題だよね。・・・・(ひょっとしてできる人?)
だったりして(爆)

951 名前:946 :01/11/24 21:02
>>948
何か勘違いしてない?
誰もコンソールアプリを作れだなんて言ってないよ。
コンソールを作って、そこに出力すりゃいいじゃん。
勿論、そこから入力もできるし。

952 名前:デフォルトの名無しさん :01/11/24 21:08
コンソール画面の情報を文字列バッファにしたって
大きさにしてたいしたことないから、org_bufとbuf
をやって処理したほうが安全なのかな、
org_buf[1024]
buf[1024]
char *lpbuf
.......
if(strlen(org_buf)>1024-コンソール一行分の最大バイト)
lpbuf=strstr(org_buf,"\r\n")(みたいな)
strcpy(buf,lpbuf);
strcpy(org_buf,buf);
やればできるさ!

953 名前:デフォルトの名無しさん :01/11/24 21:14
EM_SETREADONLYもつけなYO!

954 名前:デフォルトの名無しさん :01/11/24 22:11
コンソールでも出来そうではあるんだけど、コンソールほどのデカイウインドウは要らないというか…
ウインドウの一部に組み込んで使えるような奴がほしい。
たとえて言うならなんだろな?
VCのアウトプットウインドウに入力足した奴??
それをエディットコントロールで簡単に出来ないものかと考えたんだけど…

ちなみにコンソールって、AllocConsoleしかやったこと無いけど
ウインドウ側でコンソール閉じたときにメインプログラムが終了しないように出来る?

955 名前:945 :01/11/24 22:13
954==945
説明が下手で
(;´Д`)スマソ

956 名前:936 :01/11/25 14:59
>>944
遅レスすみませんでした。
ありがとうございました。
英語ドキュメントは何とか読んでみます。

957 名前:デフォルトの名無しさん :01/11/25 18:18
親Windowがアクティブになっても
子供のポップアップスタイルのダイアログボックス
は親の後ろに隠れません。隠れるようにしたいんだけど、
これがなかなかできそうでできません。どこのあたりに
どんなフラグくっつけたらいいのでしょうか。

958 名前:デフォルトの名無しさん :01/11/25 19:59
em_limittext

959 名前:デフォルトの名無しさん :01/11/25 22:53
親ウィンドウをNULLにしてダイアログを開け。
だが、98%そのプログラムはクソプログラムだ。

960 名前:デフォルトの名無しさん :01/11/26 17:01
forkしたい。Windowsで。何か方法ないですか?
メモリ空間が書き込み時コピーで処理されると理想です。

961 名前:デフォルトの名無しさん :01/11/26 17:42
・thread使う
・cygwinのforkを使う
・forkではなく、CreateProcessで使える方法を考える
・MSに就職/ソースコード入手して、Win32にforkを実装する
お好きなのをどうぞ。

962 名前:デフォルトの名無しさん :01/11/26 18:14
>>961
POSIX サブシステムを使う、というのは?

963 名前:デフォルトの名無しさん :01/11/26 18:57
>>959
なんで糞プログラムなのか理由を教えてほしいョ

964 名前:デフォルトの名無しさん :01/11/26 20:53
なんで後ろに隠したいのか理由を教えて欲しいョ

965 名前:デフォルトの名無しさん :01/11/26 21:35
俺も957と同じこと考えてた。
>>959
俺も教えてほしいョ

NULLで作成すると、そのウインドウがタスクバーに表示される。
これをどうにかしたい。

966 名前:デフォルトの名無しさん :01/11/26 21:40
サイズ1x1の親ウィンドウの下に子ウィンドウをだしとキャいいだろ

967 名前:デフォルトの名無しさん :01/11/26 22:15
DialogBoxParamみたいに初期値を渡して
モードレスダイアログを作りたいんだけど如何すればよろしゅう?

968 名前:デフォルトの名無しさん :01/11/26 22:40
CreateDialogParam
ではいかんの?

969 名前:デフォルトの名無しさん :01/11/26 22:57
新スレ
http://pc.2ch.net/test/read.cgi/tech/1006783012/

970 名前:デフォルトの名無しさん :01/11/26 23:10
>>968
そんなものが TT
マジありがとうございました
なんでみつからなかったんだろ、ダハハ

971 名前:デフォルトの名無しさん :01/11/26 23:53
>>964
親ウィンドウのキャプションクリックしたとき全ヴ後ろに隠れてくれないと
ストレスがたまって来るから

972 名前:デフォルトの名無しさん :01/11/27 00:01
常に手前・・・ごふっ

973 名前:デフォルトの名無しさん :01/11/27 00:13
(´-`).。oO(新スレが酷い有様だ。何でだろう?)

974 名前:デフォルトの名無しさん :01/11/27 00:35
(´-`).。oO(あれは無かったことにして、もいっこスレ立てた方がいいかも?)

975 名前:デフォルトの名無しさん :01/11/27 00:50
(´-`).。oO(心配するな、もうネタも尽きるだろうて)

976 名前:965 :01/11/27 01:41
>>966
それしか無いっぽい。
ちょっと残念だが、どうもありがとう。

977 名前:>>597 :01/11/27 02:31
つか、なんでモードレスダイアログボックスの動作を、
モーダルダイアログで実現させたい、みたいなワケワカラン事
云うわけ?

978 名前:デフォルトの名無しさん :01/11/27 07:40
だからクソプログラムだからだよ

979 名前:デフォルトの名無しさん :01/11/27 10:07
>>977

957 のような質問は、ウィンドウの所有関係(たぶん親子関係も)を
良く知らないためだと思います。このような仕様は、Windows の動作
としても変ですし、ユーザにとってもストレスのあるものに違いありません。

質問者には、モードレスダイアログとモーダルダイアログとの違いをよく研究し、また
トップレベルウィンドウの相互の所有関係について調べることをお薦めします。

980 名前:デフォルトの名無しさん :01/11/27 23:48
新スレ
http://pc.2ch.net/test/read.cgi/tech/1006783012/

981 名前:デフォルトの名無しさん :01/12/01 00:34
はうっ!


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