トップページ⇒tech
1001コメント277KB

Win32API質問箱 Build27

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん05/01/19 11:51:59
- 過去スレ
Build26:http://pc5.2ch.net/test/read.cgi/tech/1104109858/
Build25:http://pc5.2ch.net/test/read.cgi/tech/1101393155/
Build24:http://pc5.2ch.net/test/read.cgi/tech/1098967135/
Build23:http://pc5.2ch.net/test/read.cgi/tech/1095534704/
Build22:http://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:http://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:http://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:http://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:http://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:http://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:http://pc2.2ch.net/test/read.cgi/tech/1073830065/ ★
Build15:http://pc2.2ch.net/test/read.cgi/tech/1069339866/ ★
Build14:http://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:http://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:http://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやー ごめんなさい。」に巻き込まれた模様
0002デフォルトの名無しさん05/01/19 11:53:28
- MSDN Online
http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/
0003デフォルトの名無しさん05/01/19 12:30:18
乙!
0004デフォルトの名無しさん05/01/19 12:58:51
SuspendThread
0005デフォルトの名無しさん05/01/19 13:14:32
ResumeThread
0006NameSpace05/01/19 13:15:26
 
0007デフォルトの名無しさん05/01/19 13:23:00
>>995
どっかのサンプルを真似しただけだが、
WM_LBUTTONDOWN を捉える。lparam に座標が入っている。
(WM_LBUTTONDOWN で MSDN を検索すると、サンプルがあるのではないか)
modal dialog なら、switch (msg){... の中ですむ。
座標は、local へ変換するかして、お目当ての矩形(pane)と平仄を合わせる。
PtInRect() だっかたかで、目当ての矩形の中にあるなら、GetCPixel() で
色は取り出せる。色の index を求めるなら、その矩形を描いた方法を逆に
辿って、位置を割り出す。256 色の、個々の色の矩形は、多分、幅、高さは
皆、同じだろうから、それで、座標の x, y を割り、数値を一次元に戻せば
よい。
modeless dialog なら、dialog の HWND をグローバルにしておいて、
それから辿る。dialog を閉じたら、HWND は NULL クリアして、以後来ない
ようにする。
0008デフォルトの名無しさん05/01/19 16:20:31
コントロールパネル→ハードウェアの追加と削除
→デバイスの削除/取り外し→デバイスの取り外し
と同じ事をプログラムから行いたいのですが
どのようにすでば良いのでしょうか?
DetachDevice( STORAGE_DEVICE_DESCRIPTOR sdd )
みないな感じのAPIがあると一番良いのですが…
よろしくおねがいします。
0009デフォルトの名無しさん05/01/19 17:45:55
>>前スレの最後の方
ReadFileの1行番はWIN32APIには無いはず
全部(もしくは途中まで)読み込んで、改行区切りに自分で変換しないと駄目だと思う
1行にこだわっててAPIは何でも良いなら、C標準のfgetsで読み込むのが良いかと
0010デフォルトの名無しさん05/01/19 17:47:15
>>9
fgetsって速度が遅いとかいうことはないですか?
0011デフォルトの名無しさん05/01/19 18:32:27
常識的に考えれば、遅いわけも早いわけもないだろ
0012デフォルトの名無しさん05/01/19 18:36:19
>11
役に立たない回答だねぇ
0013デフォルトの名無しさん05/01/19 18:38:37
>>11
社会的に何の信頼もない君の「常識」なんて・・・
0014デフォルトの名無しさん05/01/19 18:39:36
2ちゃねらーの常識なんて・・・
0015デフォルトの名無しさん05/01/19 18:48:54
ExitThread(ぬるぽ);
0016デフォルトの名無しさん05/01/19 18:52:12
ソートのアルゴリズムは出尽くしてるのは常識だろ
改行を判断するのもごく当たり前にやるしかないのは常識
馬鹿ですか?
0017デフォルトの名無しさん05/01/19 18:54:50
RaiseException(がっ);
0018デフォルトの名無しさん05/01/19 18:57:17
CreateFileMappingかPipe使え。パイプはOSでサポートされたjavaのStringBufferみたいなもん。
0019デフォルトの名無しさん05/01/19 19:02:35
リストビューをちらつき無しで表示する事は出来るのでしょうか
メモリDCを作ってbltで更新する手法はリストビューでも出来ますか?
0020デフォルトの名無しさん05/01/19 19:04:31
http://www.kumei.ne.jp/c_lang/sdk/sdk_09.htm
の通りにプログラムを作ったらどのようなプログラムになるでしょうか?
0021デフォルトの名無しさん05/01/19 19:05:54
書いてるだろ
0022デフォルトの名無しさん05/01/19 19:08:07
>19
サブクラス化して描画関連メッセージ処理を包むのは、大変そうだ
0023905/01/19 19:08:18
>>10
使うのが難しい関数でもないし、試しに使ってみればいい(ReadFileが使えるなら、何も悩まんだろう)
でも、もしfgetsそのものについて質問があれば、C言語関係のスレでよろしく。
0024前スレ99905/01/19 19:45:42
>>9
無いですか。
ありがとうございました。
やり方考えます。
0025デフォルトの名無しさん05/01/19 19:49:40
>>16
はい、あなたが。
0026デフォルトの名無しさん05/01/19 19:53:10
>16
プログラマの常識はいいがお前の常識は世間に通用しない。
0027デフォルトの名無しさん05/01/19 19:57:06
どっちにしろお前らみんなたいしたことないんだから、
不必要な書き込みはするな。
0028デフォルトの名無しさん05/01/19 21:42:03
>>27
了解しました。
0029デフォルトの名無しさん05/01/19 22:21:21
.  ∩∩
   | | | |
  (゚ω゚ ) < けんか、ここまで
  。ノДヽ。
   bb
0030デフォルトの名無しさん05/01/19 22:38:36
http://pc5.2ch.net/test/read.cgi/tech/1102900418/906-910

> 906 :デフォルトの名無しさん :05/01/19 22:06:37
> win32apiのReadFileで1行読み込みのプログラムを作ろうと思ってます。
>
> この場合、全データをメモリに読み込んで改行ごとに分けるか。
> 1バイトづつ改行まで読み込んでいくとでは
> どっが効率良いですか?
>
>
> 909 :デフォルトの名無しさん :05/01/19 22:34:22
> >>906
> 死ねマルチ
>
>
> 910 :デフォルトの名無しさん :05/01/19 22:34:25
> >>906
> お前なぁ、実際にやってみたらわかる事だろ?アホか?
0031デフォルトの名無しさん05/01/19 22:41:40
XPのメニューやツールチップのようにウィンドウに影をつける
APIって知ってませんか?
0032デフォルトの名無しさん05/01/19 22:42:19
>>30
暇人乙
0033デフォルトの名無しさん05/01/19 22:42:58
>>31
変な日本語。「知りません」って答えてあげれば満足なのかな。
0034デフォルトの名無しさん05/01/19 22:44:55
>31
モノクロパターンブラシSetROP4
0035デフォルトの名無しさん05/01/19 22:51:21
>>33
「知ってません」じゃないと不満足かと
0036805/01/20 00:40:29
やっぱり2chでは答えられるレベルではなかったですね。
自己解決しました。すんまそ。
0037デフォルトの名無しさん05/01/20 00:52:10
タイムアウトするメッセージボックスないですか?

n秒後に勝手に閉じてもらいたい。
0038デフォルトの名無しさん05/01/20 01:00:45
自作ウィンドウでやるか、他のプロセスでタイマー制御させるか
0039デフォルトの名無しさん05/01/20 01:01:48
>>37
そういったものは、知らないです。
SetTimerでタイムアップしたらSendMessageで送ればどうでしょ?
0040デフォルトの名無しさん05/01/20 01:06:21
自分で1から作るのはしんどいので
フックする方法ありませんか?
モーダルなのでどうしようもない気がします。
0041デフォルトの名無しさん05/01/20 01:29:51
フックとかについて詳しくないんで、メッセージボックスで出来るかどうか私は知らない
プロシージャのアドレス受け取ってすげ替えればいけるのかな?

強引な方法で、もう一個プログラム作るのはダメ?
メッセージボックス作る直前に、「時間が経つと、任意のメッセージボックスを閉じるプログラム」を実行するっての
閉じるメッセージボックスの選択は、ウィンドウテキストをユニークなものにして、サーチするとか
(スレッドとかのが、まだスマートに出来るけど)
0042デフォルトの名無しさん05/01/20 01:37:06
フックプロシージャ立ててからメッセージボックス表示すんの。
そうすればフックは可能。タイマーまでは試してないから知らん。
0043デフォルトの名無しさん05/01/20 01:49:14
>>41
そんなの駄目です。


>>42
意味がわかりません。
フックしようにもハンドルがないので。
0044デフォルトの名無しさん05/01/20 01:56:34
SetWindowsHookEx と WH_CBT 調べて味噌。
0045デフォルトの名無しさん05/01/20 02:03:46
>>44
だんだんMessageBoxから遠ざかってる気がしてきました。
数行でやっつけ仕事みたいな感じでできないものでしょうか。
0046デフォルトの名無しさん05/01/20 02:12:43
数行とは言わないけど結構簡単よ。

SetWindowHookEx でローカルフック開始。
直後にメッセージボックス表示。
ウィンドウが作られたYO!ってくるからタイマー開始。
なんも無しで期限がきたら破棄。
期限前に何かあったらタイマー終了。
フックも終了。

ほら。
0047デフォルトの名無しさん05/01/20 02:23:31
int MsgBoxTimeout(HWND h, LPCTSTR text, LPCTSTR cap, UINT style, UINT timeout) {
 unsigned id;
 HANDLE cth = GetCurrentThreadId(),
 th = _beginthreadex(NULL, 0,
  lambda __stdcall(UINT timeout) int {
  HWND hmb = 0;
  Sleep(timeout);
  EnumThreadWindows(cth,
   lambda __stdcall(HWND h, LPARAM l) BOOL {
    char buf[256];
    int Ret = GetClassName(h, buf, 256);
    return (Ret && !strcmp(buf, "#32770"), hmb = h) ? 0 : 1; }
  , NULL);
  if (hmb && IsWindow(hmb))
    EndDialog(hmb, 100), SendMessage(hmb,WM_CLOSE,0,0);
 }, timeout, 0, &id);
 int r = MessageBox(h,text,cap,style);
 if (th) CloseHandle(th);
 return r;
}

20行だけど。
0048デフォルトの名無しさん05/01/20 02:25:01
えーと、フックまでする必要は無くて。

google で timeout と MessageBox をキーにして検索したら色々出てくると思うが。
要は、SetTimer 掛けといて時間が経過したら、
FindWindow("MessageBox のタイトル")
で検索かけて、WM_CLOSE をポストするとか、
WM_QUIT を送って、MessageBox 関数から
戻ってきたら、すかさずキューから WM_QUIT を取り除くとか色々方法あるよ。
0049デフォルトの名無しさん05/01/20 02:25:14
strcmpの箇所以下の間違い。
    return (Ret && !strcmp(buf, "#32770") && hmb = h) ? 0 : 1; }
0050デフォルトの名無しさん05/01/20 02:26:46
>>47
ありがとうございました。
0051デフォルトの名無しさん05/01/20 02:28:48
・知能障害を起こす
0052デフォルトの名無しさん05/01/20 02:30:42
>>50
判ると思うけど普通のC言語じゃないからね。
lambdaについてはLISP屋さんにでも聞いてください。
様はインラインでコールバック書いてるだけ。
0053デフォルトの名無しさん05/01/20 02:34:52
>>47
なんかわからんがすげー
0054デフォルトの名無しさん05/01/20 04:25:47
回答だけからどんな質問だったか考えてみると結構面白いな
0055デフォルトの名無しさん05/01/20 05:41:22
前スレ>>996さん、>>7さんどうもありがとう。
0056デフォルトの名無しさん05/01/20 09:05:49
自分のプログラムに対するOpenProcessのアクセス権を制限するにsは
どうしたらいいんでしょうか?
アクセス権を変更できるようなAPIが見当たらないのですが・・・
0057デフォルトの名無しさん05/01/20 09:38:28
WONADVAPI BOOL WONAPI EnableTokenPrivilege(HANDLE hToken,LPCTSTR pszSE_Name)
{
TOKEN_PRIVILEGES tp;
if(LookupPrivilegeValue(NULL,pszSE_Name,&tp.Privileges[0].Luid)){
tp.PrivilegeCount=1;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
return AdjustTokenPrivileges(hToken,FALSE,&tp,0,NULL,NULL);
}
return FALSE;
}
0058デフォルトの名無しさん05/01/20 10:00:04
>56
InitializeSecurityDescriptor,
SetSecurityDescriptorDacl,
OpenProcessToken,
SetTokenInformation
を見よ
0059デフォルトの名無しさん05/01/20 16:44:53
SetTimerを実行するって書いてありますが、どうやって実行するんですか?
0060デフォルトの名無しさん05/01/20 16:48:26
>>59
SetTimer関数を呼び出す。
0061デフォルトの名無しさん05/01/20 16:50:13
猫にも劣るプログラマーか
0062デフォルトの名無しさん05/01/20 17:48:57
今直線を描くを勉強しているのですが
上手く説明できるか分からないのですが質問があります。宜しくお願いします
VC++.netを使用しています

例えば直線を引く関数MoveToExやLineToがありますが
MoveToEx(hdc, 20, 500);
LineTo(hdc, 500, 500);
にして描いてみると 直線が書けるのですが
ウィンドウのサイズを小さくしていくと途中から見えなくなってしまうのですが(画面の外に出て消えてしまう)

私が書きたいのはサイズを小さくしていっても画面から消えずに
画面が小さくなるに連れて直線もどんどん縮小していくような直線が描きたいのですが
何かいい関数はないものでしょうか?
0063デフォルトの名無しさん05/01/20 17:53:48
>>62
ウィンドウの大きさにあわせてMoveTo,LineToに渡す座標値を変える
別解は、SetMapMode
0064デフォルトの名無しさん05/01/20 18:16:25
>>63
ありがとうございます
図形描写に適していそうな
SetMapModeが都合よさそうなのでそちらを勉強しようと思います

0065猫にも劣るプログラマー05/01/20 18:21:49
その呼び出し方がわからないのですorz
0066デフォルトの名無しさん05/01/20 18:28:19
そりゃ、調べずに分かる人は居ない(知ってる人は過去に調べた人)
0067猫にも劣るプログラマー05/01/20 19:09:12
C:\MSDEV\Projects\win32\timer.cpp(99) : error C2084: 関数 'long __stdcall WndProc(void *,unsigned int,unsigned int,long)' はすでに実体を持っています。
とかコンパイラがいってくるんですが、どういう意味ですか?
0068デフォルトの名無しさん05/01/20 19:15:01
>>62
メモリデバイスコンテキストにLineToして、それを
StretchBlitでクライアントの大きさに縮小して表示したら?
0069猫にも劣るプログラマー05/01/20 19:16:49
すみません、できました。
これからしっかり調べてきます。
0070デフォルトの名無しさん05/01/20 21:10:12
>>68
ありがとうございます参考になります
StretchBlitに縮小率を渡すために画面の縮小率などを計算しとかないといけなくなってきますね
元の大きさと変更後の大きさで計算して求めていかないといけないと・・・・

0071デフォルトの名無しさん05/01/20 21:13:00
線画をStretchBltで縮小するのはおすすめできないよ。
線がガタガタになったり、消えたりもする。
0072デフォルトの名無しさん05/01/20 22:07:51
テスト
0073デフォルトの名無しさん05/01/20 23:33:21
マウスカーソルの位置を変更するAPI(DirectInput以外で)って有りますか?
有ったら教えて下さい。
0074デフォルトの名無しさん05/01/20 23:33:55
test
0075デフォルトの名無しさん05/01/20 23:37:42
>>73
SetCursorPos
0076デフォルトの名無しさん05/01/21 01:07:16
>>34
できました。ありがとう。
0077デフォルトの名無しさん05/01/21 01:42:26
   (
     ))
    ノ)
   (,,_ _,,)

  (,,____,,_) オーバーサンプリングすればいいんじゃない?
  (,,_,,___, ,_)
0078デフォルトの名無しさん05/01/21 08:03:16
#if defined(WONSLIM) && !defined(DEBUG)
#define SetLastErrorEx(dwERROR_,dwSLE_Type) \
_WONSLE##dwSLE_Type(dwERROR_)
#define _WONSLE0(dwERROR_) SetLastError(wERROR_)
...
0079デフォルトの名無しさん05/01/21 11:22:40
モードレスダイアログボックスは常に親ウインドウの前面に表示されますが
これを解除して親ウインドウが前面にくるようにできますか?
0080デフォルトの名無しさん05/01/21 11:33:57
>79
所有権を放棄?
0081デフォルトの名無しさん05/01/21 17:29:44
タクスバーの上にマウスカーソルを持って行った時に、
プログラムによっては文字列が出る機能がありますが、
それはなんという名前なのでしょうか。
実装したいのですが、検索する上でのキーワードにさせていただきます。
00828105/01/21 17:34:11
あっ、ツールバーです。すいません。
メニューの下にあるボタン群です。
0083デフォルトの名無しさん05/01/21 17:37:10
ツールチップ?
00848105/01/21 17:41:07
>>83
その名前のようです。調べると出てきました。
ありがとうございました。
00857905/01/21 19:10:47
CreateDialogの引数をhWndからNULLにしたら、前後関係が切り替わるようになりました
けどこれでいいんだろうか・・
0086デフォルトの名無しさん05/01/21 19:24:25
親じゃなくなったから切り替えが出来るようになった訳で。
最小化したときの挙動とか見て納得ならいいんでない?
0087デフォルトの名無しさん05/01/21 19:25:13
>85
OK牧場
0088デフォルトの名無しさん05/01/22 01:46:01
下画像のものを追加したいのですがどうすればいいか教えてください。お願いします
http://f29.aaa.livedoor.jp/~retoroup/gazoubbs/src/1106325912414.jpg
0089デフォルトの名無しさん05/01/22 08:25:02
ホイールを回転させたときに送られてくる WM_MOUSEWHEEL は
現在のマウスカーソルの場所とは関係なく、
フォーカスを持つウインドウへ送られてくるのでしょうか?

ホイール回転のメッセージを、現在のマウスカーソルの
下にあるウインドウに処理させたいときは、いちいち、
現在のマウスカーソルの位置は?
それは自分の上にある?
あるならそのまま処理するけど、そうでないなら
そのウインドウへメッセージを再送する
とかするんでしょうか?
00907905/01/22 09:09:15
>78
>79

トンクス
挙動が気に入らなくなったらウインドウに作りかえます
0091デフォルトの名無しさん05/01/22 09:13:45
>88
ビットマップリソースにしてLoadBitmapで読み込め
0092デフォルトの名無しさん05/01/22 09:24:05
>>89
事情がよくわかりませんが、私の MDI のプログラムでは、WM_VSCROLL の処理と
並べて、WM_MOUSEWHEEL では、回転数(wparam)を WM_VSCROLL 向けの値などに
変換して、WM_VSCROLL 処理へ渡しています。
  MDI の、frame window では、なにもせず、document window の proc で
  やっています。rich text control も使っていますが、WM_VSCROLL で、
  MDI window の種別で分岐させています。document window は subclass化
  してますが、ここでは何もしてません。
00938805/01/22 09:41:36
>>91
よくわかりません。メニュバーの項目をIE風にしたいのですが
0094デフォルトの名無しさん05/01/22 09:48:03
IE風メニューでぐぐれ
つーか猫でも〜にあったような
0095デフォルトの名無しさん05/01/22 10:25:48
>88 と >93 で質問内容が変わってないか?
00968805/01/22 10:33:37
猫見てもわかりません。もっとわかりやすいサイトお願いします
0097デフォルトの名無しさん05/01/22 10:46:03
IEも何もWindowsの標準的なメニューじゃないか‥‥

MENU_HOGE MENU
{
 POPUP "&Window"
 {
  MENUITEM "Menu&Item" IDM_HOGE1
  POPUP "&ArrowedItem"
  {
   MENUITEM "&ChildItem" IDM_HOGE2
  }
 }
}
00988805/01/22 11:03:56
>>97
正直それみてもさっぱりわかりません
0099デフォルトの名無しさん05/01/22 11:07:17
>>98
正直ただのメニューの作り方もさっぱりわからないだろ。
01008805/01/22 11:09:08
>>99
それはわかります
0101デフォルトの名無しさん05/01/22 11:10:05
>>100
んなこたーない
01028805/01/22 11:10:40
マジでわかります
01038805/01/22 11:15:16
マジですんません。なんかリソーススクリプトで簡単に作れるみたいです。マジですんません
0104デフォルトの名無しさん05/01/22 11:15:31
釣り?
01058805/01/22 11:17:34
釣りじゃないです。気づかなかっただけです。画像も消しときました。
ほんと猫紛らわしい。あのサイトいらね
0106デフォルトの名無しさん05/01/22 11:23:49
>>88
  >>97 の例の POPUP の行がメニューに現れる時には、中に子のメニュー項目が
  あるから、自動的に、横向き三角マークは付く。

  >>97 は、リソース・ファイルでの表現。xxx.rc というファイルをテキストと
  して開くとこの書き方が見える。

ってことが、分からなかったのかな。分からないってなんだろ。

リソースは、リソース・エディタで編集するけど、xxx.rc ファイルは、テキスト
としても編集できる。あたしゃ、メニューはテキストでやっている。resource.h
にも( >>97 での IDM_... の変数を)登録しないといけないのは、面倒といえば
面倒だが。
0107デフォルトの名無しさん05/01/22 11:48:16
>105
お前のほうが紛らわしい。Windowsアプリの作成を勉強しなおしてきなさい
0108デフォルトの名無しさん05/01/22 12:30:56
つまんない
0109デフォルトの名無しさん05/01/22 15:08:14
WaitableTimer使ってスタンバイ状態から復帰させると、
約二分後にOSの設定に関わらず再びスタンバイに戻ってしまいます。
OSの設定通りに挙動させるにはどうしたらいいですか?
0110デフォルトの名無しさん05/01/22 17:22:00
CreateWindow関数で
スタイルのところに
ES_AUTOHSCROLLを入れて
スクロールバーが作れるのですが
このスクロールバーをクリックしたとき
送られるメッセージは何かあるのでしょうか?
0111デフォルトの名無しさん05/01/22 19:49:02
システムフックでマウスのホイールを検知して、(あらかじめ指定した)キーが押された
ようにするソフトを作りました。それ自体は正常に動作しているようなんですが、何故か
Sleipnirと同時に起動しているとタスクマネージャでSleipnir側の仮想メモリサイズが毎秒
10〜20KBくらいの勢いで徐々に増加していきます。

公開されているマウスジェスチャーなんかのソフトではそういうことは発生しないので、自分の
コードが悪いと思うのですが、メモリが増えていくのが別アプリなのでどうやって問題を切り分け
ればいいのか分かりません。いい方法はないでしょうか。

フックプロシージャ内の処理を
return CallNextHookEx(hHook, nCode, wParam, lParam);
だけにしたり、フックをWH_MOUSEやWH_GETMESSAGEにしてみたりしましたが現象は同じでした。

---
Borland C++ 5.51 + WindowsXP SP2
0112デフォルトの名無しさん05/01/22 20:27:34
電源管理。
WM_HSCROLL、spy++。
作者に問い合わせる。
011311105/01/22 23:53:36
>>112
ありがとうございます。
できるだけ原因を追求してから、最後に作者氏にも相談しようかと思ってました。
ただSleipnirのソースコードも盗難にあって無いらしいので…。

01148905/01/23 01:51:26
ホイールを回転させたときに送られてくる WM_MOUSEWHEEL は
現在のマウスカーソルの場所とは関係なく、
フォーカスを持つウインドウへ送られてくるのでしょうか?
011511105/01/23 02:01:38
根本的な原因は分かりませんでしたが、一応影響ない範囲で自己解決しました。
特定のアプリケーション内で動作すればよかったので、SetWindowHookEx()の第4引数に
対象のスレッドIDを指定することで現象は発生しなくなりました。
# 一応試してはいたんですが、初期化の順番間違えてスレッドID取得できていませんでした

他のグローバルフックかけてるアプリではなんで発生しないんだろう…
0116デフォルトの名無しさん05/01/23 02:07:25
>>114
実際にやってみるのが早いと思いますが、位置にかかわらずフォーカスのある
ウィンドウにWM_MOUSEWHEELは送られます。

位置情報があれば WindowFromPoint() でカーソル下のウィンドウハンドルを
取得できるのでPostMessage()なりで再送すればいいでしょう。
自分の上にあるかどうかの分岐は必要ありませんね。
01178905/01/23 02:58:27
>>116
ありがとうございました
0118デフォルトの名無しさん05/01/23 10:11:42
WindowsAPIをパッケージ化したものがWindowsSDK
WindowsAPIをオブジェクト指向の考え方で使いやすくラップしたものがMFC

っていう認識をしているのですが、合ってます?
0119デフォルトの名無しさん05/01/23 11:15:31
winapiはアプリとwinの間の不完全なインタフェースです。MFCはwinapiを包む、馬鹿デカいクラスライブラリです。
Platform SDKは、第三者向けのWin用ソフト開発Kitですが、開発環境ではありません。いじわるだがそれなりに有益なサンプル集が付属します。
0120デフォルトの名無しさん05/01/23 11:23:32
>>118
MFC・ATL/WTLはそれぞれ継承やテンプレートを利用したモジュールプログラミングなクラスライブラリです。
基本的にオブジェクト指向してません。
0121デフォルトの名無しさん05/01/23 12:23:06
Win32のアプリから、X86-64(EM64T)用にコンパイルしたDLLを
リンクしたり、動的ロードして実行できる?
OSはWindowsXP-64
0122デフォルトの名無しさん05/01/23 13:51:42
>>121
http://pcweb.mycom.co.jp/articles/2004/06/23/win64/
0123デフォルトの名無しさん05/01/23 14:27:13
エディットボックスの高さってどうやって決定したらよいのでしょうか。
作ろうとしてるのは1行のみ入力するタイプです。
又リソースエディタからではなく、
CreateWindowExでエディットボックスを作ってます。

フォントは設定してないので、システムフォントが使われていると思います。
0124デフォルトの名無しさん05/01/23 14:55:25
>123
GetDialogBaseUnits
GetSystemMetric#SM_CYBORDER
GetTextMetrics
0125デフォルトの名無しさん05/01/23 15:08:27
トップレベルウィンドウの中にグループボックスを作って
その子ウィンドウとしてラジオボタンを配置して
XPスタイルで実行するとラジオボタンが真っ黒になるのですが
これは一体?
0126デフォルトの名無しさん05/01/23 15:43:27
>125
小窓にするな。

そこを256回クリックしてみろ。何も起こらないから。
012712505/01/23 15:57:36
噂で聞いてたんですがやっぱりグループボックスって
見た目だけなんですね。
0128デフォルトの名無しさん05/01/23 16:35:42
HANDLEが指しているオブジェクトが何か、
ファイルハンドルなのか、ミューテックスなのか、、、などを
調べる方法はないでしょうか?
0129デフォルトの名無しさん05/01/23 17:00:30
SelectObjectの明示的なキャスト
とは、どのようにすればよろしいんでしょうか?
hbitmap = SelectObject(hdcMem,hBMP);
0130デフォルトの名無しさん05/01/23 17:15:42
>128
ハンドルを混同するような設計は良くない。GetFilePointerのエラー値、シグナル待ちなど。
0131デフォルトの名無しさん05/01/23 17:17:10
>129
Select*@<windowsx.h>
0132デフォルトの名無しさん05/01/23 18:14:48
(HBITMAP)
0133デフォルトの名無しさん05/01/23 19:13:38
他のスレから誘導されてきましたお願いします

質問なんですけどよろしくお願いします

GetOpenFileNameで複数ファイル選択可能にした場合、どのくらいバッファを確保すればいいですか?

どこかで見たサンプルでは
char str[MAX_PATH*1024];
とやっていたのですがこの1024に意味はあるのですか?最大ファイル数とか・・・
0134デフォルトの名無しさん05/01/23 19:17:18
掛け算も出来ないの?
0135デフォルトの名無しさん05/01/23 19:19:42
GetOpenFileNameで複数ファイル選択可能にした場合、どのくらいバッファを確保すればいいですか?
0136デフォルトの名無しさん05/01/23 19:20:54
1K
0137デフォルトの名無しさん05/01/23 19:23:13
>133
正しくサイズを指定すれば、溢れは切り捨てられるんじゃないか。開かれるだろうファイルの数*MAX_PATHが目安。1フォルダに1200個もファイルを置くなんて考えられないね
0138デフォルトの名無しさん05/01/23 19:38:24
1200個程度は普通に考えられるよ。

方針がないならきりが無いからいっそのこと256バイトにしといて
後は別の手段でも考えたほうがいいよ。
リストをファイル経由で受け取ったり
フォルダ指定させてそこのファイル全部とか。
0139デフォルトの名無しさん05/01/23 19:50:17
おれの秘密のフォルダには10万個以上入っているが
0140デフォルトの名無しさん05/01/23 19:52:42
エディタとかならそんな何百も開くこと無いだろうけど
何か自動処理するソフトなら数千はいっちゃうかもしれないしな。
014113305/01/23 20:03:00
みなさん、レスありがとうございます
結論としてはいい方法はなく、十分にバッファを確保してから呼び出せですかね
ちなみにバッファは
TCHAR allpath[_MAX_DIR + (_MAX_FNAME + _MAX_EXT) * n];
の計算で確保しようと思います
ちなみに掛け算くらい出来ます
0142デフォルトの名無しさん05/01/23 20:22:20
ちゃんとMSDN読めばそんな事で悩む必要は無いと思うけど…
0143デフォルトの名無しさん05/01/23 20:23:47
GlobalAlloc使えよ
0144デフォルトの名無しさん05/01/23 20:24:25
せめてHeapAllocにしとけよ
0145デフォルトの名無しさん05/01/23 20:26:13
それだとこのスレの質問ほとんどMSDN読めで終わるな
0146デフォルトの名無しさん05/01/23 21:19:26
>>141
http://www.google.co.jp/search?num=50&hl=ja&newwindow=1&c2coff=1&q=site%3Amicrosoft.com+MAX_PATH&lr=lang_ja
http://www.microsoft.com/japan/developer/library/vccore/_crt_path_field_limits.htm
_MAX_DIR + (_MAX_FNAME + _MAX_EXT)は実質MAX_PATHと同じ。
ちなみに_MAX_PATHは_makepath用。MAX_PATHがWin32API用。
014714105/01/23 21:26:20
複数ファイルが選択されたときに↓のような感じでファイル名が入ってくるのでそれにあわせてみました
ディレクトリ\0ファイル名\0ファイル名\0...ファイル名\0\0
_MAX_DIRと_MAX_FNAMEと_MAX_EXTのすべてのサイズが256か260だったのでそうとうサイズがやばかったです orz
今はMAX_PATH*nにしてHeapAllocを使いますありがとうございました!
0148デフォルトの名無しさん05/01/23 21:31:22
マネージドやれば心配ない
0149デフォルトの名無しさん05/01/23 21:46:11
>>147
あらかじめOPENFILENAMEでフックプロシージャを指定しておき、
CDN_FILEOKが送られてきたタイミングで
CDM_GETFILEPATHを送ってバッファサイズを取得し、
バッファを確保してから全体の文字列を取得する。
…てな感じでできないかな?
015012805/01/23 23:50:41
>>129
いや、設計がいいとかよくないとかの問題ではなく
HANDLEの先にあるオブジェクトが何かを知る方法を伺っているんですが。。。

目的は、診断目的です。
0151デフォルトの名無しさん05/01/24 00:42:36
MoveToExの始点とかって変数使えるんですか?
使えるとしたらどうしたらいいのかわからないので教えてください。
0152デフォルトの名無しさん05/01/24 01:24:17
>>151
使える
xとyがintで宣言されてるのを見ればわかるとおもうg
0153デフォルトの名無しさん05/01/24 01:25:32
デジャブ
0154デフォルトの名無しさん05/01/24 01:29:50
>>152
わかりました、サンプルを色々見て勉強します。
ありがとうございました。
0155デフォルトの名無しさん05/01/24 02:07:10
普通はIDBに変換して32ビットでアクセスが早いです
0156デフォルトの名無しさん05/01/24 08:39:40
>150
エロ画像★
0157デフォルトの名無しさん05/01/24 19:12:38
仕事でWinAPIを使ってアプリを作成する時に
膨大な数のAPIをどのように検索して使用するのが一般的ですか?
本とかWebサイトとかいろいろ方法はあると思うのですが、
皆さんは仕事で、どのようにAPIの使用方法を調べて使ってるんでしょうか?
0158デフォルトの名無しさん05/01/24 19:35:12
MSDN
0159デフォルトの名無しさん05/01/24 19:51:41
>>158

なるほど、言われてみればそうですよね・・・
つまらない質問してすいませんでした
0160デフォルトの名無しさん05/01/24 20:25:44
ポップアップメニュー上で左/右クリックしたときに、そこが選択不能の項目
だったら特別な処理を行いたいと思ってます。

いまいち方法が思いつかないのですが、たとえばポップアップメニューが
表示されているかを調べるようなことはできるでしょうか。あるいは、マウス
カーソルの下がメニューかどうかを調べる方法とか…?

アイデア、ヒントなどありましたらご教授ください。
0161デフォルトの名無しさん05/01/24 20:31:15
選択不能の項目ってグレイになってるメニューのこと?
0162デフォルトの名無しさん05/01/24 20:32:41
>157
古くて不完全な情報なら英語winhelp形式のWin32 reference manualを見る。直接リンクはできないけどwinehqあたりで入手できる
0163デフォルトの名無しさん05/01/24 20:34:27
>160
WM_BEGINPOPUP~
016416005/01/24 20:43:24
>>161
そうです。
それを判別する方法も今悩み中なんですが…

>>163
ありがとうございます。
"WM_BEGINPOPUP"のあとに何かの単語が続くということでしょうか。
MSDNやGoogleで検索してみましたが、見つけられませんでした。
もう少しだけヒントをいただけないでしょうか。


環境を書いていませんでした。Win2K/BorlandC++ 5.5 です。
0165デフォルトの名無しさん05/01/24 20:50:23
>163
間違えた。
WM_MENUSELECT
GetMenuState
0166デフォルトの名無しさん05/01/24 21:27:32
>>157
PlatformSDK
副読本として>>162の日本語版(BCBに付属)
0167デフォルトの名無しさん05/01/24 21:31:01
CreateWindowEx でタイトルバーの無いウインドウをつくるには
dwExStyle と dwStyle の引数に何を渡せばいいですか?
0168デフォルトの名無しさん05/01/24 21:40:23
>167
CreateWindow#WS_*の解説を読めば分かるはずだ
0169デフォルトの名無しさん05/01/24 21:42:02
dwStyle &= ~WS_CAPTION;
017016005/01/24 21:47:49
>>165
ありがとうございます。
マウスで選択したタイミングで飛んでくるのでちょっと考えてしまいましたが、
なんとか意図したように実装することが出来ました。
0171デフォルトの名無しさん05/01/24 21:47:55
"~"はなんだ?
017216705/01/24 21:52:04
>>168-169
ありがとうございます。
でもダメポ・・・

DWORD dwExStyle = 0;
DWORD dwStyle = 0;

dwStyle &= ~WS_CAPTION;

hwnd = CreateWindowEx(dwExStyle, szAppName, "unko", dwStyle,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
0173デフォルトの名無しさん05/01/24 21:53:48
間違って悪かった。自分が作った拡張APIと混同していた
0174デフォルトの名無しさん05/01/24 21:55:57
C C++ VC++とかありますが、
VC++というのは
WindowsSDKやMFCを使ったプログラミングがこれに当たるんですか?
0175デフォルトの名無しさん05/01/24 21:56:45
>>171
アフォですか?
0176デフォルトの名無しさん05/01/24 21:58:10
>>174
そんなことはない
0177デフォルトの名無しさん05/01/24 22:05:36
なんで、C/C++ と VCが同列に扱われるんだ?
まずそこんとこ教えてくれ。
0178デフォルトの名無しさん05/01/24 22:18:15
VCの本とか見ると、コンソールアプリ=C/C++、GUIアプリ=VC++って書き方の本がある(こういう本は買わないけど)
ネットでも、そういう感じの書き方は多いし、GUIアプリ勉強したての友人が得意げに「VisualC言語」って連呼してくる

クセの強い方言持ってるから、言語と言えなくも無いけどね(とか言ってみる)
0179デフォルトの名無しさん05/01/24 22:36:49
Microsoft Visual C++ .NET 2003 は、C++ 開発言語を使用して
Microsoft Windows ベースのアプリケーション、
Microsoft .NET ベースのアプリケーション、
ダイナミックな Web アプリケーション、
および XML Web サービスを作成するための強力なツールです。
0180デフォルトの名無しさん05/01/24 22:38:04
>>172
WS_POPUPベースで必要なスタイル足せ。
0181デフォルトの名無しさん05/01/24 22:55:02
>>172
CreateWindowの時はWS_OVERLAPPEDWINDOWで作って
あとからキャプション外す。
dwStyle = GetWindowLong(hWnd, GWL_STYLE);
dwStyle &= ~WS_CAPTION;
SetWindowLong(hWnd, GWL_STYLE, dwStyle);
0182デフォルトの名無しさん05/01/24 23:13:11
http://pc5.2ch.net/test/read.cgi/tech/1106403600/257 で質問しましたが、
誘導されたのでこちらで質問します.

現在gcc(Linux上)を使って作ったプログラムをWindowsのVC6.0(?)でコンパイルしようとしてます.

コマンドラインオプションの処理で,gccのunistd.hにあるgetopt()を使ってるんですが,
どうやらVCには無いようです.VCで代わりになるようなものってありませんか?
いちいち組まないといかんのですかね?

それから
LinuxとWindows,共通に使えるMakefileの書き方についての情報(HP等)がございましたらお教えください.
いちいち変更するより1つで済めばとても素敵なんです.
0183デフォルトの名無しさん05/01/24 23:21:51
LinuxとWindows,共通とか考えてるなら、Win32APIは除外するだろ普通
0184C言語なら俺に聞けスレの25705/01/24 23:28:53
>182
だからおまいは俺かYO!
勝手に書き込むなっつうの

>183
そう思ってC言語なら俺に…スレに書いたんすけどね.
すんません.もう一人の俺(?)が勝手に…
0185デフォルトの名無しさん05/01/24 23:29:28
>182
交通事故解決のため終了
0186デフォルトの名無しさん05/01/25 01:55:00
ここはいつからVCのスレになったんでしょうかね?
0187デフォルトの名無しさん05/01/25 01:56:45
じゃぁ、bccかgccの質問でもしようか。
0188デフォルトの名無しさん05/01/25 02:00:12
ウンコな質問にしとけ
0189デフォルトの名無しさん05/01/25 07:12:36
>>183
それが最近はそうでもないんだなー
0190デフォルトの名無しさん05/01/25 08:43:20
typedef void (__closure *METHOD_PTR)(void);
void sage(void);
METHOD_PTR hoge;

hogeにsage関数のポインタを代入したいのですができますか?
0191デフォルトの名無しさん05/01/25 08:46:12
できますよ
hoge=(METHOD_PTR)sage
0192デフォルトの名無しさん05/01/25 09:13:58
>>191
>エラー E2031 xx.cpp 8: 'void (*)()' から 'void (* (_closure )())()' へのキャストはできない(関数 main() )
と出てコンパイルできませんでした><

#include <stdio.h>

typedef void (__closure *METHOD_PTR)(void);
void sage(void) { printf(" test "); }

main() {
METHOD_PTR hoge;
hoge = (METHOD_PTR)sage;
hoge();
}
0193デフォルトの名無しさん05/01/25 09:37:47
そこら辺に落ちてるフリーのバイナリエディタとかって
1バイトごとに空白入ってるけど空白にキャレットが移動しませんよね?
あれってどうやればできるんですか?
0194デフォルトの名無しさん05/01/25 09:54:16
SetCaretPos
0195デフォルトの名無しさん05/01/25 17:02:44
ツールバーを設置すると、TextOutなどで表示する時、
ツールバーの領域も含めた位置になってしまいます。
差し引いた分の位置に表示したいのですが、
表示する度にツールバーの幅分を足さなくても、
自動で計算してくれるやり方を教えてください。
0196デフォルトの名無しさん05/01/25 17:04:52
日本語を学ぶ
0197デフォルトの名無しさん05/01/25 17:07:25
>>195
初めからツールバーの幅を見越して位置を指定しろ。
0198デフォルトの名無しさん05/01/25 17:08:24
>>195
子ウィンドウ作って、ツールバーと重ならないように配置しろ
019919505/01/25 17:10:01
>>196
おかしな文章ですいません。

>>197
それしかないんですかね。猫でもそうしているようですし。
ウィンドウの名前の部分は、自動で差し引いているようなので、
似たような物があるのかなと思ったのですが。
020019505/01/25 17:11:38
>>198
調べてやってみます。
0201デフォルトの名無しさん05/01/25 17:24:44
>199
SetWindowOrgEx,SetViewportOrgEx

国内人材は有限だ。企業外の教育システムを見直して、猫が猿を教える状況をどうにかしろ!
何で無職が在職を教えねばならんのだ!
020219505/01/25 17:39:30
>>201
できました。ありがとうございました。
0203デフォルトの名無しさん05/01/25 17:58:42
こんにちは。

InvalidateRectで、更新する領域を指定しますが、
その指定した領域を取り出す方法はありますか?

もちろん、こちら側で指定したRect領域ですから、自分が知ってて当然なので取り出す必要はないのはわかってますが、
システム側に登録されている更新領域を知りたいのです。
Get〜みたいな関数は用意されていないのでしょうか?

ご返答いただけると助かります。
0204デフォルトの名無しさん05/01/25 18:01:49
GetUpdateRect/Rgn
0205デフォルトの名無しさん05/01/25 18:31:43
リッチエディットコントロールの基本フォント?を変更しようと
親ウインドウのWM_CREATEにて
SendMessage(hWnd, EM_SETCHARFORMAT, 0, lpCharformat)
のような感じでフォントを変更してみましたが、変更したコントロールに文字(直接入力)を打ち込むと
変更されていない状態で入力されてしまいます。

そのまま日本語入力に切り替えて、何か打ち込むと指定したフォントで入力され、
また直接入力に切り替えて入力すると、フォントの変更が有効?になり、最初とは違うフォントで入力されてしまいます。

リッチエディットやフォントの使用法に誤りがあると思うのですが、どうしてもよくわかりません。
ご教授をお願いいします。(´・ω・`)
0206デフォルトの名無しさん05/01/25 19:52:04
>205
確か
SetWindowFont@<windowsx.h>
か段落書式を設定だったかな
0207デフォルトの名無しさん05/01/25 19:53:15
wParamに何か入れれば良さそうも気がするが、試したことないので責任はもたぬ
0208デフォルトの名無しさん05/01/25 20:24:35
>>205
> SendMessage(hWnd, EM_SETCHARFORMAT, 0, lpCharformat)

の hWnd はリッチエディットコントロールのウィンドウハンドルになってる?
0209デフォルトの名無しさん05/01/25 21:08:45
>>205
よくわからんけどアプリケーション初期のときに
InitCommonControlsEx で新しめのRichEditを要求しといて、
SendMessageのwParamにはちゃんとSCF_DEFAULTを渡せばいいんじゃない?
0210デフォルトの名無しさん05/01/25 21:53:05
EM_SETCHARFORMATはバグ持ちだった気がする
0211デフォルトの名無しさん05/01/26 02:16:33
> ご教授をお願いいします。(´・ω・`)

ご教示、だよな。
0212デフォルトの名無しさん05/01/26 02:32:38
>211
http://dictionary.goo.ne.jp/search.php?MT=%B6%B5%BC%F8&kind=&mode=0&jn.x=26&jn.y=12
0213デフォルトの名無しさん05/01/26 03:31:23
>>211
プ
0214デフォルトの名無しさん05/01/26 03:41:07
>>205,211-213
http://www.tt.rim.or.jp/~rudyard/torii009.html

>>211が正解。>>212,213は痛い。
0215デフォルトの名無しさん05/01/26 04:41:29
localtime, timeに相当するWin32APIは何になるのでしょうか。
今日の日付を"2005/01/26"のような文字列に変換したいのですが。
0216デフォルトの名無しさん05/01/26 05:24:54
GetLocalTime() を使う。


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

int main()
{
SYSTEMTIME st;
GetLocalTime(&st);
printf("%4d/%2d/%2d %2d:%2d:%2d.%03d\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wMinute, st.wMilliseconds);
puts("Hit Any Key.");
getchar();
return 0;
}
0217デフォルトの名無しさん05/01/26 07:12:36
全角の文字を含む文字列をlstrlenすると正しい文字数が返ってこないことがあります。
どうすればよいでしょうか?
0218デフォルトの名無しさん05/01/26 07:23:57
きょうじゅ(ケウジュ)【教授】
1 ―する 学問・技芸を一定の順序で教える△こと(人)。
用例・作例
個人―・出張―・―料
2  〔大学や高等専門学校などで〕教育や研究に従事する人の中で、最上の職階。
用例・作例
―会・名誉―

別に「ご教授ください」でもおかしくない。
0219デフォルトの名無しさん05/01/26 07:25:06
他スレでも教授にたてついてる奴いたけど同じ奴だろうな。
痛い痛い・・・
0220デフォルトの名無しさん05/01/26 07:27:51
>>214
つか、そのリンク先はなんか意味あるの?
ただの個人の基地外野郎のサイトにしか見えないんだけど。
引用するときは信頼できるソースを頼むよ。
0221デフォルトの名無しさん05/01/26 07:34:36
>217
#define UNICODE
0222デフォルトの名無しさん05/01/26 07:52:40
>219
人の論文を盗む教授なんて殺しても良いんだよ
0223デフォルトの名無しさん05/01/26 07:54:13
>219
人違いだ。ID見ろ、ぼけ
0224デフォルトの名無しさん05/01/26 09:01:17
>>216
いたたたた……
0225デフォルトの名無しさん05/01/26 09:29:35
>216
SYSTEMTIMEの解説読め
0226デフォルトの名無しさん05/01/26 10:16:49
ファイルc:\foo.txtがあってExplorerから右クリックしたときのコンテキストメニューを
自前のプログラムから表示させるのってどうやるの?
0227デフォルトの名無しさん05/01/26 11:58:50
>>226
こんなん?英語の資料しか知らんし、自分では試してもいないけど・・・
ttp://www.codeguru.com/Cpp/COM-Tech/shell/article.php/c4505/
0228デフォルトの名無しさん05/01/26 12:15:45
>>223 (°Д°)ハァ? 何処にIDが?
0229デフォルトの名無しさん05/01/26 14:01:27
↑
IDの見方知らない人
0230デフォルトの名無しさん05/01/26 14:05:18
そうだな、見えないやつはアフォだし。
0231wonapi05/01/26 15:39:28
WinDDK, VDM, UN*X/Linux dev, BTRON dev, syscallのいずれかに詳しい人連絡下さい。タスクを与えます。

[email protected]
0232デフォルトの名無しさん05/01/26 15:42:18
ここで、金の相談しよう。俺なら、10000円だな取り合えづ、米か食べたい
次の方、いらっしゃいますか
0233デフォルトの名無しさん05/01/26 16:04:55
>>231
金くれ
0234デフォルトの名無しさん05/01/26 17:38:13
XPの互換モードを見破る方法って無いですか?
0235デフォルトの名無しさん05/01/26 17:40:03
>>234
5.0+0.1
以下はだめで良いじゃん?
0236デフォルトの名無しさん05/01/26 17:41:20
MFCを勉強し始めたのですが、
MFCが使えたら、WindowsSDKってほとんど必要ないんじゃないの?
ってぐらい便利で開発しやすいと思うのですが、
実際のwindowsアプリケーションの開発現場ではどうなのでしょうか?
0237デフォルトの名無しさん05/01/26 17:48:41
げーツに反抗するやつがキター、良いかも、でもニュートンの法則知らない
0238デフォルトの名無しさん05/01/26 17:52:37
>>236
何の開発かによるだろ。
0239デフォルトの名無しさん05/01/26 17:54:47
>>238

つまり開発によっては、両方を使い分けるってことですか?
使用頻度としては5分5分?
0240デフォルトの名無しさん05/01/26 17:58:38
ゲーしは技術系じゃない
0241デフォルトの名無しさん05/01/26 18:02:16
>>239
ゲームの開発・ネットワークシステムの開発・アプリの開発…PCソフトの開発・PCを使って組み込みソフトの開発……全部同じと?
0242デフォルトの名無しさん05/01/26 18:06:05
SDKという言葉を検索して
>あるテクノロジー(プログラミング言語やAPIなど)を利用して
>ソフトウェアを開発する際に必要なツールのセット。
と書いてあったのですが、
この「ツールのセット」とは何でしょうか?
0243デフォルトの名無しさん05/01/26 18:11:03
>>242
ツールの意味は分かる?
セットの意味は分かる?
0244デフォルトの名無しさん05/01/26 18:26:22
>>236
MFCはそこそこ便利なんで、ウィンドウのハンドリングとかはATLかMFCで書くことが多いなー。
でもWindowsの機能の大半はMFCがカバーしていないわけで、SDK直に呼び出さないと
ならないケースって山ほどあると思うけど。
0245デフォルトの名無しさん05/01/26 18:40:00
SDKという言葉を検索して
>あるテクノロジー(プログラミング言語やAPIなど)を利用して
>ソフトウェアを開発する際に必要なツールのセット。
と書いてあったのですが、
この「ツールのセット」とは何でしょうか?
0246デフォルトの名無しさん05/01/26 18:50:42
>>245
ツールの意味は分かる?
セットの意味は分かる?
0247デフォルトの名無しさん05/01/26 18:52:24
ツールセットは、開発者が苦労の末残した、本来のシステムは
より貴重なもの
0248デフォルトの名無しさん05/01/26 19:04:31
SDKという言葉を検索して
>あるテクノロジー(プログラミング言語やAPIなど)を利用して
>ソフトウェアを開発する際に必要なツールのセット。
と書いてあったのですが、
この「ツールのセット」とは何でしょうか?
0249デフォルトの名無しさん05/01/26 19:07:34
>>246
0250デフォルトの名無しさん05/01/26 19:58:59
MSDKは糞、金取ってないから文句言えない、
0251デフォルトの名無しさん05/01/26 20:07:18
文句言えるのは、XPUSERだけだな
0252デフォルトの名無しさん05/01/27 00:02:03
多くの国内企業は契約時の守秘義務で縛られ、公開情報をそのまま流せない。個人の技術所有権を認めない。ソースさらすヤツは入社させない。
その結果、国内ではwinapiやCOM、ネットゲームなどの最新の開発技術情報は入って来ない。
しかも英語ができないで馬鹿なアンシャンレジームの官僚どもが古い技術(CASLとかN88-BASIC)で教育システムを敷いているのに、勇壮たる国内企業はこれから起こる急激な人材不足に何の用意もしていない。

このままではお前らの情報技術は死滅してしまうぞ! 糞ジャップの売国奴どもめ!
0253デフォルトの名無しさん05/01/27 04:16:32
scrnsave.hにはhMainInstanceが externされていますよね?
ってことは、参照するために実態がなきゃいけないと思うんですけど、
それはどこに宣言してあるんですか? 不思議で仕方ないです。
0254デフォルトの名無しさん05/01/27 07:04:15
パーシステンスオブジェクト
0255デフォルトの名無しさん05/01/27 07:11:24
>>252
どうかしたの?
0256デフォルトの名無しさん05/01/27 08:40:30
>253
scrnsave.cか.cpp探せ
0257デフォルトの名無しさん05/01/27 08:46:37
>>229(°Д°)ハァ? 何処にIDが?
0258デフォルトの名無しさん05/01/27 09:04:54
>>257
君以外はみんな見えてるよ
0259デフォルトの名無しさん05/01/27 11:03:52
Windowの位置を取得するのにGetWindowRectを使うのはまずいでしょうか?
なにやら正常な値が取れない環境があるみたいなのですが
0260デフォルトの名無しさん05/01/27 11:11:51
>259
IsWindow
GetWindowRect(hwnd,&rc)の返値チェック
GetClientRect(hwnd,&rc)
GetWindowPlacement
0261デフォルトの名無しさん05/01/27 11:41:07
>>258
(°Д°)ハァ?
0262デフォルトの名無しさん05/01/27 12:00:32
ハァハァ..
 ハァハァ..


0263デフォルトの名無しさん05/01/27 12:02:29
>>258
自分の周りの2,3人が当てはまるだけで「みんな」と
表現する奴っているよね。
0264デフォルトの名無しさん05/01/27 16:03:44
>>253
scrnsave.libにコンパイルされて入ってるんじゃないの
0265デフォルトの名無しさん05/01/27 16:53:40
IMEのメッセージをマイプログラムで追跡しました。
例えば、IMEで、"おい"と入力して、変換して、"甥"として、
ここから続けて、"あ"と入力すると、IMEメッセージは、
WM_IME_COMPOSITION が発行されて、lParamに、GCS_COMPSTR が入っており、
ここから、ImmGetComposition() を使うと、"あ"が取得され、以前の文字は消えてます。
ということは、それまでの文字はキャンセルされてると思われる。

やっぱだめじゃん?
0266デフォルトの名無しさん05/01/27 17:27:08
>265
IMEのサンプルコード探せ。
メッセージの聞き方が間違い。
WM_IME_*をマニュアルで見ろ。
GCS_RESULTSTRは?
0267デフォルトの名無しさん05/01/27 18:20:09
全てのWM_IME_*をキャッチしたつもりだ。

>GCS_RESULTSTRは?
lParamの値は、0x1BF で、GCS_RESULTSTRは、0x800 だから、
GCS_RESULTSTRは、含まれてないようだが

0268デフォルトの名無しさん05/01/27 18:33:21
サンプルコードをMSDNから下ろせばいいのに。IMEの概要からたどれるはず。
WM_IME_COMPOSITIONでコンテキストに結果を置いたか?
もう一度WM_IME_COMPOSITIONとImmGetCompos~Str~#GCS_RESULTSTRの解説を見ろ 
0269デフォルトの名無しさん05/01/27 19:06:39
MSDNって、VC6に同封されてるあの巨大なハルプファイル?(ウソ
0270デフォルトの名無しさん05/01/27 19:18:37
開発戦略が悪そうだな。

日本語の通るエディタのオープンソース使ってもいいんだぜ
0271デフォルトの名無しさん05/01/27 19:30:09
↑馬鹿発見
0272デフォルトの名無しさん05/01/27 19:48:57
パソコン使える奴はいいよな…
0273デフォルトの名無しさん05/01/27 20:13:10
>268
どこにあるの?
**************ault.asp?url=/library/en-us/intl/ime_9ulh.asp
ここにのってるサンプルじゃないよね?
てか、日本語のMSDNにのってねいよ
0274デフォルトの名無しさん05/01/27 20:25:43
わかった。
GCS_RESULTSTR を使って取得すると、それまでコンポジションにあったSTRが取得され、
GCS_COMPSTRを使うと、新しく入力されたSTRが取得される。
たとえ、lParameがGCS_COMPSTRであっても
0275デフォルトの名無しさん05/01/27 20:30:07
あと、漢字入力でスペースを入力したときなんだが、
WM_IME_COMPOSITION が発行されないのはなんで?
0276デフォルトの名無しさん05/01/27 20:38:21
WM_IME_CHARで判断しときなさいってことじゃないの?
よくわからんけど。
0277デフォルトの名無しさん05/01/27 21:01:13
>273
当たり前だ。日本人向けに情報を流すわけないよ。慈善団体じゃないんだから。裏でぐぐって30秒で見つけろよ
0278デフォルトの名無しさん05/01/27 21:11:56
>>273
高卒?
0279デフォルトの名無しさん05/01/27 21:20:32
小中退です。
0280デフォルトの名無しさん05/01/27 23:22:10
なんだ。俺の勝ちか
0281デフォルトの名無しさん05/01/27 23:59:51
英語できない漏れは負け組みですか?(゚∀゚)
0282デフォルトの名無しさん05/01/28 00:04:34
なことは無い、日本語できないやつよりはまし
0283デフォルトの名無しさん05/01/28 08:16:26
そこら辺に落ちてるフリーのバイナリエディタとかって
1バイトごとに空白入ってるけど空白にキーボードフォーカスが移動しませんよね?
あれってどうやればできるんですか?
0284デフォルトの名無しさん05/01/28 08:35:14
>>283
エディットコントロール使わずに
独自に表示・入力受付のコードを書いてるんだろう
0285デフォルトの名無しさん05/01/28 08:36:49
>>193
> 193 :デフォルトの名無しさん :05/01/25 09:37:47
> そこら辺に落ちてるフリーのバイナリエディタとかって
> 1バイトごとに空白入ってるけど空白にキャレットが移動しませんよね?
> あれってどうやればできるんですか?
0286デフォルトの名無しさん05/01/28 08:37:06
X座標を調べて、空白の所に移動する場合は2マス移動とかしてんじゃね?
0287デフォルトの名無しさん05/01/28 08:39:20
>283をほかでも見た気がするが…
0288デフォルトの名無しさん05/01/28 13:10:21
>>287
おまいは2レス前も読めないのか?
0289デフォルトの名無しさん05/01/28 15:21:32
>>288
だから、2レス前で見たと言ってるんじゃないかな?
0290デフォルトの名無しさん05/01/28 15:34:16
タスクバーの色を変えるapiありますか?
0291デフォルトの名無しさん05/01/28 15:36:41
MSDN の SetProp の説明で、
> Before a window is destroyed,
> an application must remove all entries
> it has added to the property list.
とあるのですが、RemoveProp しないままだとどういう害がありますか?
(SetProp で追加したデータが何らかの後始末が必要なものだった場合
(例えば malloc に対する free) は別として)
0292デフォルトの名無しさん05/01/28 15:41:23
逆にRemovePropしねーとSetPropしたHANDLEが握られたままだから
解放できねってことじゃねーのかな。
だから、弊害はそのHANDLEによるんじゃねーか。
0293デフォルトの名無しさん05/01/28 16:21:56
>290
Hookでタスクバーのプロックに寄生
0294デフォルトの名無しさん05/01/28 16:29:12
>>293
初心者なので言ってる意味がわかりません
0295デフォルトの名無しさん05/01/28 16:45:08
>>290
SetSysColors()
0296デフォルトの名無しさん05/01/28 16:51:24
>294
システムカラーを変える場合、
int i=COLOR_3DFACE;
DWORD dw=RGB(赤,緑,青);
SetSysColors(1,&i,&dw);

システムカラーを変えないでタスクバーのみを変えたいなら、SetWindowsHookExの使い方を学べ
029729005/01/28 16:58:11
>>296
どうも。ここは随分親切なインターネッツですね。俺様から貴様へのアドバイスとしては命令口調やめろ糞ボケと。以上
0298デフォルトの名無しさん05/01/28 17:02:41
>297
古い携帯から書いてると字数制限が
0299デフォルトの名無しさん05/01/28 17:05:03
システムカラーを一介のアプリケーションごときが勝手に変えるなヴォケ
0300デフォルトの名無しさん05/01/28 17:11:34
300get
0301デフォルトの名無しさん05/01/28 17:34:25
>>290
WM_NCPAINTのイベントハンドラを自分でつくる
0302上05/01/28 17:34:40
でぶが
030330105/01/28 17:48:07
>>290
すまん適当すぎる答えだった
ここでも参考にしてくれ↓
ttp://hp.vector.co.jp/authors/VA016117/bmpcap1.html
030429105/01/28 17:58:07
>>292
SetProp で追加したデータ自体はどうでもいいのです。
>>291 で引用したように、ああいう注釈がある以上、
RemoveProp しなければ何らかの問題が起こるのではないか、
起こるとすればそれはどのようなものかが知りたいのです。
0305デフォルトの名無しさん05/01/28 18:22:48
>304
Window Properties Overview見て勉強
030629105/01/28 18:28:07
>>305
既に読んでます。
それに MSDN や他を探しても解らなかったのでここで聞いている次第です。
030729105/01/28 18:28:36
s/解らなかった/見つからなかった/
0308デフォルトの名無しさん05/01/28 18:30:58
>>305
知らないならスルーしとけば?質問自体下らないしさ。
0309デフォルトの名無しさん05/01/28 19:20:06
>>306
MSDNになかったらM$の開発者に訊くしかないんじゃない?
0310デフォルトの名無しさん05/01/28 19:26:27
SetPropの解説に載ってたゼ。Removeしなさいと
0311デフォルトの名無しさん05/01/28 19:38:29
>>310
それははじめから知ってるだろ
0312デフォルトの名無しさん05/01/28 19:41:54
その頭でthread local objectが理解できると思えん
0313デフォルトの名無しさん05/01/28 20:34:35
>>304
あんまりよく知らんが、システムリースの無駄な消費が起こるんじゃない?
派生的に色々な問題が起こるだろ。
0314デフォルトの名無しさん05/01/28 20:53:02
別スレッドからでも別プロセスからでも参照できるから、TLSではないと思うが。
0315デフォルトの名無しさん05/01/28 22:05:38
>>313
システムリースってなんですか?
0316デフォルトの名無しさん05/01/29 02:09:39
借りシステム
0317デフォルトの名無しさん05/01/29 12:49:28
MIDI演奏エンジン実装の為にms単位でイベントを起こせるタイマを実装したいのですがどのような方法があるのでしょうか?
イメージとしてはSleepのような感じです。
WM_TIMER系は精度が洒落にならないので除外の方向でお願いします。
0318デフォルトの名無しさん05/01/29 12:55:19
>>317
マルチメディアタイマー
031931705/01/29 13:05:44
>>318
さすがにそれは分かってます。
イベント発生間の待機方法(前回のイベント発生から数ms待機してイベント再発生とか)が思い浮かばないのです。
0320デフォルトの名無しさん05/01/29 13:14:08
>>317
Sleepでよいなら、Sleep使えば?
timeBeginPeriod(1) すれば、1ms精度で寝られるが?
0321デフォルトの名無しさん05/01/29 13:53:30
>>202
そうです。メモリマップドファイルなら使ったことがあるので
似たようなクラスとかがあれば一番いいのですが、やりたい
ことは、プロセス間通信です。
CreateFileMappingで作ったMMFの一覧表示ってできますか?
0322デフォルトの名無しさん05/01/29 14:27:08
>>321は誤爆です。すいません・・・
032331705/01/29 14:48:34
>>320
こんな感じですか?
while(true) {
 timeGetTime(); //経過時間計測
 Sleep(1); //ウェイト
}

それと、Sleep(1)をSleep(0)やPeekMessage、DispatchMessageでやる実装って問題はあるのでしょうか?


0324デフォルトの名無しさん05/01/29 14:53:33
別スレでやったほうがよくね?
0325デフォルトの名無しさん05/01/29 15:22:33
wisdomで勉強中なんですが、
たまに、明示的なキャストが必要とでてくるのですが
キャストせずにすむ設定などはないのでしょうか?
0326デフォルトの名無しさん05/01/29 15:26:33
>>325
コードの実例みせてちょ
0327デフォルトの名無しさん05/01/29 15:30:57
>>323
そのコードで何がしたいのか教えて欲しい。
第一、どれくらいの精度が欲しいのさ。
0328デフォルトの名無しさん05/01/29 15:36:27
>>326
static HBITMAP hBMP, hBMPOLD;

hBMP = CreateDIBSection(hdc, &biInfo, DIB_RGB_COLORS, (LPVOID)(&lpPixel), NULL, 0);

CreateDIBSection'
'void*' から非 'void' 型への変換には明示的なキャストが必要です。

となってしまうのですがこれは(HBITMAP)とかを、たせばいいんでしょうか
0329デフォルトの名無しさん05/01/29 15:42:29
明示的なキャストが必要
て書いてあるだろ
0330デフォルトの名無しさん05/01/29 15:51:02
>>328
CreateDIBSection()はHBITMAP型を返すはずだが
なんでそんなエラーがでるかな・・・???
0331デフォルトの名無しさん05/01/29 15:53:58
>>328
hBMP っていう名前の変数が複数あるとか、なんか変数宣言とかに原因がありそうな・・・
0332デフォルトの名無しさん05/01/29 15:58:18
>>328
STRICTマクロが定義してあると、ハンドルは構造体のポインタになって、
明示的なキャストが必要になる。
winnt.h参照。
0333デフォルトの名無しさん05/01/29 16:00:17
>>330-331
もうお前ら答えなくていいよ。
0334デフォルトの名無しさん05/01/29 16:08:26
>>328
CreateDIBSectionの第四引数の型はvoid **だよ。
0335デフォルトの名無しさん05/01/29 16:09:36
>>332
もうお前答えなくていいよ。
0336 ◆utqnf46htc 05/01/29 16:15:27
こんにちは
0337 ◆rqDA/8e1Lo 05/01/29 16:16:09
さようなら
0338 ◆USIWdhRmqk 05/01/29 16:23:10
こちこちこっちん
0339 ◆u47L8X93Gk 05/01/29 18:51:24
こっちんこっちんこっちんこっちんこっちんこっちん
0340デフォルトの名無しさん05/01/29 19:40:08
システムメニューとウィンドウ右上のボタンについて質問です。

1.WM_SYSCOMMANDで
  SC_MINIMIZE(最小化)、SC_MAXIMIZE(最大化)を
  特定の大きさになるように操作していますが、
  DefWindowProcを通さないためか、
  右上のボタンが変更されません。
  ※WM_SIZEでサイズ変更を試みたのですが、
   どうも最小化最大化のフラグがあるようで、
   うまくいきませんでした。

2.上記に関連して、システムメニューの
  元に戻す、最小化、最大化を状態変更したいのですが、
  グレー状態←→許可状態の変更ができません。
  ※DeleteMenuで項目を消すことはできます。

以上、解決方法があれば教えていただけないでしょうか?
0341デフォルトの名無しさん05/01/29 20:10:51
>>340
ShowWindowでSW_MAXIMIZEした後、目的のサイズにリサイズするとか。
034231305/01/29 20:11:13
>>315
素で書き間違いだ。
システムリソース!
0343デフォルトの名無しさん05/01/29 20:57:27
>>341
ありがとうございます。その方向で行きたいと思います。

最小化の動作は回避できそうにないので、
ウィンドウスタイルで無効にすることにします。
最大化の動作は一瞬タイトルバーが伸びてしまうのを、
気にしないようにすることにします。
0344デフォルトの名無しさん05/01/29 21:51:32
>>340
1.
WM_GETMINMAXINFO を独自に処理してやれば
ウィンドウを目的のサイズに制限はできるよ

0345デフォルトの名無しさん05/01/29 23:03:14
お尋ねしたいことがあるのですが、

CreatePen(PS_SOLID, 0, 色)

と

lb.lbStyle = BS_SOLID;
lb.lbColor = 色;
ExtCreatePen(PS_COSMETIC | PS_SOLID, 1, &lb, 0, NULL);

の結果って異なるものでしょうか?
0346デフォルトの名無しさん05/01/30 01:48:45
Cのexit, _exitに相当するAPIはありますか?
0347デフォルトの名無しさん05/01/30 01:57:13
>>323
超ナンセンス

そもそも、待機ループ用スレッドをマルチメディアタイマ関数が提供している。
timeSetEvent()呼び出しによって最高優先度スレッドが生成され、
そのスレッド内でループが実行される。車輪の再発明をする意味なし。
自分でループ用スレッドを使ったら、スレッドと同期するための仕組みがさらに必要になるだろ?
0348デフォルトの名無しさん05/01/30 01:57:59
>>346
PostQuitMessage
0349デフォルトの名無しさん05/01/30 02:07:49
ExitProcess
0350デフォルトの名無しさん05/01/30 10:10:18
>>347
わーすごーい。



プッ
0351デフォルトの名無しさん05/01/30 12:04:53
いやそのとおりでは?
0352デフォルトの名無しさん05/01/30 12:34:43
>347
職場の先輩に恵まれていないとこういう考えになっちゃうんだろうなぁ。
まぁ気づかなければバレるまで問題にはならないから
なんとかなっちゃうかもしれないけどね。
0353デフォルトの名無しさん05/01/30 14:39:06
元々MIDI再生エンジンの話だよな>>317のやりたい事って
これを自分で実装する(MCIとか使わない)人って何使ってるの?
マルチメディアタイマー?
自前のメッセージループでタイマー?
他?

ソフトウェアMIDIキーボードとかだと押されたタイミングで音出せば良いだけだけど、再生だとどうしてるんだろ?
0354デフォルトの名無しさん05/01/30 17:35:36
ウインドウにメニューがその時点で付いているかを確認するには
GetMenuが0を返すかで判断していいのですか?
GetMenuは子ウインドウの場合は戻り値が未定義と書いてあってちょっと不安・・
他に正しい確認方があるのでしょうか?
0355デフォルトの名無しさん05/01/30 17:43:51
>>354
子ウィンドウはメニューを持てないから、子ウィンドウかどうかを先に確かめればいい。
0356デフォルトの名無しさん05/01/30 17:46:45
>>353
ふつうマルチメディアタイマー
0357デフォルトの名無しさん05/01/30 18:12:01
>>355
ありが�d それでやってみます。
0358デフォルトの名無しさん05/01/30 18:37:31
>>356
そか。サンクス。
俺も気が向いたら作ってみようかな。
0359デフォルトの名無しさん05/01/30 21:26:38
画像の色をだんだん薄くしていって、だんだん透過させるAPIはないですか?
0360デフォルトの名無しさん05/01/30 21:35:07
>>359
ない
0361デフォルトの名無しさん05/01/30 21:50:20
GDI+
0362デフォルトの名無しさん05/01/30 22:12:28
>>359
もしかして、これのこと?
http://msdn.microsoft.com/library/en-us/dnwui/html/layerwin.asp
0363デフォルトの名無しさん05/01/30 23:03:42
>>359
参)アルファ・ブレンド
ttp://hp.vector.co.jp/authors/VA016117/assem/alpha.html
0364デフォルトの名無しさん05/01/30 23:21:42
ttp://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_alphablend.asp

つーか、まんまな名前のAPIあるけどな。
0365デフォルトの名無しさん05/01/31 00:15:22
画像の色をだんだん薄くしていってだんだん透過させる
って言ってるから、単に半透過させるだけじゃだめなんじゃない?
0366デフォルトの名無しさん05/01/31 00:19:00
なにいってる
0367デフォルトの名無しさん05/01/31 00:21:42
画面切り替えでしょ。
タイマーで透過率を変えていくとか
0368デフォルトの名無しさん05/01/31 00:58:26
メッセージ駆動型アプリを理解できてないヤシが
一連の質問を連投しているように見えて仕方ない。

タイマーと透過に関する質問は同一人物か、ひょっとして?
0369デフォルトの名無しさん05/01/31 01:09:07
自動的に画像の色をだんだん薄くしていってだんだん透過してくれないと困るんです
0370デフォルトの名無しさん05/01/31 01:48:58
>>362 英語読めないんで雰囲気としてしか分からないんですが、これはウィンドウを透過
させるやつですよね。でも、参考になりました。

>>363
>>364
アルファブレンドっていうんですか。
覚えておきます。
僕だって、メッセージ駆動型ぐらい理解できてますとも!
ありがとうございました。
0371デフォルトの名無しさん05/01/31 02:09:59
薄くなると同時にメッセージもだんだん透過していったら面白い。
0372デフォルトの名無しさん05/01/31 02:35:47
グローバルフックのみで、メッセージを受け取っているソフトに対し、
メッセージを投げるには、どうしたらいいのでしょうか?
0373デフォルトの名無しさん05/01/31 03:11:28
>>359 >>362 >>370
日本語はここね
http://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.asp
0374デフォルトの名無しさん05/01/31 05:04:33
最前面にあるウィンドウのパスが欲しいんですが、GetForegroundWindow と
GetWindowModuleFileName を使っても、ちゃんとした値が返ってきませんでした。
どうしたらできるでしょうか?
0375デフォルトの名無しさん05/01/31 05:26:34
デバイスコンテキスト削除する前にペンを削除しちゃいけないって見たんですけど、
やっちゃったら、具体的にどんな危険な事が起こるのですか?
0376デフォルトの名無しさん05/01/31 07:02:55
やってみろ
0377デフォルトの名無しさん05/01/31 07:22:39
削除できなかったと思うぞ。
0378デフォルトの名無しさん05/01/31 07:28:47
普通にmsdnを見さえすれば解決する質問がなされた回数を
取得するAPIってありますか?
0379デフォルトの名無しさん05/01/31 08:00:16
メモリDC
『ビットマップハンドルをメモリDCに選択した場合,メモリDCに最初に選択されていたビットマップハンドルに戻してからメモリDCを解放するのだろうか?。
Microsoftのサンプルプログラムがこのようにしていたからであるが,このようにしていないアプリケーションも多いので,戻さなくても害がないのだろうか?。
調べたところ,戻さないとだめだった。』

ググっていたらこれ見つけましたが、彼、もしくは彼女はどこをどのように調べたか
どなたか検討がつきますか?
0380デフォルトの名無しさん05/01/31 09:29:29
>>379
タスクマネージャで監視しつつ
その動作をループで回してみる

まぁ、数万回も回せば、見なくても分かるんじゃね?
0381デフォルトの名無しさん05/01/31 14:32:39
>>374
GetWindowThreadProcessID 使ってプロセスIDとってそこから取得でたと思う
0382デフォルトの名無しさん05/01/31 15:22:17
OPENFILENAME ofn;
static char szFn[512]="", szFt[512]=""; //ファイル名を格納

ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.hInstance = NULL;
ofn.lpstrFilter = "ビットマップ(*.bmp)\0*.bmp\0\0";
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 1; // フィルターの初期位置
ofn.lpstrFile = szFn; // ファイル名用文字列バッファ
ofn.nMaxFile = 511; // 文字列バッファのサイズ
ofn.lpstrFileTitle = szFt; // ファイルのタイトル用文字列バッファ
ofn.nMaxFileTitle = 511; // 文字列バッファのサイズ
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = "ビットマップを開く"; // タイトル
ofn.Flags = OFN_FILEMUSTEXIST ;//| OFN_HIDEREADONLY;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = NULL;
ofn.lCustData = 0;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = NULL;

if(!GetOpenFileName(&ofn)) return 0;

GetOpenFileNameを上のような感じで使うと、そこではエラーは出なく、
選んだファイル名、パスをちゃんと得られて成功するのですが、
その後にLoadImageで画像を表示しようとすると、NULLが返って来て失敗します。
得たファイル名だけでは無く、それとは関係ない画像ファイルでもです。
原因はどこに考えられるでしょうか。教えてください。
0383デフォルトの名無しさん05/01/31 15:27:02
>>382
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_loadimage.asp
を熟読してみたら?
0384デフォルトの名無しさん05/01/31 15:38:26
>>384
ありがとうございます。調べて見ます。
038538205/01/31 15:39:02
>>383へです。
038638205/01/31 16:09:20
>>383さんにお教えいただいたリンクから、
何が原因でエラーが起こったか調べるAPIがあるのが分かり、
調べた所、「指定したファイルが見つかりません」と出ました。

もしかしたら、パスの位置がGetOpenFileNameを使う事で
おかしくなるのかなと思い、GetOpenFileNameで開くファイルを、
LoadImageで開くファイルと同じパスに置いた所、成功しました。

さらに書くと、実行ファイルの ../ の位置のファイルをGetOpenFileNameで
開いた場合、実行ファイルと同じ位置のファイルをLoadImageで開く時、
実行ファイルのあるフォルダ名/ をファイル名に付ければ成功するという感じです。

原因が分かったので、GetOpenFileNameで変更されたパス?を
元に戻すコードを調べたいと思います。どうもありがとうございました。
0387デフォルトの名無しさん05/01/31 16:28:38
lpstrTitleの方を使ってんじゃねーか?
0388デフォルトの名無しさん05/01/31 16:29:21
じゃない、lpstrFileTitleだ
0389デフォルトの名無しさん05/01/31 16:37:53
レジストリの名前の列挙をしたいのですがうまくいきません

int main(int argc,char **argv){
char subkey[256];
DWORD nu=0,lpcbClass,lpcbName;
long rf=0;
char class[256];
FILETIME FT;
HKEY hkey;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"",0,KEY_READ,&hkey);

while (nu < 5){
rf=RegEnumKeyEx(hkey,nu,subkey,&lpcbName,NULL,
NULL,NULL,&FT);
printf("%u %s %u %u\n",nu,subkey,rf,lpcbName);
nu++;
}


------------------
出力結果

0 HARDWARE 0 8
1 SAM 0 3
2 SE 234 3
3 SO 234 3
4 SY 234 3

なにが原因でしょう?
039038205/01/31 16:42:34
>>387>>388
ありがとうございます。調べて見ます。
0391デフォルトの名無しさん05/01/31 16:47:59
>>389
そこまで表示しといてわからんもんかな…
RegEnumKeyEx() くんが subkey のサイズを知るために、lpcbName に入っ
ている値を参照する。ようするに、RegEnumKeyEx() を呼ぶ前に
lpcbName = 256; が毎回必要。
039239105/01/31 16:53:45
よた話だけど、>>389 で 234(ERROR_MORE_DATA) が返るのは意外だ。
ERROR_INSUFFICIENT_BUFFER じゃないんだね。
039338905/01/31 16:57:17
>>391
ありがとうございます。
馬鹿なのでわかりませんでした
0394デフォルトの名無しさん05/01/31 16:59:38
>>393
自分を卑下するんじゃない。
経験を積めば問題解決のセンスも磨かれるので、がんばれ。
0395デフォルトの名無しさん05/01/31 17:57:23
卑下が読めなかった俺はどうすれば。
0396デフォルトの名無しさん05/01/31 18:00:04
IMEさまに再変換願いだせば?
039737405/01/31 22:31:12
>>381
初めはプロセス情報からファイル名しか取れなくて悩みましたが、
GetWindowThreadProcessID で得たプロセスのモジュール情報から、
ちゃんとフルパスを得ることができました。
どうもありがとうございました。
0398デフォルトの名無しさん05/02/01 01:09:32
SetWindowsHookEx関数について詳しく説明してるサイト教えてください
0399デフォルトの名無しさん05/02/01 01:14:19
あとタイトルバーの色を変えるには第1引数にどのフックタイプを指定するか教えてください
0400デフォルトの名無しさん05/02/01 01:24:24
>>398
MSDN
0401デフォルトの名無しさん05/02/01 01:37:38
WH_CALLWNDPROCでWM_NCPAINTをフックでどうかな。
0402デフォルトの名無しさん05/02/01 08:22:17
>>398
ttp://techtips.belution.com/ja/vc/0026/
ttp://hp.vector.co.jp/authors/VA016117/hook.html
ttp://hp.vector.co.jp/authors/VA016117/spy.html
ttp://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N006.html
0403デフォルトの名無しさん05/02/01 23:04:08
JPEG・PNG等の一般的な画像ファイルから画素を得られる、標準API・DLLは
どの様な物があるのでしょうか。

今まではIJGのライブラリやSUSIEのプラグインを使用させて頂いて
いたのですが、ライブラリは実行ファイルのサイズが膨れあがり、
SUSIEはもうマイナーな様なので、一般的なDLLで読めるなら、もう
素直にそっちを使いたいなぁ・・・
何年か前にぐぐった時は、IE関連のDLLが利用出来ると読んだ様な
記憶があるのですが、今探してみるとそれらしい事が書かれたサイトは
見つかりませんでした。
0404デフォルトの名無しさん05/02/01 23:23:20
GIFとJPEGならOleLoadPictureで読める。
0405デフォルトの名無しさん05/02/01 23:27:56
>>403
IE関連の〜ってのは、多分 OleLoadPicture() かな?
ただ、それだと>>404なのでGDI+かねぇ
0406デフォルトの名無しさん05/02/01 23:50:02
必要なDLLがないと言われちゃうぞ。
040740305/02/02 00:20:25
どもです。
PNGは読みたい所なので、保存も出来るらしいGDI+の方向で逝こうと
思ったのですが、プラットフォームSDKが・・・暫く悩んでみます。
0408デフォルトの名無しさん05/02/02 00:34:02
別にPNGだけならlibpng+zlib組み込んでもいいと思うが。
あとはIE本体をCOM経由で呼びだしてhogeるとか?
0409デフォルトの名無しさん05/02/02 00:40:07
どこで聞けばいいのかわからないのですが…
あるUSB機器を使用しているときに
機器との通信内容をモニタすることはできますか?
0410デフォルトの名無しさん05/02/02 01:25:14
LeadToolなりImageMagickなりを使うとフォーマットに関しては悩む必要がなくなるけど。
多少の加工もできることだし。
0411デフォルトの名無しさん05/02/02 01:28:35
>>407
GDI+ねぇ。
PSDKのダウソ&導入の点で悩むよりはむしろ、
WindowsNT5.0以上でないと動かないという点で悩むべきでしょ。
あと、WindowsUpdateでアップデートされたりする対象なので取り扱い注意。
0412デフォルトの名無しさん05/02/02 01:39:21
>>411
> WindowsNT5.0以上でないと動かないという点で悩むべきでしょ。
今時、問題ねーよ。
0413デフォルトの名無しさん05/02/02 01:41:49
今時XP未満使ってる香具師なんて物好きだけだし
そういう香具師ならGDI+位自分で入れるでしょ
0414デフォルトの名無しさん05/02/02 01:46:12
アーカイバのDLLは実質統一されてるのに、イメージは何で統一されなかったのかなぁ。
0415デフォルトの名無しさん05/02/02 01:47:35
ここは世間知らずの多いスレですね
0416デフォルトの名無しさん05/02/02 01:48:57
多分、一時期susie規格が跋扈してたから規格統一する必要性がなくずるずると…
041740505/02/02 01:50:21
>>411
Win98/Me/NT4.0でも使えるよ。
そもそもGDI+は.NETのグラフィック関係で使われてるから、
少なくとも.NETが動くWindowsでは使える。

WinXPより前のOSだと、インストールしないといけないけどね。
0418デフォルトの名無しさん05/02/02 01:53:18
>>417
> WinXPより前のOSだと、インストールしないといけないけどね。
exeの横にdllを置けばOK。
0419デフォルトの名無しさん05/02/02 02:44:43
>>413
新品のPC買う人でXP以外、って意味ならね。
わざわざ2000入れる人も居るみたいだし
0420デフォルトの名無しさん05/02/02 03:38:24
DirectX で読み込んでみるとか
0421デフォルトの名無しさん05/02/02 07:51:04
SDKでツリービューコントロールについて質問です。
編集可にしたい場合はウィンドウスタイルにTVS_EDITLABELSを付け加えますが、
編集可のアイテムと不可のアイテムを混合させたい場合は
どのようにするのがいいでしょうか?
042242105/02/02 07:58:53
自己解決しました。m(_ _)m
0423デフォルトの名無しさん05/02/02 08:27:51
>>422
せめてどうやったのか書いてくれ
0424デフォルトの名無しさん05/02/02 08:34:46
>>409
ソフトでやるなら、フィルタドライバをかませる
そうでなければ、プロトコルアナライザを使う
042542105/02/02 09:29:13
>>423
親の無いアイテム(ルートのアイテム)のみ編集可能にする場合
下記のような感じでできました。
ですが、一つ問題があって、
TreeView_EndEditLabelNowで編集を強制終了したときに画面がちらつきます。
よく考えてみればラベルの編集可と不可の混合するツリービューを見たことないですし、
もしかするとこの処理は良くないのかもしれません。

case WM_NOTIFY:
  if(wParam == IDC_TREEVIEW){
   ptv_disp = (TV_DISPINFO *)lParam;
   HTREEITEM hTi;
   switch(ptv_disp->hdr.code){
   case TVN_BEGINLABELEDIT:
    // 編集してよいか調べる //
    hTi = TreeView_GetSelection(hTreeView);  // 選択されているアイテムを取得
    hTi = TreeView_GetParent(hTreeView, hTi); // 選択されているアイテムの親を取得
    if(hTi != NULL){
     TreeView_EndEditLabelNow(hTreeView, TRUE); // ルートのアイテムではないので編集処理を強制終了
    }
    break;
   case TVN_ENDLABELEDIT:
    // 編集の結果を反映する //
    TreeView_SetItem(hTreeView, &ptv_disp->item);
    break;
   }
  }
  break;
0426デフォルトの名無しさん05/02/02 10:20:40
タスクマネージャとかで終了させようとしたときに、
操作が拒否されましたと出るようにするにはどうすればいいですか?

勝手に外部から終了されないようにしたいのですが。
0427デフォルトの名無しさん05/02/02 10:49:24
>>426
どんなウィルス作るの?
0428デフォルトの名無しさん05/02/02 10:58:37
まぁ、ウィルスでないにしても拒否しないべきだな。
完全にバグの無いプログラムを書ける自身があれば別だが
0429デフォルトの名無しさん05/02/02 11:00:53
>>428
なるほど、そういう考え方もありますね
0430仕様書無しさん05/02/02 11:18:33
普段は待機していてメモ帳(notepad.exe)が起動したことを

検出するにはどうしたらいいんでしょうか?
・1分ごと(1000ms*60)ごとにチェック
・特定のプロセス名が起動していたら・・・
というところがわかりません。

簡単でしたらwinmain()からお願いします。
AfxMessageBox()程度なのでウインドウを作ったりする必要はありません。
難しかったらMFCでもOKです。


0431デフォルトの名無しさん05/02/02 11:27:59
>>430
>難しかったらMFCでもOKです。
この一文でキサマがどれだけプログラムできないかが
よく分かった。
0432デフォルトの名無しさん05/02/02 11:29:17
>>430
部品だけ教えてやる
SetTimer
KillTimer
CreateToolHelp32Snapshot
Process32First
Process32Next
CloseHandle
0433デフォルトの名無しさん05/02/02 11:38:17
ヘルプで、PSAPIを調べろ。
Enumerating All Processes という項目
(Windows開発 > Windows Development > Windows Base Services >
Performance Monitoring > SDK Documentation > Process Status Helper >
Using PSAPI)
に、ソースコードがそのまんま載ってる。実際にコンパイルして確認した。
0434デフォルトの名無しさん05/02/02 11:42:13
>>430
if (AfxProccessFind("notepad.exe"))
 //見つかった
else
 //見つからない
0435デフォルトの名無しさん05/02/02 11:53:31
>>433
PSAPIはWin9x系未サポートな罠
0436デフォルトの名無しさん05/02/02 12:30:33
>>435
今更Win9x系をサポートする必要あるのかねえ。
やっぱあるかねぇ。
0437デフォルトの名無しさん05/02/02 12:39:07
特殊な場合を除いて9x系は無視して良いと言っても過言ではない。
最近はUnicodeビルドばっかりやってる。
0438デフォルトの名無しさん05/02/02 13:03:43
>>411
既出だけど、gdiplus.dllは再配布可能。

でも初期の版はセキュリティ問題あるので、新しい奴じゃないとダメ。
libpngもセキュリティ関連で似たような経緯あるし、OleLoadPictureに
頼っておいて Windows Update でカタ付けてもらうのが良いような・・
0439デフォルトの名無しさん05/02/02 13:17:59
>>436
95はともかく98-Meは現役で使われてるのがかなりある。
特にMeあたりだとPentium3搭載とかでハードウェア的には全く問題ないわけだし
0440デフォルトの名無しさん05/02/02 13:47:18
うちはもう今年から対応止めた。2K以上は楽だよ
0441デフォルトの名無しさん05/02/02 13:58:34
>>426
「タスクバーにアイコン表示しないようにする」くらいにして
起動してるのを目立たなくしておく、くらいにしといたら?
0442デフォルトの名無しさん05/02/02 14:01:46
たしかデバッガ噛ませると…
結構危険なのでお勧めしないけどね
0443デフォルトの名無しさん05/02/02 14:55:03
うちは9xまだまだ現役。
Unicodeビルドでもlibunicows + unicows.dll使ってるし。
最近unicows.dllの代わりにOpencowsなんてものも出てきたからちょっと期待。
044440905/02/02 14:58:15
>>424
レスthx.
プロトコルアナライザは高くて手が出ないので、ソフトウェア的に行きたかったのです。
今回の場合、USB Monitor というプログラムで目的が実現しそうです。
どうもでした。
044544305/02/02 15:21:15
まちがえた。OpencowsじゃなくてOpencow。
0446デフォルトの名無しさん05/02/02 16:50:28
Wininet APIのInternetSetStatusCallbackでHTTPからのダウンロード状況を知る方法はないでしょうか?
FTPならINTERNET_STATUS_RESPONSE_RECEIVEDにダウンロードサイズが付いてくるようなんですがHTTPの場合来ないようなので‥‥
0447デフォルトの名無しさん05/02/02 16:54:00
NTFSの機能である「ファイルの概要」はどのように
読み書きすればよいのでしょうか。

タイトル、表題、作成者、カテゴリ、キーワード、コメント
等をファイルマネージャで弄りたいのです。
0448デフォルトの名無しさん05/02/02 16:55:02
>>443
すごい、がんばってください、
0449デフォルトの名無しさん05/02/02 17:00:39
>>447
ググったらこれがトップに出てきた。
http://www.geocities.jp/bruce_teller/adsmngr/helpfiles/aboutads.htm
0450デフォルトの名無しさん05/02/02 17:18:22
長い時間が必要な処理をする場合どういう方法が適しているのでしょうか?

思いついたのは、長時間の処理をする為のスレッドを作成するか、
処理の途中で状態を変数に残しておきリターンして
タイマー呼出しで処理を継続する(関数のポインタによる呼出し)
という方法の二つです。
スレッドは使いたくないので後者にするとして、
処理を中断するタイミングや次に処理するタイマーの設定が問題になります。
10ミリ秒処理をすれば一度中断して1秒後に再開とか。
システムに過度の負荷を与えない範囲で、できる限り高効率で実行したいと
なるとどういう数値を指定すればいいのかもわかりません。
処理も結構複雑になりそうですし、他にいいやり方があればと思っています。
0451デフォルトの名無しさん05/02/02 17:22:09
>>446
来ると思うけど・・・
0452デフォルトの名無しさん05/02/02 17:22:32
>>450
スレッド使え。何が嫌なんだ?
それと負荷軽減にはSleep(0);
0453デフォルトの名無しさん05/02/02 17:22:58
>>450
スレッド。使いたくなくてもスレッド。
0454デフォルトの名無しさん05/02/02 18:03:00
>>451
InernetReadFileに渡すバッファサイズが大きすぎて(== ファイルサイズ)来てなかったみたいです。
thx
045545005/02/02 18:13:30
>>452
WSAAsyncSelect を用いたネットワークプログラム(GUI)です。
Winsock は一つのソケットを複数のスレッドで共有出来ないはずなので、
スレッドを利用するとなるとそのソケットの専用スレッドが必要ですよね?
PostThreadMessage を利用すればソケットから読んだデータに応じて
GUI に処理を渡すのは楽なんですが、別の何らかの方法で逆も実装しなければ
いけないのと、ソケットスレッドがその長時間の処理を行ってる最中に、
どうやって読み込み処理をするかが問題になってきます。

スレッドを使わない方法の方は、Sleep(0) で負荷の軽減は出来ましたけど、
長時間の処理をやりながら、なおかつ本来のメッセージ処理も滞りなく
する方法が必要になります。
0456デフォルトの名無しさん05/02/02 18:15:08
Task,または、プロセス、それを細かくしたスレッド、使えよ、
ごるぁ
0457デフォルトの名無しさん05/02/02 18:39:16
wParamとかlParamってなんなんでしょうか?
0458デフォルトの名無しさん05/02/02 18:46:29
>>457
区別は、Win3の互換性だな
0459デフォルトの名無しさん05/02/02 18:48:43
>>455
> GUI に処理を渡すのは楽なんですが、別の何らかの方法で逆も実装しなければ
その逆の流れもPostThreadMessage使えよ。
0460デフォルトの名無しさん05/02/02 19:16:30
>>457
どっちもDWORDで置き換え可能
046145005/02/02 19:19:02
>>その逆の流れもPostThreadMessage使えよ。
スレッド用に不可視のウィンドウですか?

残りの問題は、長時間処理をしている最中に
どうやって読み込んで処理を出来るかなんですが、
>>450 に書いた処理を中断・継続する方法を使えば同様に実装できるとは
思いますが、実装がややこしいのはほとんど変わりません。
特に不可視のウィンドウを使ってメッセージで処理するなら、
スレッドを使わない場合と同じような実装になると考えられます。

>>455 では読みづらかったかもしれませんが、長時間の処理をしている
最中でも、ソケットから来るデータを別途処理しなければなりません。

この場合、スレッドを使うメリットは何かありますか?
0462デフォルトの名無しさん05/02/02 19:51:59
>>461
漏れならこういう設計にする

・UIスレッド
- 通信用スレッドからのイベントに反応
- 通信用スレッドへデータ供給 (Queueや共有するメモリなどで)

・通信用スレッド
- 送るべきデータがあればsend
- 読めるデータがあればrecv。
 アプリケーション的に意味あるカタマリになったらUIスレッドへ通知

・ワーカスレッド
- UIスレッドから指示を受けて動く。
- なにか時間のかかる処理があるならここで。

スレッド間のメッセージのやり取り・同期。待ち合わせはイベント等を使う。
おしまい。
0463デフォルトの名無しさん05/02/02 19:53:43
UIスレッドがデータ供給するのはアフォ設計だな。
ロック中描画が止まる。
0464デフォルトの名無しさん05/02/02 19:55:39
>>463
一般に言ってユーザとのインタラクトの他にどこからデータが発生する?
Queueに貯めとけばいいだけじゃん。
0465デフォルトの名無しさん05/02/02 19:58:47
フックについてわかりやすく説明しているところを教えてください。
0466デフォルトの名無しさん05/02/02 19:59:00
ちがう、スレッドベースだろう?、
0467デフォルトの名無しさん05/02/02 20:10:18
>>466
何を言っているのかさっぱりわからないので詳しくお願いします。
例えばメーラのUIスレッドで「ログイン」ボタンの押下イベントを受けたら、

・UIスレッドはアカウント名とパスワードを特定のメモリに保存して、
 「ログインしろ」と通信用スレッドへ通知 (queueでコマンドを送る/
 stateを変更した後イベントをセットする等)
・通信用スレッドはログイン処理開始。
 成功したり失敗したらUI側へ通知

みたいな流れになると思うんだけど・・・
0468デフォルトの名無しさん05/02/02 20:18:18
一番ユーザーとして嫌いなのが、やった処理が直ぐに取リ消し出来ないこと
分かる?
0469デフォルトの名無しさん05/02/02 20:18:40
ユーザーにテキストボックスを選択させて、sendkeyで文字列を送る
と言う事をしたいのですが、どうしたら良いのかさっぱりわかりません。

とりあえずSpy++のTARGETアイコン(?)のような機能を呼び出す方法を探しているんですが、それが上手くみつからず、、

わかる方がいらっしゃいましたら教えて頂ければ幸いです。
0470デフォルトの名無しさん05/02/02 20:25:00
>>463
例えば>>467の例だと、非UIスレッドが「アカウント名」とか「パスワード」を
どっからか手に入れて供給するのが正しいわけですね。
面倒なので合意しときます。

>>466>>468
何を言っているのかさっぱりわからないので具体的に詳しくお願いします。
っていうか割と由緒正しいこんなスレでも妄想キチ相手にしてる漏れって・・・

通信をステートマシンで実装するのは当たり前だし、
ちゃんと作れば当たり前に中断だってできるだろう・・・
(プロトコルが許す範囲において)
0471デフォルトの名無しさん05/02/02 20:30:30
Queueには確実にmutex(Winとかいうローカル環境限定で言えばCriticalSection)が必要だけど、
そこが混み合ったらどうすんの?しばらくメインスレッドが応答不能になりそうだよ。
0472デフォルトの名無しさん05/02/02 20:33:35
まあ普通は分離するわな
0473デフォルトの名無しさん05/02/02 20:36:33
しをしを、もうだめぽ
047445005/02/02 20:49:32
>>462
長時間占有してなおかつ送受信が必要な処理を想定してたのですが、
それを純粋に分離しちゃった方がいいわけですね。
同期・通信(キューとか)機構をどうするかは考えなくてはいけないけど、
今まで考えてたやり方よりはまだ簡単そうです。
0475デフォルトの名無しさん05/02/02 22:56:24
>>246
もう答え要らんみたいだけど、実行するユーザを工夫するか。
ちょっと違うけど複数プロセスで構成してお互いに監視して再起動でも要件満たす?
ぐらいしか思いつかんかったがどうだろう。
0476デフォルトの名無しさん05/02/03 01:19:48
他のアプリケーションのツールバーを拡張する事って出来るんでしょうか?

具体的にやりたい事は、Beckyのプラグインをつくってるのですが、
そこで、ツールバーにアイコンをひとつ加えたいのです。
0477デフォルトの名無しさん05/02/03 01:29:32
やれない事はない。
0478デフォルトの名無しさん05/02/03 01:55:13
joySetCaptureってjoyGetPosと同じで4つボタンまでしか対応してないんですか?
何か、メッセージ調べてると、どうも0x2を押したときに0x202が送られてきてるみたいなんですが…
こういう場合は、DirectInputを使うかjoyGetPosExを使うしか無いですか?
0479デフォルトの名無しさん05/02/03 03:28:29
>>447
これでも参考にしなさい
http://support.microsoft.com/kb/186898
0480デフォルトの名無しさん05/02/03 04:30:39
>>477
具体的にどうやればいいのでしょうか?
なにか、API名などのヒントだけでも頂ければあとは自分で調べます。
0481デフォルトの名無しさん05/02/03 05:16:12
GetEnumWindow
AddMenu
0482デフォルトの名無しさん05/02/03 07:50:40
>>477
>>481
わかんねーんなら、黙ってろ
てきとーな関数名ならべてんじゃねーよ
0483デフォルトの名無しさん05/02/03 10:30:32
誘導されてきました。

C++ ではなくて C で Windows95 以降用のプログラムを作りたいの
ですが、どの開発環境を使えば出来るのかよくわかりません。
ランタイムライブラリのファイルを 1,2 個入れる程度なら妥協は
出来ますが、.NET Freamwork をインストールするなんて方法は取
りたくありません。
何か方法がありますか?

今思い出したのですが、Quick C for Windows 持っています。
それでいいかも。
代案があればお願いします。
048481705/02/03 10:39:27
>>483
bcc
0485デフォルトの名無しさん05/02/03 11:37:55
Cygwin/MinGW
0486デフォルトの名無しさん05/02/03 11:39:27
lcc-win32

C++に対応してないC専用開発環境。マジオススメ。
048747705/02/03 15:37:58
>>480
フックしてツールバーにボタン追加。コマンド待つ。
寿命が長くなれば危険も増すからお勧めしないけど。
0488デフォルトの名無しさん05/02/03 16:01:29
検索のダイアログとかapiで出せるけど
検索アルゴリズムは自作するしかないの?
0489デフォルトの名無しさん05/02/03 16:12:49
お前が「何の中から」検索したいかはシステムは知らないからね。
0490デフォルトの名無しさん05/02/03 16:22:46
>>488
何を検索したいのか知らんが、とりあえず "Indexing Service"でも使えば?
0491デフォルトの名無しさん05/02/03 16:50:30
ウィンドウスタイル(ウィンドウ拡張スタイル)で、縁無しのウィンドウ(周りに何も境界線とかの表示がない。)を作りたいのですが、
何を指定すればいいのでしょうか?
数時間かけて調べてみましたが、よくわかりません。

すいません。
0492デフォルトの名無しさん05/02/03 17:08:23
ws &= ~WS_THICKFRAME;
0493デフォルトの名無しさん05/02/03 17:08:43
^ WS_THICKFRAME ?
049449305/02/03 17:11:13
orz
0495デフォルトの名無しさん05/02/03 17:12:06
>>461
別にウィンドウなんてなくてもメッセージはやり取りできるし、
そのためにPostThreadMessageはあるんだが……。
049648805/02/03 17:12:12
文字列の検索
0497デフォルトの名無しさん05/02/03 17:13:12
WS_BORDERも含めて完全になにも枠がないウィンドウつくりたいならWS_POPUPのほうが手っ取り早いと思うが。
0498デフォルトの名無しさん05/02/03 17:29:47
任意のアドレスにある命令が実行されたというのを調べるのはどうすればいいのでしょうか?
いわゆるVC++でデバックする時に使うブレークポイントを自分でAPIを使って実現したいのですが。
またその時のレジスタ値を取得するようなAPIはあるのでしょうか?
0499デフォルトの名無しさん05/02/03 17:32:48
WS_POPUPだけにしたら何も出てこなくなったんですけど・・・
タスクバーにはアイコンがあります・・・
0500デフォルトの名無しさん05/02/03 17:33:26
WS_POPUPで試しても
やはり境界(2ドット程度)ができるんですよ。
くぼみっぽいものが。
http://www.geocities.jp/ayana_city/windowstyle.jpg

完全に窪み・縁がないウィンドウはつくれないのでしょうか?

ToolTipの小さいウィンドウみたいな感じのものを作りたいのです。
0501デフォルトの名無しさん05/02/03 17:36:40
ws &= ~WS_THICKFRAME;
0502デフォルトの名無しさん05/02/03 17:36:48
WS_EX_CLIENTEDGEつけてないか?
050350005/02/03 17:38:00
作りたいのは、こういうToolTipみたいなものです。
http://www.geocities.jp/ayana_city/tooltip.jpg

周囲の縁は上記の写真のとおり、一ドットまでならOKです。
0504デフォルトの名無しさん05/02/03 17:39:13
>>496
Win32APIじゃないけど文字列検索ならとりあえずstd::string::findとかstd::strstrとか
0505デフォルトの名無しさん05/02/03 17:39:14
VCならリソースエディタでダイアログ弄って試したら。
0506デフォルトの名無しさん05/02/03 17:42:23
http://www.geocities.jp/ayana_city/windowstyle.jpg
http://www.geocities.jp/ayana_city/tooltip.jpg

このページは準備中です
申し訳ありませんが、このページは現在利用できなくなっています。しばらくたってからもう一度お試しください。ご不明な点があれば、ヘルプをご覧の上、お問い合わせください。
050750005/02/03 17:46:43
DWORD dwStyle;
DWORD dwExStyle;

lpszClassName = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW, hCursor);
dwExStyle = WS_EX_TOPMOST;
dwStyle &= ~WS_THICKFRAME;

return CreateEx( dwExStyle, lpszClassName, _T("タイトルバー"), dwStyle, rect, NULL, NULL, NULL);

だと、縁有りになりますね。
0508デフォルトの名無しさん05/02/03 17:46:54
>>504
それって2バイト文字考慮されてなかった希ガス
0509デフォルトの名無しさん05/02/03 17:48:11
>>500
ttp://forums.belution.com/ja/vc/000/059/84.shtml
0510デフォルトの名無しさん05/02/03 17:48:22
>>507
dwExStyleを初期化せずにdwStyle &= ~WS_THICKFRAME;ですかぁ?
051150005/02/03 17:54:06
いえ、dwExStyle=0として試しましたが、駄目でしたよ。

>>509さん、
それ参照したいと思います。

皆さん、本当にご迷惑おかけして吸いません。
0512デフォルトの名無しさん05/02/03 17:57:17
#define WS_OVERLAPPED 0x00000000L
というのはわりと嵌りやすい罠だな。
0513デフォルトの名無しさん05/02/03 17:58:03
>>507
ウィンドウ作られあとに(WM_CREATEとかの処理の中で)
GetWindowStyle
ws &= ~WS_THICKFRAME
SetWindowStyle
じゃだめ?
0514デフォルトの名無しさん05/02/03 17:59:01
>>512
#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | \
WS_CAPTION | \
WS_SYSMENU | \
WS_THICKFRAME | \
WS_MINIMIZEBOX | \
WS_MAXIMIZEBOX)

ですが何か?
051550005/02/03 18:05:54
BOOL CXSFrameWnd::CreateTest(CWnd* pWnd)
{
LPCTSTR lpszClassName;
CRect rect( 0, 0, 300, 200);
HCURSOR hCursor = ::LoadCursor( NULL, IDC_ARROW);
DWORD dwStyle=0;
DWORD dwExStyle;

lpszClassName = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW, hCursor);
dwExStyle = 0;
dwStyle = WS_POPUP | WS_SYSMENU;
dwStyle &= ~WS_THICKFRAME;

return CreateEx( dwExStyle, lpszClassName, _T("タイトルバー"), dwStyle, rect, NULL, NULL, NULL);
}

やはり、こうなります。(2ドットの縁有り)
http://www.geocities.jp/ayana_city/windowstyle.jpg

orz
051650005/02/03 18:13:05
leftとtopに、2ドットのラインがあるんですよね。
その2ドットは多少の色違いがあるから、窪みがあるように見える。

rightとbottomは一ドットなんですけども。

left top right bottomの四方全て、一ドットの枠にしたいんですが。
0517デフォルトの名無しさん05/02/03 18:16:51
dwStyle = WS_POPUP | WS_SYSMENU;
dwStyle &= ~WS_THICKFRAME;

アフォ?
0518デフォルトの名無しさん05/02/03 18:16:57
MFCの話だとスレ違いじゃねぇかと思うが。
CXSFrameWndがCFrameWnd派生だとすると、段差がついてるのはCXSFrameWndに貼り付けられた子ウィンドウのほうなんじゃねぇか?
0519デフォルトの名無しさん05/02/03 18:20:31
>>500
ttp://homepage2.nifty.com/DSS/VCPP/MFC/Window/Window3DHide.htm
0520デフォルトの名無しさん05/02/03 18:21:06
dwStyle=WS_OVERLAPPED で枠も何も無いけどな。
0521デフォルトの名無しさん05/02/03 18:23:05
やっぱりMFCを使っているとつまらないことで苦労しないとならないのですね。
0522デフォルトの名無しさん05/02/03 18:26:19
たぶん派生元のクラスでCreateされるときに勝手にスタイルが変わる。
ウィンドウが作られたあとにスタイル変更する方が無難。
0523デフォルトの名無しさん05/02/03 18:27:02
32ビット環境でソース互換性の為と思い
SetWindowLongPtrを使用しているのですがコンパイル時に

warning C4244: '引数' : 'LONG_PTR' から 'LONG' に変換しました。データが失われているかもしれません。

となります。

これは私が何か問題のある行動、または足りない設定があるのでしょうか?
それとも単にSDKヘッダの定義ミスで特に問題のない事なのでしょうか?
また、回避策はあるのでしょうか?
できればSetWindowLongPtrの為だけに C4244を#pragmaでオフにすることは避けたいのですが・・・
0524デフォルトの名無しさん05/02/03 18:33:31
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200302/03020161.txt
0525デフォルトの名無しさん05/02/03 18:34:59
>>523
キャストすれば?
0526デフォルトの名無しさん05/02/03 18:41:00
>>523
SetWindowLongPtrの戻り値をLONG/long型の変数に代入しているならLONG_PTRにしろ。
0527デフォルトの名無しさん05/02/03 18:44:29
LONG_PTRって、ポインタのような名前のくせに
実際にはlongか__int64ってのはなんでだろ。
0528デフォルトの名無しさん05/02/03 18:45:43
>>525

SetWindowLongPtrの定義が
LONG_PTR SetWindowLongPtr( HWND hWnd, int nIndex, LONG_PTR dwNewLong );
のようになっているはずでにもかかわらず

INT WINAPI _tWinMain(省略)
{

 LONG_PTR dwNew = 100; // 数値は適当
 SetWindowLongPtr(NULL, 0, dwNew); // 内容は適当
}

のようなコードで上記警告になってしまいます。
052950005/02/03 18:51:33
>>519さん
そのサイトにかかれてある通りに試したら、
縁が無くなりました!

本当にありがとうございました。
0530デフォルトの名無しさん05/02/03 19:27:22
>>528
警告はLONG_PTR dwNew = 100; で出てるんじゃね?
0531デフォルトの名無しさん05/02/03 19:49:33
warning C4244: '引数' : 'LONG_PTR' から 'LONG' に変換しました。データが失われているかもしれません。
0532デフォルトの名無しさん05/02/03 19:50:46
INT WINAPI _tWinMain(省略)
{

 LONG dwNew = 100; // 数値は適当
 SetWindowLongPtr(NULL, 0, &dwNew); // 内容は適当
}
0533デフォルトの名無しさん05/02/03 20:33:02
http://www.kumei.ne.jp/c_lang/sdk/sdk_00.htmのコードをビルドしたいのですが、

c:\source1.cpp(20) : error C2440: '=' : 'HGDIOBJ' から 'HBRUSH' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
c:\source1.cpp(43) : warning C4244: 'return' : 'WPARAM' から 'int' に変換しました。データが失われているかもしれません。

というエラーと警告が出ます。
なぜだか分からないのですが分かる方教えてくれませんか?
MC++2003を使ってます。
0534デフォルトの名無しさん05/02/03 20:41:08
ttp://www.kumei.ne.jp/c_lang/setvc.htm
これの一番下か?
0535デフォルトの名無しさん05/02/03 20:44:13
>>534
あ、そんなところに・・・・
これはどのように治せばいいのでしょうか?
0536デフォルトの名無しさん05/02/03 20:58:34
http://pc5.2ch.net/test/read.cgi/tech/1101022051/726
0537デフォルトの名無しさん05/02/03 21:06:53
myProg.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
0538デフォルトの名無しさん05/02/03 21:11:13
>>537
あ、出来ました
どうもありがとうございました^^
0539デフォルトの名無しさん05/02/03 21:17:24
猫以下だな…
0540523,52805/02/03 21:17:28
>>532
それだとSetWindoLongPtrを使う意味がまるでなくなってしまうような orz

MSのヘッダにミスがあるということで良い気がしてきました(´・ω・`)
0541デフォルトの名無しさん05/02/03 21:57:25
DLLから.libを作成する方法ってありませんか?

あるDLLを静的リンクしたいのですが、DLLだけしかありません。
関数の型はわかってます。
0542デフォルトの名無しさん05/02/03 22:13:27
0543デフォルトの名無しさん05/02/03 22:13:49
なんかライセンス違反の匂いが
0544デフォルトの名無しさん05/02/03 22:15:16
キーボードフォーカスを任意の座標に移動させるにはどうしたらいいか教えてください
0545デフォルトの名無しさん05/02/03 22:18:08
>>541
DEFを書けば、LIB.EXEから作成できる。
0546デフォルトの名無しさん05/02/03 22:27:29
>>544
まさかキャレットの移動じゃないよね?
054754405/02/03 22:38:06
キーボードフォーカス
0548デフォルトの名無しさん05/02/03 22:59:08
>>544
WindowFromPoint()でウィンドウハンドル取って
SetFocus()だとどうだろう
0549デフォルトの名無しさん05/02/03 23:44:26
座標ってことは、

エディットボックスの斜め上あたりにカーソルを存在させる

とか?
かなり無理があると思うが・・・・
0550デフォルトの名無しさん05/02/04 00:13:17
解像度と同じサイズのウィンドウを作ってしまえば出来るぜ。
0551デフォルトの名無しさん05/02/04 07:20:14
OPENFILENAME で 開き
ダイアログが閉じる前に選択されたファイルのチェックを行い
メッセージボックスを表示したいのですが、
どのようにすればよいでしょうか。

CDN_FILEOK だとダメみたいです。。。
0552デフォルトの名無しさん05/02/04 07:48:48
>>551
CDN_FILEOKを受け取った後、FALSEを返してるか?
0553デフォルトの名無しさん05/02/04 09:01:38
はいFALSEを返していますが、閉じてしまいます。。
0554デフォルトの名無しさん05/02/04 10:00:21
開くボタンを消して、それと同じ位置にカスタムボタンを貼り付けるとか…。
0555デフォルトの名無しさん05/02/04 10:17:03
おまえらエスパーか?
あの文で何がしたいか分かるのか?
0556デフォルトの名無しさん05/02/04 10:44:01
エスパーて・・・まだ昭和の人ですかあなたは・・・
0557デフォルトの名無しさん05/02/04 10:54:46
語学力の無い香具師だな。

 ・ダイアログが閉じる前に
  (=ダイアログを閉じないで)

 ・CDN_FILEOK だとダメみたいです。。。
  (=CDN_FILEOKをフックして色々したけど駄目だった)

この程度を文中から読み取れないで、
よくMSDNとか理解できるな。
0558デフォルトの名無しさん05/02/04 11:24:30
APIとは直接関係ないですが、質問させてください。

どのラジオボタンが押されているのかを取得したいのですが、
IDが、IDC_RADIO1 , IDC_RADIO2 , ・・・・・ と並んでいるとして
 SendMessage(GetDlgItem(hDlgWnd, IDC_RADIOx ),BM_GETCHECK, 0, 0)
をforループで回して、 チェックされているラジオボタンを検出したら 
nCheckItem = i  としたらいいのではないか?と思ってます。

ところが、#defineで定義されている最後の数字をFORループの変数に従って
変えるやり方がわかりません。どうしたらいいでしょう?
0559デフォルトの名無しさん05/02/04 11:25:36
具体的にどう書いてダメだったか書いてないな。
CDN_FILEOKの応答を正しく書いてないかもしれない。
0560デフォルトの名無しさん05/02/04 11:28:37
>>556
意味不明
0561デフォルトの名無しさん05/02/04 11:36:10
>>558
int id[] = {IDC_RADIO1,IDC_RADIO2, ・・・・・};
056255805/02/04 12:31:37
>>561 とりあえず解決できました。 ありがとう!!
0563デフォルトの名無しさん05/02/04 12:35:18
>>528
実はこうなっている。
#ifdef _WIN64
(略)
#else
#define SetWindowLongPtrA SetWindowLongA
#define SetWindowLongPtrW SetWindowLongW
#endif
Windows 95から使えるのはこういうわけ
0564デフォルトの名無しさん05/02/04 12:35:53
>>527
「ポインタと同じサイズ」と言いたいのだろう。
0565デフォルトの名無しさん05/02/04 12:47:13
(・A・)
0566デフォルトの名無しさん05/02/04 12:59:32
MFCでダイアログベースのアプリケーションを作成したのですが、
どうやってもダイアログにアイコンを表示できません。
初期のコードにSetIconなどのアイコンを表示するようなコードが書かれているのですが、
なぜ表示されないのでしょうか?
056756605/02/04 13:11:43
すいません、解決しました
0568デフォルトの名無しさん05/02/04 13:39:33
>>567
解決したなら、それはそれで「なぜ表示できていなくて
どうやって解決したか」を語るべきだ。
0569デフォルトの名無しさん05/02/04 13:49:37
そもそもMFCはAPIじゃないだろ
0570デフォルトの名無しさん05/02/04 14:11:46
初歩的な質問になりますが、
現在のマウスの位置を取得するには、どのようにすればいいのでしょうか?
0571デフォルトの名無しさん05/02/04 14:12:48
あと、もう一点。

マウスのLボタンがクリックされているかどうかを調べるWin32関数はありますか?
0572デフォルトの名無しさん05/02/04 14:17:45
CDからWAVを吸い出すツールを作りたいと思ってるんだが・・・。
CDから指定トラックのデータを吸い出すAPIとかってあるの?

知ってる人にはフザけた質問かもしれんが、ちょっとマジで聞いてます。
だれかマジレスお願いします。
0573デフォルトの名無しさん05/02/04 15:01:10
>>570 GetCursorPos
>>571 GetAsyncKeyState
057457005/02/04 15:14:17
>>573
ありがとうございました。
助かります。
057556605/02/04 16:07:38
ダイアログのプロパティにSystem Menuという項目があったので
それをTrueにしたらアイコンが表示されました
これをTrueにしないとアイコンや最大化、最小化が表示されないっていうのを知りませんでした
0576デフォルトの名無しさん05/02/04 16:40:00
CDRip.DLLでも使ってみたらいいんじゃねーの
0577デフォルトの名無しさん05/02/04 17:15:31
ローカル座標とグローバル座標を変換するためには?
どうしたらよいのでしょうか?
0578デフォルトの名無しさん05/02/04 17:34:41
ClientToScreen
ScreenToClient
0579デフォルトの名無しさん05/02/04 18:18:01
ほんと知ってればどうってことない質問ばっかりだよな。
逆引きAPIのすごく細かいサイトとか本あればいいのにねぇ。
金になるならやるんだが。
0580デフォルトの名無しさん05/02/04 18:42:38
SetTimerみたいな関数を自作したい場合って、スレッド使うの?
スレッド→メッセージループ→時間が来たらメッセージ送信
って感じですか?
それとも、別の良い方法がある?
0581デフォルトの名無しさん05/02/04 18:44:01
W2K以上ならスマートな方法あるな。
0582デフォルトの名無しさん05/02/04 18:47:55
いやあるなっていうかそこで書き込みおわりかよ(笑
0583デフォルトの名無しさん05/02/04 18:52:06
いや、サポートすべきOSのバージョンわかんない。
Me以下もサポートしなけりゃならないなら余計な事になるから。
058458005/02/04 18:59:47
>>583
私へのレスですよね
出来れば1xもサポートできる方が良いですが、自分も回りもXPか2000だけなんで、無サポートでも良いです
どんな方法か教えてください。
0585デフォルトの名無しさん05/02/04 19:14:51
>>584
1xって…9xなのか?
それとも…ガクガク
0586デフォルトの名無しさん05/02/04 19:41:25
>>585
スレタイをちゃんと見てる香具師ならそれはないだろう
0587デフォルトの名無しさん05/02/04 19:50:25
Win1.0かぁ、懐かしい、タイルウインドウしか出来なかった。
0588デフォルトの名無しさん05/02/04 20:02:32
>>587
俺も使った
( ゚д゚)ペッ が感想
0589デフォルトの名無しさん05/02/04 20:07:20
>>588
まー、あのころはStarに感動してポケットマネーでGUIを感動した時代だ。
仕方が無い
059069式フリーPG ◆hND3Lufios 05/02/04 20:16:08
286/10MHz〜386/16MHzあたりの時代だからねぇ。。。

まあ、68000の8MHzであれだけのことをやってたMacはたいしたもんだった。
爆弾でまくりだったけど。
0591デフォルトの名無しさん05/02/04 20:16:55
で、>>581は責任持って答えるように。
0592デフォルトの名無しさん05/02/04 20:19:51
スレッドでタイマ作るならWaitFor〜使うのが普通だろ。
0593デフォルトの名無しさん05/02/04 20:21:00
>>592
だったらMe以下でもできるじゃん。
たぶん>>581は俺たちの知らない様なこと知ってる。
期待。
0594デフォルトの名無しさん05/02/04 20:21:02
Lisa使ったことある?超高級Macだった
0595デフォルトの名無しさん05/02/04 20:59:03
キーを押した時の、WM_KEYDOWNに付いての質問です。
連続で押していると、100ミリ秒ぐらいの間隔でWM_KEYDOWNが来ますが、
PostMessageでやると、その間がありません。
どうやれば、ホントにキーを押した感じのような表現が出来るでしょうか。
0596デフォルトの名無しさん05/02/04 21:02:49
少し、演出とか考えろよ。リアルタイムでプログラムが反応する
とか思ってるのはあほすぎ。逆に、システムがユーザーをごまかす
を考えろw、ユーザーが不利にならない範囲でだがw
0597デフォルトの名無しさん05/02/04 21:07:03
>>593
きっとFiberのことでは?
0598デフォルトの名無しさん05/02/04 21:07:22
SendMessage(...);
Sleep(100);
SendMessage(...);
でだめか?
0599デフォルトの名無しさん05/02/04 21:10:53
>>597
Tipかと思った
060059505/02/04 21:11:35
>>596
すいません。

>>598
そういうのも考えていました。私のはSetTimerの方でしたが。
WM_KEYTOUCH、WM_KEYPUSHとかあればいいんですけど。
0601デフォルトの名無しさん05/02/04 21:58:05
>>584
1xとか書いててそのまま飯食ってた……
今の所、>>597>>599>>592というレスがあるみたいなので、調べてみます。
0602デフォルトの名無しさん05/02/04 22:06:31
>>601
実装はスレッドだが、CreateTimerQueue,付近を調べれば?
知ってんじゃないの?SDKの同期/非同期サービスだが、知っていたらごめん。
いやー、あんた知ってるよね
0603デフォルトの名無しさん05/02/04 22:25:24
GlobalAlloc関数について質問があるのですが

GlobalAllocの第2引数の 割り当てるサイズ なのですが
わかりにくいと思うのですが

char *lpszBuf;
int nLen;
HGLOBAL hMen;

nLen = GetWindowTextLength(hEdit);←hEditのサイズが入る
hMem = GlobalAlloc(GHND, sizeof(char) * nLen + 1);
lpszBuf = (char *)GlobalLock(hMen);

こんな感じになると思うのですが
sizeof(char) * nLen + 1のところが良くわからないのですが
sizeof(char) × (nLen + 1)ってことなのでしょうか?
その時のnLen+1は理解できるのですが
sizeof(char)もサイズを求める物ですよね?
こいつはいったい何のためにいるのでしょうか?
0604デフォルトの名無しさん05/02/04 22:30:06
やりたいことは
あるソフトに、メッセージ(とりあえず、マウス左ボタンダウン)を投げたいのです

ですが、その対象となるソフトが、グローバルフックでメッセージを受けて処理している場合、
そのソフトに対し、メッセージを投げるにはどうしたらいいのでしょうか?

わかるかたいらしたらお願いいたします
0605デフォルトの名無しさん05/02/04 22:33:48
>>603
sizeof(char) * nLen + 1は(sizeof(char) * nLen )+ 1と等しい
GetWindowTextLength(hEdit)はhEditに格納されている文字列の文字数が返り値になる
つまり一文字のバイト数*文字数+1てわけ

つうかコレ書いた奴間抜けだな
0606デフォルトの名無しさん05/02/04 22:36:07
>>603
本来はsizeof(LPTSTR) * nLen + 1じゃないか?それ。
この場合はUNICODEが定義されてるかどうかでLPTSTRのサイズが変わる。
0607デフォルトの名無しさん05/02/04 22:37:55
>>605
分かりました!
勘違いで迷路に迷ってたみたいです

nLenが既にもう完全なhEditのサイズかと思ってました
本当に間抜けな質問申し訳ありません
曇ってたのがすっきり晴れました
マジでありがとう
0608デフォルトの名無しさん05/02/04 22:47:50
sizeof(TCHAR) * (nLen + 1)
060960305/02/04 22:56:45
申し訳ないもう1個出てきました
nLen = GetWindowTextLength(hEdit);←hEditの文字数が入る
のときのnLenが文字数なので sizeof(char)*nLen+1は理解できたのですが

dwSize = GetFile(hFile , NULL);←dwSizeにサイズが入る
このとき dwSizeは完全なサイズが入っているので
第2引数は dwSize+1 だけでいいと思うのですが
何故かsizeof(char)*dwSize+1となっているのですが
charが8バイトでdwSize+1が17バイトだとしたら
メモリーの無駄遣いしまくってしまってないでしょうか?
0610デフォルトの名無しさん05/02/04 23:05:04
>>606
LPTSTRのさいずはかわらねーよ
0611デフォルトの名無しさん05/02/04 23:06:10
>>609
あんた、釣りがへた、
典型的なハード知らないソフトウエアエンジニアー
061260305/02/04 23:12:09
>>611
エンジニアなどたいした肩書きは無いですよ

独学で猫でもわかるを読んで勉強してるので
知り合いにCなどが出来る方がいないもので変な理解をすると
変更が効かずどんどん沼にはまっていってしまって・・・・
0613デフォルトの名無しさん05/02/04 23:13:08
>>609
> dwSize = GetFile(hFile , NULL);←dwSizeにサイズが入る
> このとき dwSizeは完全なサイズが入っているので
> 第2引数は dwSize+1 だけでいいと思うのですが
> 何故かsizeof(char)*dwSize+1となっているのですが
> charが8バイトでdwSize+1が17バイトだとしたら
> メモリーの無駄遣いしまくってしまってないでしょうか?

…どこを指しているのかワカラン
061460305/02/04 23:19:33
>>613
申し訳ないですわかりにくかったです

HANDLE hFile;← CreatFileで既に作ってる
char *lpszBuf;
DWORD dwSize;
HGLOBAL hMen;

dwSize = GetFileSize(hFile, NULL);←hFileのサイズが入る
hMem = GlobalAlloc(GHND, sizeof(char) * dwSiza + 1);
lpszBuf = (char *)GlobalLock(hMen);

dwSize = GetFile(hFile , NULL);←dwSizeにサイズが入る
このとき dwSizeは完全なサイズが入っているので
第2引数は dwSize+1 だけでいいと思うのですが
何故かsizeof(char)*dwSize+1となっているのですが
charが8バイトでdwSize+1が17バイトだとしたら
メモリーの無駄遣いしまくってしまってないでしょうか?

まだわかりにくいと思うのですが宜しくおねがいします
0615デフォルトの名無しさん05/02/04 23:24:19
sizeof(char) は8じゃないよ
0616デフォルトの名無しさん05/02/04 23:24:34
sizeof(char)は1と決まっているので問題ない。意味もない。
061760305/02/04 23:30:51
8ビットでした・・・・・
8ビットは1バイトですね

本当にはずかしい
テンパってテンパって・・・

くだらない質問に答えていただいてありがとうございます。
くだらなかったのにマジで悩んでました
0618デフォルトの名無しさん05/02/04 23:37:12
さてここでお約束の「1byteが8bitとは限らない」をお送りしません。
0619デフォルトの名無しさん05/02/05 00:52:54
将来考えれば、32バイト境界やればハードとソフトが一致する
0620デフォルトの名無しさん05/02/05 01:24:53
チーズビットって今でも売ってる?
0621デフォルトの名無しさん05/02/05 01:39:54
>>620
ttp://www.tscn.net/antenna/news/food/11/0.html
0622デフォルトの名無しさん05/02/05 01:42:36
厨臥区政が混ざってるな
0623デフォルトの名無しさん05/02/05 03:19:11
string.hのstrstrやstrchrと同じようなことをするWinAPI関数はありますか?
strlen=lstrlen、strcpy=lstrcpy、sprintf=wsprintfがあるぐらいだからそれもありそうなんだが。
0624デフォルトの名無しさん05/02/05 03:35:55
shlwapi.h の中にありますよ。
0625デフォルトの名無しさん05/02/05 03:42:27
HYU-
とかいうやつは、しゃらぽあ、あいこ、いらない、五月蠅い
0626デフォルトの名無しさん05/02/05 03:46:20
>>618
asciiはそうだ、8ビットこーどは西洋にはない
0627デフォルトの名無しさん05/02/05 03:48:01
>8ビットこーどは西洋にはない
>8ビットこーどは西洋にはない
>8ビットこーどは西洋にはない
0628デフォルトの名無しさん05/02/05 03:49:26
>>624
ありますた。
どうもありが�d。
0629デフォルトの名無しさん05/02/05 03:53:10
1オクテット
0630デフォルトの名無しさん05/02/05 04:36:12
ASCIIは7bit
0631デフォルトの名無しさん05/02/05 07:08:54
>>603
GlobalAllocなんて忘れろ。
クリップボードを扱うときしか使わない。
0632デフォルトの名無しさん05/02/05 07:10:53
>>631
理由は?
0633デフォルトの名無しさん05/02/05 07:14:01
>>632
16Bit時代の遺物
HeapAlloc使え
0634デフォルトの名無しさん05/02/05 07:20:24
>>633
さむ
0635デフォルトの名無しさん05/02/05 07:28:29
>クリップボードを扱うときしか使わない。

使うじゃん。
おまえもしかして、malloc で済む用事に
わざわざ VirtualAlloc だの CreateFileMapping だの使う手合いか?
0636デフォルトの名無しさん05/02/05 07:53:27
>>635
>>633嫁
0637デフォルトの名無しさん05/02/05 08:00:33
>>636
意味わからん
0638デフォルトの名無しさん05/02/05 08:14:28
Globalはあまり使わないなぁ…
大抵自プロセス内だけのデータならLocalAllocで済ますんだが
0639デフォルトの名無しさん05/02/05 08:51:13
そういうのを裸で使う理由があればそうするだろうけど
固有の機能を必要としない場面でむやみに使うと
移植性おとすだけだろ
0640デフォルトの名無しさん05/02/05 08:56:40
>>638
Win32 APIでは、 ローカル ヒープとグローバル ヒープに違いはありません。
バカじゃねーの?
0641デフォルトの名無しさん05/02/05 09:02:35
>>635
malloc で済む用事にCreateFileMapping
具体的にmalloc で済む用事にCreateFileMappingが使える例を教えて下さい。
0642デフォルトの名無しさん05/02/05 09:13:18
HeapAlloc使え
0643デフォルトの名無しさん05/02/05 09:17:39
>>641
ファイルマッピングの使い方が知りたいなら MSDN でも嫁
ここでイチから教えてやるほどヒマじゃねえ
時間単価1万くらい出すなら別だが
0644デフォルトの名無しさん05/02/05 09:21:36
>>643
使い方は知ってますがmallocの代わりなんかに使える例を教えて下さい。
0645デフォルトの名無しさん05/02/05 09:31:46
はっきりいってmallocが一番効率がいい。
HeapAllocを何も考えずに直接使うのはただのバカ。
0646デフォルトの名無しさん05/02/05 09:42:36
>>643
確保したいサイズを指定してCreateFileMappingを呼び、
MapViewOfFileすればいいだけだろ?
mallocが使える全ての場所で、その代わりにできるが?

もちろん、mallocが使えるならmallocを使うに越したことは無い。
064764605/02/05 09:43:47
レス番間違えた。>>641, 644
0648デフォルトの名無しさん05/02/05 09:43:49
VirtualAlloc
----柵----
malloc > HeapAlloc(GetProcessHeap()) >>>>(越えられない壁)>>>> Global/LocalAlloc
----別世界----
CreateHeap, IMalloc, Global/Localメモリハンドルが必要なとき
----別次元----
CreateFileMapping
0649デフォルトの名無しさん05/02/05 09:58:04
お前らレベル低すぎ。
バグばっかり作ってるんだろうな。
0650デフォルトの名無しさん05/02/05 10:04:49
>>649
はいはい。君の作ったコードも先輩がこっそり
直してくれてるんだろうね。
0651デフォルトの名無しさん05/02/05 10:09:13
alloca

-----神の壁-----

malloc, new

----一般人の壁------

HeapAlloc

----バカの壁--------

LocalAlloc, GlobalAlloc
0652デフォルトの名無しさん05/02/05 10:11:22
てかvector使えば自分で動的確保する必要なんてほぼ無いだろ。
動的バッファもvector<char>でいいし。
0653デフォルトの名無しさん05/02/05 10:14:12
質問
「あるウィンドウ」を表示させるとき、今のアクティブなウィンドウをディアクティブにしないで、
アクティブのままにしつつ、「あるウィンドウ」を表示させたい場合どうすればいいのでしょうか?
0654デフォルトの名無しさん05/02/05 10:19:39
あるウィンドウを表示させた後に今のウィンドウをアクティブにし直せばいいじゃん。
0655デフォルトの名無しさん05/02/05 10:29:06
ShowWindowにSW_SHOWNAてのがあるな
0656デフォルトの名無しさん05/02/05 11:06:40
>>654
もうちょっと質問者の意図を汲んでやれよ。
0657デフォルトの名無しさん05/02/05 13:15:15
今さあ、
WaitCommEvent();
つかってさあ、
スレッドでシリアルの受信バッファのイベント待って、
受信バッファのデータをchar変数にバッファさせようとしてるのよ。

ところが、一回受信してEV_RXCHARのイベントが上がったら、
上がりっぱなしで、charにたまりつづけてるんだけど、
どうすりゃいいのよ?


つうかさ、いまさら232Cかよ。

0658デフォルトの名無しさん05/02/05 13:16:51
>>657
Cisco製品を普段使ってるんですが、
その際、TeraTermを使用してるんです。

で、自作のターミナルを作ろうと思ってるんですが、
その際、資料として参考になるサイトってご存知得ないですか?
できれば、教えていただきたいのですが。

よろしくお願いします。
0659デフォルトの名無しさん05/02/05 13:19:18
クスコ
0660デフォルトの名無しさん05/02/05 14:29:15
IMEの漢字変換ポップアップウィンドウを、こちら側で表示させたい場合、どのAPIを呼び出せばいい?
例えば、「あいさつ」という文字列を変換させたいとして、

そのAPIに「あいさつ」という文字列を引数として渡すことで、漢字変換対象のリストを表示させるみたいな。
0661デフォルトの名無しさん05/02/05 14:31:22
>>657
>>658

5年くらい前まだ、プログラム始めたての頃のソースあった。
はじめたての頃のなので正しく出来てるかわからんしどうなってるのか忘れてるので怪しい情報になるが参考までに。

こんな流れでやってた。
CreateFile      : ポートオープン:GENERIC_READ | GENERIC_WRITEでオーバーラップ使ってたのでFILE_FLAG_OVERLAPPEDあり。
SetCommMask   : EV_RXCHARとか使用したいイベントのマスク設定
SetupComm     : 通信バッファ設定
PurgeComm     :  PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEARとかでクリアして初期化しているらすぃ
SetCommTimeouts : タイムアウト時間設定
SetCommState   : フロー制御とかの設定

別スレッドWaitCommEventでWaitして制御かえったら
if((dwEvtMask & EV_RXCHAR))とかでイベント確認して処理してまたWaitループ
緊急停止はEscapeCommFunctionでイベント立ててWaitぬけてクリア処理

書いてるうちになんとなく思い出してきたが、
上で書いた関数での設定色々あるけど一つ一つがすごく重要な設定だった気がする。
結構めんどくさかったような。

RS232Cのフロー制御の知識とか本が無いと意味不明だったきがする。

066265805/02/05 14:37:50
>>661さん
助かります。
それを参考にいろいろググりつつ、自作ターミナルを作ってみようと思います。
0663デフォルトの名無しさん05/02/05 14:56:24
>>657
無手順?

複数のスレッドで交代で切れ目なく受信バッファを読むとかダメ?
0664デフォルトの名無しさん05/02/05 17:11:40
>>662
SimpleTerm とかいうサンプルが MSDN にあったのではないか。
オレはこれを元に作った ComNifty まがいで nifty のパソコン通信していた。
なんとか7という口へ 56Kモデム経由だったと思う。
0665デフォルトの名無しさん05/02/05 17:26:15
TeraTermもソース公開なんだよなあ…
0666デフォルトの名無しさん05/02/05 18:13:57
人のソースを読もうとする気がしないのは言うまでも無いだろw
0667デフォルトの名無しさん05/02/05 21:14:30
どうせ弄るのなら、TeraTermよりPUTYYの方が良いだろう。
TeraTermの拡張インタフェースは、かなり捻じれている。
それを思えば、単体で動くPUTTYのソースを直接弄って
独自PUTTYに改変するのいい。
066865705/02/05 23:48:20
>>663

イベントが上がりっぱなしなのがなんでなのかが
わかってないのよ、私。
受信バッファ読んだらイベント下がると思ってたんだけどな・・・
勝手な思い込みに近いけど。
0669デフォルトの名無しさん05/02/06 00:22:09
ウィンドウを常にアクティブにする方法ってありますか?
0670デフォルトの名無しさん05/02/06 00:33:22
Zオーダーが一番上とかならあるけどな
0671デフォルトの名無しさん05/02/06 00:36:52
>>668
受信バッファ小さすぎるとか
ReadFile()が追いついてないとか
0672デフォルトの名無しさん05/02/06 01:10:18
フックして、他のプロセスへのWM_ACTIVATEAPPを潰してはどうでしょう?
0673デフォルトの名無しさん05/02/06 01:18:07
>>668
FILE_FLAG_OVERLAPPED を指定した場合は IOがペンディングになってるかどうかをチェックしないと。
0674デフォルトの名無しさん05/02/06 03:49:26
ファイル名の変更はどうすれば良いのでしょうか?
Win32APIで出来ますか?
0675デフォルトの名無しさん05/02/06 03:51:49
できます。
0676デフォルトの名無しさん05/02/06 03:57:51
>>674
MoveFile()
rename()
0677デフォルトの名無しさん05/02/06 13:56:31
すみません。waveOutWrite()で聞きたいことあるんですが、
まずwaveOutWrite()でヘッダ送る(音データが格納されているバッファのアドレスも送られる)。
その後に音データバッファのデータを変更してもOKなんですか?
もちろん再生位置付近のところとかは、いじらないようにします。
0678デフォルトの名無しさん05/02/06 16:30:10
聞く前にやってみろ
067967705/02/06 18:07:04
>>678
いや、やってみて普通にできたから聞いてみたんだが…
共有違反とかしてそうだから不安で聞いてみた。
0680デフォルトの名無しさん05/02/06 19:41:35
LoadImageで画像表示してます。
画像Aを背景にして、画像Bを上に表示したいのですが、画像Bの要らない部分を透明に出来ますか?
分かる方お願いします。
0681デフォルトの名無しさん05/02/06 19:48:54
MaskBlt
0682デフォルトの名無しさん05/02/06 22:09:37
>>680
冴子先生みたいになればいいんなら
↓
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/layerwin.asp
0683デフォルトの名無しさん05/02/06 22:12:32
半角カナを全角カナへ変換するAPIはありませんでしょうか?
0684デフォルトの名無しさん05/02/06 23:03:45
ttp://www.google.co.jp/search?hl=ja&q=%E5%8D%8A%E8%A7%92+%E5%85%A8%E8%A7%92+%E5%A4%89%E6%8F%9B+api&lr=lang_ja
0685デフォルトの名無しさん05/02/07 04:01:37
CreateFile関数なんですが

C:\txt\a.txt だと読めないのに
C:\\txt\\a.txtだと読めるのはなぜですか?

_getcwdでデレクトリー調べているので
C:\txt としかゲット出来ないですけど
どうしたら良いんでしょうか?
0686デフォルトの名無しさん05/02/07 04:08:36
文字のエスケープ
0687デフォルトの名無しさん05/02/07 04:23:02
付け足す文字を
\\a,txtにしたら出来ました
どうも^^
0688デフォルトの名無しさん05/02/07 11:05:35
ファイル名まで変えてどうすんだよ
0689デフォルトの名無しさん05/02/07 12:53:16
エディットボックスのウインドウメッセージのWM_KEYDOWNで
Enterキーが押されたときに処理させたいのですが、
押すとビープ音が鳴ってしまいます。
これを鳴らさないようにするには、どうすればいいのですか?

ちなみにCreateのときにES_AUTOVSCROLLとES_MULTILINEを設定すると
鳴らなくなるんですが、処理後に改行してしまいます。
0690デフォルトの名無しさん05/02/07 14:27:38
>>689
耳を塞げ
0691デフォルトの名無しさん05/02/07 15:43:27
>>689
エディットボックスをサブクラス化してやっているって事でいいのかな?
だとしたらWM_KEYDOWNで処理した場合はCallWindowProcに渡さなければいいんでないか?
状況が良くわからないので答えようがないけど
069268905/02/07 16:08:00
>>691
処理後return 0で返したけどだめ。
また、キーコードが入ってるwpを0にしてもだめでした
0693デフォルトの名無しさん05/02/07 16:42:02
>>685
C言語の超超基本的な事でWindowsAPI全然関係ないぞ・・・
0694デフォルトの名無しさん05/02/07 16:47:49
test1.obj : error LNK2019: 未解決の外部シンボル "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) が関数 _WinMain@16 で参照されました。
Debug/test1.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と出るのですがどういう事なのでしょうか?
0695デフォルトの名無しさん05/02/07 16:52:30
>>694
関数WndProcが無いとおっしゃってます
0696デフォルトの名無しさん05/02/07 17:19:03
ソースくらい貼りつけろ
0697デフォルトの名無しさん05/02/07 17:24:50
>>696
そーっすね。
0698デフォルトの名無しさん05/02/07 17:29:02
>>695
ありがとうございます^^
書き方をミスってましたw

もう一つ質問があるのですが、画像表示を速くすると、画像がちらついてしまいます。
どうすればいいのでしょうか?
0699デフォルトの名無しさん05/02/07 17:32:10
>>698
背景を消去しないようにする
(WM_ERASEBKGNDをDefWindowProcに渡さない)
0700デフォルトの名無しさん05/02/07 17:34:26
スタートアップに登録されたアプリケーションが、
OSの起動時だけ、実行したいプログラムがあるとして、
OSの起動時か?そうでないかを知るには
どうしたら良いのでしょうか?
宜しくお願いします。
070169105/02/07 17:39:21
>>689
>>692

WM_KEYDOWNじゃなくてWM_CHARにして
wpがVK_RETURNだったらCallしないって感じでどうだろう。

//サブクラス化したプロシージャ
LRESULT CALLBACK _SubWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  switch(uMsg)
  {
  case WM_CHAR:
    if(wParam == VK_RETURN){
      //処理
      return 0;
    }
  }
  return CallWindowProc();
}
0702デフォルトの名無しさん05/02/07 17:46:44
>>698
すいません。どのように記述すればいいのでしょうか??
0703デフォルトの名無しさん05/02/07 17:47:18
↑
>>699
です
0704デフォルトの名無しさん05/02/07 17:52:20
>>703
case WM_ERASEBKGND: return 0;
070568905/02/07 17:54:15
>>701
WM_CHARにしたらできました
教えて頂いてありがとうございます
0706デフォルトの名無しさん05/02/07 18:05:39
LCMapStringって「ガ」を「ガ」に変換してくれますか?
0707デフォルトの名無しさん05/02/07 18:10:31
>>700
GlobalAddAtomじゃダメかな?
0708デフォルトの名無しさん05/02/07 18:11:50
>>706
やってみたら?
0709デフォルトの名無しさん05/02/07 18:25:02
>>708
やってみたら「ガ」を「ガ」になった。
すごいAPIだ
0710デフォルトの名無しさん05/02/07 18:34:04
日本語おかしくてもプログラミングはできるんですね。
0711デフォルトの名無しさん05/02/07 18:37:45
をかしくても良いぢゃない。日本語だもの。
0712デフォルトの名無しさん05/02/07 18:52:14
>>704
ありがとうございます。
出来たのですが、ちと、おかしくなってしまいます。
WM_KEYDOWNでキー入力をすると画像を描画するようにしてるので、押しっぱなしにすると描画され続けてしまいます。
WM_KEYUPだとはなしたときなので使いづらいです。
キー入力で押し放しでも1回の入力にする方法って有りますか?
0713デフォルトの名無しさん05/02/07 18:54:40
fRepeatでも見れば。
0714デフォルトの名無しさん05/02/07 19:06:46
おかしいのはあなたの頭。
0715デフォルトの名無しさん05/02/07 19:11:27
あるWindowに属するクライアント内にマウスカーソルがあるときは、WM_MOUSEMOVEでひろえばいいですが、
あるWindowに属するクライアント外にマウスカーソルがあるということがわかる、WMメッセージ(または何か別の方法)はありますか?

カーソルがクライアント内からクライアント外へ出たことを知りたいもので。

宜しくお願いします。
0716デフォルトの名無しさん05/02/07 19:11:47
>>712
2回目以降おなじコードなら無視すればいいじゃん
0717デフォルトの名無しさん05/02/07 19:32:27
猫とかに書いてある、通常のウィンドウを表示するプログラムがありますが、
それと同じようなタイプのウィンドウをもう1つ出して、
新しく出た方のウィンドウにフォーカスを移したいと思います。
これを専門用語で言うと、STATICなPOPUPウィンドウを作り、
それをサブクラス化するでいいんでしょうか。
検索する時のキーワードにさせていただきます。
0718デフォルトの名無しさん05/02/07 19:45:01
タイマでGetCursorPosでも発行しれ。
0719デフォルトの名無しさん05/02/07 19:48:23
>>715
1.マウスキャプチャして検知
2.WM_MOUSELEAVEを拾う(Win 98以降)
072071705/02/07 19:55:07
>>717
モーグルダイアログが自分の探していた物っぽいです。
もう一度それを調べてみます。失礼します。
0721デフォルトの名無しさん05/02/07 20:00:59
お前は冬季五輪にでも出場する気か?
072271705/02/07 20:02:04
私も質問した側で、答えていいか分かりませんが、
自分なら、WM_MOUSEMOVEが来る毎に、以下のような感じの関数を使い、
真なら、ウィンドウの中にマウスポインタがあるとします。

int CheckWindowCursorPos(HWND hWnd, POINT *point)
{
GetCursorPos(point);
if(!ScreenToClient(hWnd, point)) return 0;
return 1;
}
072371505/02/07 20:05:03
>>719
マウスボタンを押さないで、検知したいので、それだと無理です。
>Winにおいては、WM_MOUSE_LEAVEは、WM_LBUTTON_DOWN後に TrackMouseEvent?();をTME_LEAVEを指定して呼び出した場合に一度だけ送信される。

でも、ありがとうございました。
072471705/02/07 20:05:10
orz・・。モーダルダイアログです。
0725デフォルトの名無しさん05/02/07 20:05:28
WINDOW外れたらWM_MOUSEMOVEは来ないんだが・・・
WM_MOUSEMOVEが来るのは常にwindow内にあるときのみ
072671505/02/07 20:07:13
>>725
ええ、おっしゃるとおりで。

で、クライアント領域を外れたら、通知されるメッセージがあると助かるのですが、
ないとなると、自作システムを変更せざるえません。
0727デフォルトの名無しさん05/02/07 20:11:59
すればいいじゃん。
072871705/02/07 20:15:11
>>725
そうですね。間違えました。
自分も、マウスの位置によって、処理の動作を変えるとか
やっているんですが、ウィンドウの中での位置でした。すみません。
0729デフォルトの名無しさん05/02/07 20:15:30
キャプチャしまくれ
0730デフォルトの名無しさん05/02/07 20:18:55
TrackMouseEventじゃないの?
0731デフォルトの名無しさん05/02/07 20:19:03
テンキー押しっぱなしにしても1回の処理にするように出来ません・・・
2回目同じコードなら無視する方法も考えてみたけど分からなかったです・・・・
どうすればいいのでしょうか?
0732デフォルトの名無しさん05/02/07 20:20:57
がんばれ
0733デフォルトの名無しさん05/02/07 20:32:48
>When the mouse is captured, menu hotkeys and
>other keyboard accelerators do not work.
0734デフォルトの名無しさん05/02/07 20:34:12
>>731
WM_KEYDOWNの説明よく見れ
lParamの0-15ビットにリピートカウント(押しっぱなしによって何度もキーが押されるた回数)入ってるから
キーリピートでの入力じゃない場合はすればよい。
0735デフォルトの名無しさん05/02/07 20:59:00
>>734
どうもです^^
例など教えて頂けませんか?
0736デフォルトの名無しさん05/02/07 21:01:16
>>735
氏ね
0737デフォルトの名無しさん05/02/07 21:28:40
アプリケーションで、GetSysemColorで取り出せるシステム色の一覧が見れるフリーソフトってありますか?
あると便利なんですが。

Win32プログラミングで使いたいのです。
0738デフォルトの名無しさん05/02/07 21:31:31
「コントロールパネル」->「色の設定」
073973405/02/07 21:47:52
>>731
>>735

すまんすまん、今良く見たら自分が勘違いしていた、>>734じゃできないわ。
だが、結局答えがWM_KEYDOWNの説明にそのまま書いてあったぞ。
lParamのビット30が直前のキー状態を保持してるので、その状態が離された状態なら初回と判断すればよい。

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  switch(uMsg){
  case WM_KEYDOWN:
    if( ((lParam >> 30) & 0x00000001) == 0){ // 初回押下なら
      // 初回押下時のみの処理
    }
    break;
  }
}

MFCならこんな感じかな?
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags )
{
  if( ((nFlags >> 15) & 0x00000001) == 0){ // 初回押下なら
    // 初回押下時のみの処理
  }
}


だがな
>>731 >>735よ、なんていうか。

市ね
0740デフォルトの名無しさん05/02/07 21:52:45
スレッドハンドルの閉じ方について質問です。

_beginthreadexで作成したスレッドは
CloseHandleで閉じなければいけませんが、
スレッドが終了したら閉じるということを
やりたい場合、どう書くのがいいのでしょうか?

今はスレッド関数を抜けるreturn文の直前で、
OnEndThread()みたいな通知関数を呼んで、
その中でCloseHandle()を呼び出す方法にしています。
このOnEndThread()で、CloseHandle()を呼び出す前に、
スレッドが確実に終了してからCloseHandleしたほうがいいのでしょうか?
思いつくのは、Sleep()で適当に待つか、
WaitForSingleObject()にタイムアウトを設定して無限ループで
リトライをかける、ぐらいなのですが、こんなんでいいのでしょうか。
それとも気にしないでCloseHandleしていいのでしょうか?

0741デフォルトの名無しさん05/02/07 22:01:38
気にしないでCloseHandleしていい
0742デフォルトの名無しさん05/02/07 22:11:22
>>740
スレッドハンドルは使わないならスレッド作成直後に即CloseHandleしてもOK
0743デフォルトの名無しさん05/02/07 22:17:13
>>741,742
単純、明快な回答ありがとうございます。

>スレッドハンドルは使わないならスレッド作成直後に即CloseHandleしてもOK

試してみて大丈夫だったんで不思議に思ってたんですが、
このことってMSDNとかに書いてあるでしょうか?
0744デフォルトの名無しさん05/02/07 22:41:05
>>742
まじで?
0745デフォルトの名無しさん05/02/07 22:48:52
スレッドハンドルが必要になるのはスレッドの終了を待機するときだけ。
0746デフォルトの名無しさん05/02/07 22:52:08
ニヤニヤ
0747デフォルトの名無しさん05/02/07 22:53:24
そっか。ハンドルって媒介だから、必要なければ閉じちゃっていいんだ。納得した。
0748デフォルトの名無しさん05/02/07 23:06:49
この調子だとCreateProcess()したときにプロセスハンドルもスレッドハンドルも閉じてないんだろうなぁ。
0749デフォルトの名無しさん05/02/07 23:07:33
向こう側で PulseEvent に来る時点で
ハンドルが閉じられてても動作保証あるのかって問いには
誰も答えられないのか
075074205/02/07 23:09:35
CreateProccessのMSDN記述に
CloseHandle 関数を使って、プロセスのハンドルとメインスレッドのハンドルの両方を閉じなければなりません。
これらのハンドルが必要ない場合、プロセスを作成した直後にそれらのハンドルを閉じるのが最善です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
とある。
0751デフォルトの名無しさん05/02/07 23:14:19
目からうろこが。
おもっくそMSDNにも書いてあったし。
こういうお約束的なAPIって案外調べたりしないもんだから見落としてることもあるんだろうな。
0752デフォルトの名無しさん05/02/07 23:36:25
>>748
えー、閉じなきゃいけないんですか?
てゆーか、CloseHandleって関数の存在を始めてしりました。
0753デフォルトの名無しさん05/02/08 00:32:39
ファイル操作はfopen?
0754デフォルトの名無しさん05/02/08 00:36:01
>>753
CreateFile に特有の機能が必要ないときは迷わず
0755デフォルトの名無しさん05/02/08 00:52:42
ReadFileで読み込むと
lpNumberOfBytesReadを特殊な条件化じゃないとNULL指定できないのが面倒なんだよなぁ
0756デフォルトの名無しさん05/02/08 01:04:27
すみません教えてください

APP(A)からDLL(B)を呼び出しているのですが、DLL(B)からさらにDLL(C)をLoadLibrayでロードしています。
DLL(C)からDLL(B)の関数をGetProcAddress()で読んでいるのですが、DLL(C)はハードコーディングで
GetProcAddress(GetModuleHandle(NULL), "Foo")
みたいになっちゃっていてどうもAPP(A)の空間しか見れて無いらしくDLL(B)の関数がGetProcAddressできてません。
明示的にAPP(A)の関数の名前空間にDLL(B)に関数も含めるにはどうすればいいのでしょうか?
0757デフォルトの名無しさん05/02/08 01:09:16
NULLぽ
0758デフォルトの名無しさん05/02/08 01:22:45
>>740
スレッドが終了するときに、 シグナル状態になるので、それを

WaitForSingleObject()あるいは
WaitForMultipleObjects()で検知して

で、スレッド終了後の処理を始めればいいんじゃないの
0759デフォルトの名無しさん05/02/08 02:01:58
>>758
漏れはいつもそうしてる
スレッド作成直後にCloseHandle()する勇気がなかったんで…
0760デフォルトの名無しさん05/02/08 03:50:12
逆に寧ろ、終了を知る必要がないならとっととCloseHandle()してしまうべきだと思うのだが。
子への通知はPostThreadMessage()でいいし、逆方向も子に適当なハンドルを渡しておいてそれにMessageを投げさせれば済むしね。
0761デフォルトの名無しさん05/02/08 04:40:43
>>756
Read/WriteProcessMemoryかな。
0762デフォルトの名無しさん05/02/08 07:22:42
CloseHandleなんて呼ぶ必要ないよ。
0763デフォルトの名無しさん05/02/08 07:36:40
>>762
その心は?
0764デフォルトの名無しさん05/02/08 10:15:07
д・) >762がランチャーこさえたら……
A・) ガクブルガクブル
0765デフォルトの名無しさん05/02/08 10:29:58
>>764
CreateProcess()はエンドユーザ向きじゃないので、
あまりランチャーでは使わんでしょ。
カスタマイズ可能なランチャーならShellExecute()にすると思われ。
0766デフォルトの名無しさん05/02/08 14:14:47
>>756
APP(A)に"Foo"関数をエクスポートさせて(保障されてるかは知らない)
APP(A)の"Foo"からDLL(B)の関数を呼んでみてはどうだろか。
0767デフォルトの名無しさん05/02/08 14:24:07
>>756
日本語が良く分からない
文を短くしろ
主語述語の関係をはっきりさせろ
0768デフォルトの名無しさん05/02/08 15:12:06
>>756

>>766 と似たようなもんだけど、APP(A) で forwarder RVA で
DLL(B) の関数をエクスポートする。APP(A) の .def ファイルで、

EXPORTS
Foo = B.Foo

って書くのねん。(ファイル名が B.DLL の場合)
0769デフォルトの名無しさん05/02/08 15:38:24
おぉ、目から鱗ビーム
0770デフォルトの名無しさん05/02/08 16:01:55
Caretの真下に窓出したいんだけどCaretの高さってどうやって知るの?
0771デフォルトの名無しさん05/02/08 16:24:57
ListView_SortItemsでリストビューをソートしようとしたんですが
コールバック関数の第一第二引数が同じものがきていて機能しません。
いくつかサンプルみたんですがどれも同じようにやっていて、原因がわかりません。
知っている方いたら是非ご教示お願いします…
0772デフォルトの名無しさん05/02/08 16:27:50
>>771
んなこたーない。
ソース晒してみ。
0773デフォルトの名無しさん05/02/08 16:43:21
>>771
コールバックにくるlParam1, lParam2は各リストアイテム(LVITEM)のlParamだよ。
LVITEM挿入時とかにlParam同じの入れてればコールバックにも同じのしかこないよ。

一番簡単な流れで言うと
1:アイテム挿入時にLPARAMに重複しない連番を入れておく
2:コールバック関数内でFINDITEMとかでlParamの番号を元に目的のデータを持ってくる。
3:2で持って来た実データを比較し、比較結果を返す。

同じのしかこないなら
LVITEM挿入時にlParamに値入れてないのでは?(memosetやZeroMemoryでの0が入ってる)
077469式フリーPG ◆hND3Lufios 05/02/08 17:11:50
すぐに閉じることが出来るけど、アプリ終了時に全てのスレッドの
終了をプライマリスレッドが待機できるようにとっておくけどなぁ。<スレッドハンドル

0775デフォルトの名無しさん05/02/08 17:24:40
>>774
閉じられるとは言ってもスレッドハンドルいらないケースってまずないような気がするね
0776デフォルトの名無しさん05/02/08 17:32:58
Load_Bmp(Back_DC,"test.bmp");
と記述すると、
'Load_Bmp': 識別子は、引数依存の照合を使用しても見つかりません。
とエラーが出るのですが、Load_Bmpの使い方間違ってますか?
0777デフォルトの名無しさん05/02/08 17:40:05
>>776
LoadBitmapなら、Winuser.hで宣言されてるはずだけど

Load_Bmpという関数は知らないな
自作関数なら、宣言を見直せ
0778デフォルトの名無しさん05/02/08 17:41:34
Load_Bmpとは何? Win32にあった?
077977105/02/08 18:18:10
>>772 >>773
レスありがとうございます。
lParamが未設定で、設定してもいかないので悩んでいたら
アイテム挿入時にLVIF_PARAMフラグを指定していなかっただけでした。

今までBCBでやっていたのでこういう部分はほとんど触れなかったんですが
なかなかおもしろいです。
ありがとうございました。
0780デフォルトの名無しさん05/02/08 18:24:17
>>775
>760ってことでしょ。
0781デフォルトの名無しさん05/02/08 18:30:57
スレッドがウインドウプロシージャを必ず持つのならそれでも良いけどなw
0782デフォルトの名無しさん05/02/08 19:39:23
>>760
子に終了メッセージを投げて、子から終了したよメッセージが来るまで
待機するのかな。で、その返答メッセージを親が受け取った時って、
子のスレッドは*完全*に終了しているのかな?
0783デフォルトの名無しさん05/02/08 19:44:29
>>782
「終了したよ」メッセージではなく
「お手討ちにどうぞ」メッセージならどうかな?
0784デフォルトの名無しさん05/02/08 19:53:15
_beginthreadexで本当に開放いいの?
CreateProcessとかCreateThreadとかはいざ知らず。
英語にも日本語にも先に開放して良いと書いてないよ・・・
0785デフォルトの名無しさん05/02/08 20:00:03
Cランタイム内で確保されたTLSはどのタイミングで解放されるんだろう。
0786デフォルトの名無しさん05/02/08 20:19:33
VC++とか持ってるならCRT版の_beginthreadexなんかがなにやってるかはソース見れば分かる。
0787デフォルトの名無しさん05/02/08 20:27:27
>>786
おおーソースあったのねん、知らなかった。thx
おおー、読んだ読んだ、なるほど。ありがと。
あと、NTカーネルのソースありませんか、なんちって
0788デフォルトの名無しさん05/02/08 20:42:23
自作クラスのWindowStyleだけで使う独自な値って、どの辺の値にしたらいいもの?
(EditTextだとES_LEFTの0x0000L〜ES_NUMBERの0x2000L辺りみたいだけど)
何か、WS_POPUPが0x80000000とかWS_TABSTOPが0x00010000とかみたいだし、
下4桁は自由に使っても競合しない?(他のクラスを継承した場合とか以外)
0789デフォルトの名無しさん05/02/08 20:51:25
メインのウィンドウにエディットボックスを2つ表示してTABで移動できるようにしたくて

CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 30, 30, 80, 24, hWnd, (HMENU)ID_EDIT1, hInst, NULL);
CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 140, 30, 80, 24, hWnd, (HMENU)ID_EDIT2, hInst, NULL);
CreateWindow("BUTTON", "ボタン", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP, 300, 30, 80, 24, hWnd, (HMENU)ID_BTN, hInst, NULL);

としてみたんですが、ポーンって音が鳴るだけでした。
MSDN見てみたらWS_EX_CONTROLPARENTの説明が
「ユーザーが[Tab]キーを使って子ウィンドウ間を移動できるようにします。」
だったのでこれかと思ってCreateWindowExに変えてこのスタイルを適用してみたんですけど、
やっぱりできませんでした。何か間違っていますか??
0790デフォルトの名無しさん05/02/08 21:15:36
エディットコントロールに一定以上の容量を確保したバッファを送るとキーボードからの入力を受け付けなくなるのですがなぜでしょうか?教えてください
0791デフォルトの名無しさん05/02/08 21:45:12
9x系?
0792デフォルトの名無しさん05/02/08 21:54:30
>787
このまえ流出したって騒ぎがあったな、そういや。
0793デフォルトの名無しさん05/02/08 22:07:24
>>761
>>766
>>768
おおアリガ�d 早速やってみる。

>>767
ごめんなさい。自然言語は苦手なんです。
0794デフォルトの名無しさん05/02/08 22:39:01
_beginthreadexはソースないだろ
0795デフォルトの名無しさん05/02/08 22:42:00
/***
*threadex.c - Extended versions of Begin (Create) and End (Exit) a Thread
*
* Copyright (c) Microsoft Corporation. All rights reserved.
略
0796デフォルトの名無しさん05/02/08 22:55:04
794の目はfusianasan?
0797デフォルトの名無しさん05/02/08 23:02:45
warata
0798デフォルトの名無しさん05/02/08 23:08:46
まー俺はウニバーサルだし、仕方が無い
0799デフォルトの名無しさん05/02/08 23:13:59
うぱにしゃっと?
0800デフォルトの名無しさん05/02/08 23:28:20
MDIにツールバーをつけ、ChildWindowを最大化するとツールバーに合体(?)せずに上書きしてしまいます。
これを回避するにはどうすればよろしいでしょうか?
サンプルなどありましたら宜しくお願いします。
0801デフォルトの名無しさん05/02/08 23:36:06
動的確保したメモリに音楽ファイルのデータを書き込んで
そのデータを再生したいのですが、

<具体例>
暗号化した音楽ファイル(DAT) ー> 復号 ー> MP3として書き出す −> MICIで再生

ではなく

暗号化した音楽ファイル(DAT) ー> 復号 ー> データを再生

APIのみで何かいい方法はありませんか?
0802デフォルトの名無しさん05/02/08 23:41:07
>>801
メディアフォーマットSDKあるからそれダウンロード汁(無料)
0803デフォルトの名無しさん05/02/08 23:42:17
>>801
復号したデータをトリプルバッファでwaveOutWrite
080480105/02/09 00:28:10
>>802
どうも!
MSDNで”Windows Media Format 7.1 SDK”なるものを発見できました。

>>803
どうも!
”トリプルバッファ”で検索したら使えそうなサンプルが見つかりました。
早速試してみることにします。
0805デフォルトの名無しさん05/02/09 00:34:24
>>804
トリプルバッファでストリーミング再生するとマルチスレッド組むようになるだろうから、
少し上のマルチスレッドのレスも参考にするとよいぞ
関係ないが、俺は昔、再生スレッドとwaveOutOpen()の同期を取り忘れてて気づくのに骨が折れたことがある
0806デフォルトの名無しさん05/02/09 01:36:42
質問です。
CreateFile系API関数にはバイナリやテキストモードの設定できる項目がないようですが、
これはバイナリ形式しか取り扱えないということなのでしょうか?
0807デフォルトの名無しさん05/02/09 01:52:19
>>806
もう少しひねりが欲しい
0808デフォルトの名無しさん05/02/09 02:07:59
質問です。 
CreateFile系API関数にはアペンドモードの設定できる項目がないようですが、 
これは上書き形式しか取り扱えないということなのでしょうか? 
0809デフォルトの名無しさん05/02/09 04:51:24
>>806
そうで御座います。

面倒だったら素直に fopen() でも使っとけ。

>>808
DWORD dwDummy;
HANDLE hFile = CreateFile("TestFile.txt", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
SetFilePointer(hFile, 0, 0, FILE_END);
WriteFile(hFile, "Test\r\n", 6, &dwDummy, NULL);

面倒だったら素直に fopen() でも使っとけ。
0810デフォルトの名無しさん05/02/09 07:11:08
>>809
はいはい
081180605/02/09 12:35:07
>>809
_wfopen()を使うことにしました
0812デフォルトの名無しさん05/02/09 14:21:11
>>811
_tfopenもよろしく
これもAPIじゃないけど。
0813デフォルトの名無しさん05/02/09 15:38:52
listviewで指定した行を選択させるにはsendmessageにどういった引数を指定すればいいですか?
081469式フリーPG ◆hND3Lufios 05/02/09 15:53:35
第1引数にHWND
0815デフォルトの名無しさん05/02/09 15:53:38
2回呼ぶ
先にindex調べて次に中身

081681305/02/09 17:21:39
例えば3行目の行を選択させるにはどの様にすればいいいですか?
0817デフォルトの名無しさん05/02/09 17:32:50
ミリ秒単位の時間を得たい場合はどのAPIを使えばいいのでしょうか?
0818デフォルトの名無しさん05/02/09 17:36:24
systemtime
0819デフォルトの名無しさん05/02/09 17:37:59
GetSystemTimeだごめん
0820デフォルトの名無しさん05/02/09 17:50:22
まぁ、単位がミリ秒ってのと精度は別なわけだが。
0821デフォルトの名無しさん05/02/09 17:52:18
そういうなよ、
そんなら、あなたのパソコンはUTCに完全に同期してるとでも?
0822デフォルトの名無しさん05/02/09 18:15:20
>>813 おながいします
082381305/02/09 18:15:39
'定数
Const LVM_FIRST As Long = &H1000
Const LVS_EX_FULLROWSELECT As Long = &H20
Const LVM_SETEXTENDEDLISTVIEWSTYLE As Long = (LVM_FIRST + 54)

'コード
SendMessage List1.hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, ByVal LVS_EX_FULLROWSELECT

指定行を選択させるには↑でいいでしょうか?
0824デフォルトの名無しさん05/02/09 18:25:40
>>823
VB?
なつかしいな…
0825デフォルトの名無しさん05/02/09 18:45:44
>>821
精度と UTC に何の関係が?
0826デフォルトの名無しさん05/02/09 18:48:16
>>825
ほう、あんたが、精度というのを持ち出したんだろうが。
別時間で生きてる方にはわからんかもね
0827デフォルトの名無しさん05/02/09 19:12:46
>>826
> ほう、あんたが、精度というのを持ち出したんだろうが。

別時間で生きてる方にはわからんかもね 820≠825 ですが何か?

> 別時間で生きてる方にはわからんかもね

説明できないので逃げるのですか?
0828デフォルトの名無しさん05/02/09 19:13:26
うわあ、すげえバカ。
0829デフォルトの名無しさん05/02/09 19:15:36
時刻の精度と時間の精度をごっちゃにするなよ
0830デフォルトの名無しさん05/02/09 19:21:01
GetSystemTimeはUTCを得るものだがな
バカだね、WindowsはりあるタイムOSでは無いのに
0831デフォルトの名無しさん05/02/09 19:43:11
だから時刻合って無くても時間は測れるだろ。
まあGetSystemTimeでミリ秒時間を計測する奴もどうかと思うが。
Windowsでもミリ秒ぐらいなら十分正確に測れる。
0832デフォルトの名無しさん05/02/09 19:43:34
寒天寒天!!
0833デフォルトの名無しさん05/02/09 20:40:53
GetSystemTimeより、GetSystemTimeAsFileTimeの方がおすすめ。
0834デフォルトの名無しさん05/02/09 20:51:06
>>812
APIじゃないってどういう意味なんですか?
0835デフォルトの名無しさん05/02/09 20:54:22
macro?
0836デフォルトの名無しさん05/02/09 20:55:56
VC独自のCRT.
0837デフォルトの名無しさん05/02/09 21:09:55
>>836
がどうしたの?
0838デフォルトの名無しさん05/02/09 21:46:57
CRTってモニタの事だよね。
0839デフォルトの名無しさん05/02/09 21:50:11
ちがうよ
0840デフォルトの名無しさん05/02/09 22:00:02
これ
http://support.microsoft.com/kb/q140584/
0841デフォルトの名無しさん05/02/09 22:05:03
ついでに
CRTは、モニタではなく、ブラウン管のこと。
だから、液晶CRTとかはありえない
0842デフォルトの名無しさん05/02/09 22:07:10
時計としての時間じゃないけど

精度がほしい場合
QueryPerformanceCounter
QueryPerformanceFrequency
が良いとか聞いたような。

でもハード依存っぽい事説明に書いてあるし使ったことないしで詳しくは知らない(´・ω・`)
0843デフォルトの名無しさん05/02/09 22:11:26
>>841
液晶CRTはヨドバシカメラにたくさん売られていますよ。
0844デフォルトの名無しさん05/02/09 22:26:15
液晶のカソードって・・・
0845デフォルトの名無しさん05/02/09 22:27:29
PerformanceCounterだけど、rdtsc使っている場合で、
動的にCPUのクロックが変わったときに、Frequencyの方は
古いまま、という問題があったようなきがする。
0846デフォルトの名無しさん05/02/10 01:36:51
知人は、未だに空ループさせる事で時間調整してたりします。(タイマー使うの面倒なら、せめてsleep使えよ)
ハードの性能がちょっと変わっただけで使い物にならなくなるソフト……
0847デフォルトの名無しさん05/02/10 02:08:18
確か、Sleep(0)は意味があったよな。
CPUの独占使用を放棄して他のスッドレに処理を行う機会を与えるらしいが。
0848デフォルトの名無しさん05/02/10 02:19:38
Sleep(0)は現在割り当てられているタイムスライスの残りを放棄する。
が、他にアクティブなスレッドが存在しなければ即座にまた戻ってきて、
結果的にスレッド切り替えのコストだけを浪費することになる。
0849デフォルトの名無しさん05/02/10 02:36:26
>>848
アクティブなスレッドがないんなら、別にCPU時間を浪費してもいいじゃん。
空ループの離脱条件成立が遅れるなどの副作用はあるだろうけどさ。
0850デフォルトの名無しさん05/02/10 03:03:37
ヤダヤダ!そんなのヤダ!
0851デフォルトの名無しさん05/02/10 04:07:14
ループ中にSleep(0)を入れて効果を実感出来た試しがない。
0852デフォルトの名無しさん05/02/10 04:11:47
実感しまくり。まあ素人はSleep(1)でもしてなさいってこった。
0853デフォルトの名無しさん05/02/10 07:02:42
ウィンドウズのタスクマネージャみたいに現在稼動してるプロセスを一覧表示するにはどうしたらいいですか教えてください
0854デフォルトの名無しさん05/02/10 08:16:57
EnumProcess
0855デフォルトの名無しさん05/02/10 11:56:38
Sleep(0)するくらいなら、スレッドのプライオリティを下げる.。
0856デフォルトの名無しさん05/02/10 12:12:10
ハンドルからそのウィンドウのサイズを取得するAPIを教えてくださ
0857デフォルトの名無しさん05/02/10 12:16:12
GetWindowRect
0858デフォルトの名無しさん05/02/10 12:22:55
>>857
ありが�d
0859デフォルトの名無しさん05/02/10 17:24:05
>>849
CPU使用率が100%のままだとファンがうるさくなったりするらしい。
俺のボロPCには関係ないけど。
0860デフォルトの名無しさん05/02/10 17:52:49
>>848
アクティブなスレッドが存在しないときはスレッドを切り替える必要が無いのだから、
切り替える先があるかどうか調べればいいだけなんだからそんなにコストは高くないだろ。
0861デフォルトの名無しさん05/02/10 17:57:11
マルチスレッド組んでてSleep()使ってると同期取り忘れてること見落とすんだよねぇ…
俺はマルチスレッド使うときはSleep()使わんようにしてる。
0862デフォルトの名無しさん05/02/10 18:09:07
見落とさなけりゃいいだろ
0863デフォルトの名無しさん05/02/10 18:11:47
うわー・・・
0864デフォルトの名無しさん05/02/10 18:17:04
なんかSleepが悪者扱いされとる。
使いかたが変なやつがバカだけなのに
0865デフォルトの名無しさん05/02/10 18:20:05
>>864も馬鹿確定
0866デフォルトの名無しさん05/02/10 22:10:13
しかし理由は説明できない>>865さんでした。
0867デフォルトの名無しさん05/02/10 22:58:21
>>864
というか、他人のソース見てたら、
「ここでSleep(1)しておくとうまく動く」
とかいうコメントが書いてあって呆れた。
0868デフォルトの名無しさん05/02/10 23:05:28
>>866 説明不要の馬鹿
0869デフォルトの名無しさん05/02/10 23:16:51
>>868
その理由も説明できなオバカさん発見
0870デフォルトの名無しさん05/02/10 23:17:34
>>867
そんなことは今関係ない。
0871デフォルトの名無しさん05/02/10 23:17:51
Sleep(1)を入れるとうまく動くつーの、経験したこと有るな。
まぁ、納得いかなかったので、調べまくって修正したが。
0872デフォルトの名無しさん05/02/11 00:12:47
説明できないヴァカと
説明不要のヴァカを
両方まとめて晒しage
0873デフォルトの名無しさん05/02/11 00:41:26
>>872
後者
0874デフォルトの名無しさん05/02/11 01:51:47
Sleep(1)を入れるとうまく動くつーのは
自分より低い優先度のスレッドに実行機会が与えられるから。
0875デフォルトの名無しさん05/02/11 04:03:17
フルスクリーン表示にしたいのですがどうすればいいのですか?
0876デフォルトの名無しさん05/02/11 04:11:03
>>875
画面の大きさをしらべて、ウィンドウのサイズを最大にする
0877デフォルトの名無しさん05/02/11 09:46:49
SetWindowLong(hWnd, GWL_STYLE, WS_POPUPWINDOW);
ShowWindow(hWnd, SW_SHOWMAXIMIZED);

でも戻し方がわからない・・・誰か教えてくれたらありがたいです
0878デフォルトの名無しさん05/02/11 10:33:25
質問ですが、
システムカラーを得るには、GetSysColorですが、
システムで使われてるフォント名を得たい場合はどうすればいいのでしょうか?
0879デフォルトの名無しさん05/02/11 10:45:45
SystemParametersInfo
0880デフォルトの名無しさん05/02/11 11:02:34
質問

GetTextExtentを使って、デバイスコンテキストでの文字列の長さを得たんですが、
なんか微妙に異なるんですよね。

GetTextExtentを呼び出す前にデバイスコンテキストに設定するのは、フォントだけで問題ないですよね?
何か他にあります?
0881デフォルトの名無しさん05/02/11 11:09:25
>>875
ゲームでフルスクリーンならChangeDisplaySettings()
0882デフォルトの名無しさん05/02/11 11:17:35
>>878
SystemParametersInfoでフォント名は得られない。
確か、別な方法があったはず。
0883デフォルトの名無しさん05/02/11 11:39:01
EnumFontFamilies
0884デフォルトの名無しさん05/02/11 12:02:40
>>880
GetTextExtentなんてAPIはWin32にはないよ
088588005/02/11 12:04:43
自己解決
スマソ
0886デフォルトの名無しさん05/02/11 12:40:18
学生プログラマなのですがよろしくお願いします
LocalLockがよくわからないのですが
私の予想では
LocalLockとは別のメモリ空間にあるデータの先頭アドレスを
自分のメモリ空間のポインタとして扱えるようにするでOKですか?
0887デフォルトの名無しさん05/02/11 12:46:48
いやWin3の場合、ローカル移動可能メモリを移動不可能にして
そのメモリのポインタを取得する。
0888デフォルトの名無しさん05/02/11 13:12:16
>>887
回答ありがとうございます

調べてみたのですが固定メモリと移動可能メモリがあるんですね、
まだまだ勉強がたりないようです orz
0889デフォルトの名無しさん05/02/11 13:29:01
APIの質問ではないかもしれないのですが

CSVファイルを開いて
そこから色々とやっていきたいのですが

例えば
CSVに
東店,12000,300000
西店,5000,9000
という物が保存されていたき
コレを参照したいときはやはりバイト数などで出すしかないのでしょうか?
それとも何かいい関数などあるのでしょうか?

0890デフォルトの名無しさん05/02/11 13:33:18
宿題スレがお似合いかもしれん
0891デフォルトの名無しさん05/02/11 13:33:51
strtokで分割してやればいいんでない?
0892デフォルトの名無しさん05/02/11 13:36:46
>>881
普通はIDirectDraw::SetDisplayModeじゃないか?
0893デフォルトの名無しさん05/02/11 13:40:02
>>890
サンクス ちょっといってきます

0894デフォルトの名無しさん05/02/11 13:40:36
>>889
>東店,12000,300000
>西店,5000,9000

上記みたいに単純な形式ならばstrtok()が使えるけど、
実はCSVには少し複雑なルールがあったりするので、
結局は自力で解析処理を書くことになる。
0895デフォルトの名無しさん05/02/11 13:44:08
CSVあたりはクラス自作しとくと便利
0896デフォルトの名無しさん05/02/11 13:52:07
宿題スレはなんか雰囲気が違いました

もうちょっと詳しく書いてみますと
CSVまたはDATファイルの中が

日付,店舗ID,売り上げ,目標の順番になっていて
20040101,01,12000,30000
20040102,01,20000,21000
毎回決まった形となっているのですが

バイト数で考えると難しそうなので
例えば配列を用意しておいてa[3]
最初の , が来るまではa[0]に代入
次の , が来るまではa[1]に代入・・・・・・a[3]に代入
としていこうかと考えているのですが

ファイルを開いてからどのような関数で , などを認識し
やっていけばいいのか見当もつかない状態になっています
もっといい方法もあると思うのですが私が考えれるのはこのくらいでして

strtok()で同じようなことが出来るでしょうか?
0897デフォルトの名無しさん05/02/11 13:53:27
fgetc
0898デフォルトの名無しさん05/02/11 13:57:40
つうかCのスレで聞けば?
0899デフォルトの名無しさん05/02/11 14:19:49
>>896
Cの標準関数で普通にできるだろ。
標準関数群はOSごとのAPIの差異を吸収してどのOSでも共通のインタフェースで使えるようにしてるんだから。
0900デフォルトの名無しさん05/02/11 14:24:54
店舗ID,店舗名

01,"店舗1"
02,"店舗2, (改装中)"
03,"店舗3"
0901デフォルトの名無しさん05/02/11 14:26:39
APIとどう関係あるんだか
0902デフォルトの名無しさん05/02/11 14:38:17
DB系のAPIまで視野に入れれば、CSVの扱いもAPIで済みますがな
0903デフォルトの名無しさん05/02/11 14:41:58
カーネルサービス付近にしといてくださいな
0904デフォルトの名無しさん05/02/11 15:12:50
あの〜最初から最大化で、そのあとウィンドウのサイズを変えられないようにしたいのですがどうすればいいのですか??
0905デフォルトの名無しさん05/02/11 16:29:02
ODBCドライバでCSV用ドライバがたしか入ってるが
まあ、CSVだけのためにそんなことする人もあまりいないだろうが・・・
DBのデータをCSV出力したい場合とかは便利なのかな?

>>904
サイズ変更系ボタンつかないスタイルで作って最初から最大化で表示させればよいだけでは?
090690405/02/11 16:58:52
>>905
そうなんですが、それの記述方法が分からなくて・・・・。

あと、普通に画像を表示させると、ちらつくので、ちらつかなくするには、CreateCompatibleDCとCreateCompatibleBitmapを使うことは分かったのですが、
どのように書けばいいのですか?
サンプルソースなどがあるサイトしりませんか?
0907デフォルトの名無しさん05/02/11 17:03:21
オフスクリーンでビットマップを操作して、
PaintイベントでBitBlt
0908デフォルトの名無しさん05/02/11 17:17:47
>>904
サイズ不変は、表示する時に^ WS_MAXIMIZEBOX ^ WS_THICKFRAME。
最大化は分からない。
090990805/02/11 17:19:27
あっ、通常のサイズ限定でのサイズ不変かも。
0910デフォルトの名無しさん05/02/11 17:27:25
CreateCompatibleDCしてCreateCompatibleBitmapしてSelectObject。
WM_PAINTはGetClipBoxして↑のをBitBlt。
0911デフォルトの名無しさん05/02/11 19:17:11
〜ハンドル型ってほとんどポインタですか?
0912デフォルトの名無しさん05/02/11 19:17:54
はい
0913デフォルトの名無しさん05/02/11 19:18:09
ハンドルとポインタは全く違いますが?
0914デフォルトの名無しさん05/02/11 19:20:26
値は同じです
0915デフォルトの名無しさん05/02/11 19:42:58
ポインタは数字なんだからintですよね?
0916デフォルトの名無しさん05/02/11 19:47:04
実体が分かっているなら良いです。好きにキャストしてよいです
0917デフォルトの名無しさん05/02/11 19:59:19
typedef void *HANDLE;
091845005/02/11 20:01:13
先日質問した>>450 のプログラムなんですが、
>>462 さんの示したようなパターンでマルチスレッドにしてみました。
通信スレッド -> UI スレッド: PostThreadMessage
UI スレッド -> 通信スレッド: PostMessage
ワーカースレッド -> 通信スレッド: PostThreadmessage
通信スレッド -> ワーカースレッド: SetEvent (通信終了の指示用)
この時ワーカースレッドは基本的に通信スレッドにメッセージを飛ばして
送信をさせるのみ。通信が切断したことを示す SetEvent のみを監視。

という構成でやっているのですが、ワーカースレッドの速度が激減してしまいました。
数10byte〜数100byte 程度の小さなデータを大量に送っている為なのでしょうか?
それとも使用している同期・メッセージ手段がマズいのでしょうか?

ワーカースレッドのループの中で Sleep(1) を入れると極端に遅くなる。
ワーカースレッドのループの中で Sleep(0) を入れると Sleep(0) よりは速いがやはり遅い。
しかも、データがちゃんと飛ばずに漏れているっぽい。
091945005/02/11 20:03:59
>通信スレッド -> UI スレッド: PostThreadMessage
>UI スレッド -> 通信スレッド: PostMessage

これは逆でした。

通信スレッド -> UI スレッド: PostMessage
UI スレッド -> 通信スレッド: PostThreadMessage
0920デフォルトの名無しさん05/02/11 20:10:24
つうか、せっかくスレッドみたいなメモリ共有も不要な軽い機構使ってるのに
メッセージのやり取り必要なのか?
0921デフォルトの名無しさん05/02/11 20:36:41
>>450
ってさあ、メインループでpeekmessage()でメッセージが無いときに
framemove()に飛ばすとすると・・・
・・・それで何か足りないものってありますか?
0922デフォルトの名無しさん05/02/11 20:46:10
450?
0923デフォルトの名無しさん05/02/11 20:49:51
450
0924デフォルトの名無しさん05/02/11 20:52:11
結局、メッセージでシリアライズしてると言うこと?
スレッドの意味無いじゃんw
092592105/02/11 20:52:13
>>922
長時間処理がしたいとの事のようなので
framemoveで何が足りないのかと・・・
framemove1回ごとにforループを1000回ずつ回す事を考えると
それで長時間処理が出来てんじゃないという事を言いたかったのです。
0926デフォルトの名無しさん05/02/11 20:55:59
そりゃまずいよ
092745005/02/11 21:05:35
ぐぐってみたのですが、DirectX に FrameMove というのが見当たりましたけどそれのことですか?
もしそうなら、DirectX を使っていないので私のプログラムには使えなさそうです。

>>924
シリアライズ・・・Java の Serialize とかですか?
でもあれはスレッドの話とは違ったような・・・。

そうじゃなくてスレッドとスレッド同期が多すぎるという事でしょうか?
どんな同期手段でも、同期の数が多すぎるといけないのか、
それとも Message 以外の適切な手段を選べばちょっとくらい多くても問題がないのか・・・。
0928デフォルトの名無しさん05/02/11 21:08:49
>>918
ところで、メインスレッドはどこいった?

ついでに、一つのアプリケーション内なら、わざわざメッセージで投げる必要はないと思うが・・・
0929デフォルトの名無しさん05/02/11 21:22:10
>>927
すまん、共有リソースがある場合、スレッドセーフじゃないリソースをアクセス
すると時は、時間はかかるがメッセージを使ってメインスレッドで安全に
シリアルに処理させるということ。
093045005/02/11 22:56:49
UI スレッド = メインスレッドです。
メインスレッドが通信先と通信を開始すると _beginthread でスレッドを起動、
接続が完了すれば、メインスレッドに接続した旨をメッセージで伝えています。
その後は、UI 側がデータを送信したい時は PostThreadMessage で通信スレに指示、
通信先からデータが来た場合には、メインスレッドにデータ受信メッセージを送ります。
時々長時間処理が必要になって、その場合は新たにワーカースレッドが作成されて、
そのスレッドが一方的に通信スレッドに PostThreadMessage で送信データを指示しています。
ワーカースレッドは接続が途絶えた事のみを検知しています。

メッセージは遅いんですね。CriticalSection とかを使って処理したほうがいいのか。
でも、処理が楽だし、UI を記述するのと同様に出来るのが楽なんですが・・・。

UI スレッドが何らかのメッセージを受け取るのと同じような処理をする場合は
どうしていますか?WM_TIMER で CriticalSection の中を監視?
0931デフォルトの名無しさん05/02/11 23:09:25
WM_CREATEを
hdc=GetDC(hwnd);
hmainwndsubdc=CreateCompatibleDC(hdc);
hmainwndsubbmp=CreateCompatibleBitmap(hdc,640,480);
ReleaseDC(hwnd,hdc);
SelectObject(hmainwndsubdc,hmainwndsubbmp);
TextOut(hmainwndsubdc,0,0,"ほげほげ",8);
として
WM_PAINTを
hdc=BeginPaint(hwnd,&pt);
BitBlt(hdc,0,0,640,480,hmainwndsubdc,0,0,SRCCOPY);
EndPaint(hwnd,&pt);
にするとウインドウが一面黒くなってしまうんだが、白くするにはどうすればいいのでしょうか?
0932デフォルトの名無しさん05/02/11 23:11:02
文字の部分だけは周りが白くなってあとは真っ黒です。
0933デフォルトの名無しさん05/02/11 23:15:42
オバキュー
0934デフォルトの名無しさん05/02/11 23:21:42
>>930
人間が使うプログラムならメッセージでもそんなに人間がかんじられるほど
遅くなることはありません。
いまいち処理が分からんので、回答できない。
093545005/02/11 23:37:24
基本的には人間が使うプログラムなんですが、
一部のデータは大量に送られてきます。
現時点では全部のデータが一度メッセージ経由で UI に送られています。

全部をメッセージ以外の軽い手段でやりとりするか、
通信スレッドがデータを確認してその大量のデータだけ軽い手段でやるかで悩んでいます。
前者の場合だと、>>930 の最後の行に書いた通り、UI スレッドが受け取る手段が問題になりますし、
後者は後者で面倒が多いなと思っている所です。
0936デフォルトの名無しさん05/02/11 23:40:22
>>931
TextOutの前に塗り潰しておく。
FillRectでもPatBltでもSetPixelでもお好きなように。
0937デフォルトの名無しさん05/02/11 23:42:41
ExtTextOut最強。
0938デフォルトの名無しさん05/02/11 23:46:16
>>936
ありが�d�d�d
093980005/02/12 11:23:10
自己解決
0940デフォルトの名無しさん05/02/12 13:35:42
>>450
>>918
>>930

ちょっとそこまでくるとソース全部見ないと相談されてもなんともいえないね。
とりあえずデバッグ出力あたりに処理毎に現在時刻と処理場所とか出力して
どこで遅くなっているか調べるのをおすすめする。
まず原因調べないとね。


一応今までの説明で遅くなりそうな点を書いとくと。(全然関係ないかもしれんが)

1:メッセージをUIスレッドに送信、またはUIスレッドから受信する箇所で遅延?
メッセージは通常のUIのメッセージ(WM_PAINTその他全部)と同じルートを使う為、
メッセージ量が多めであるUIスレッドを経由するとそこで待ち時間がでる可能性がある。
といっても通常は問題にならない。
しかし、UIのつくりそのものがおかしくて重い可能性もあるので一応。(闇雲にInvalidateRectとか)

2:通信スレッド・ワーカースレッドで無茶な処理をしていないか?
Sleep(0),Sleep(1)って言葉が出てきたので気になったんだが、
特に処理がない状態の場合に無限ループ的にまわしてたりしてないかな?

スレッド慣れてない人がたまにやるんだけど、「無限ループ的な待ち」は
スレッド使おうが使うまいが最低最悪の処理なので注意。
0941デフォルトの名無しさん05/02/12 15:04:24
無限ループ使いはウィルス作者並みに取り締まるべきだろ。
0942デフォルトの名無しさん05/02/12 15:24:51
C言語で構造化例外処理を扱うにはどうすればよいのですか。
0943デフォルトの名無しさん05/02/12 15:33:33
MSDNを読めばよい
0944デフォルトの名無しさん05/02/12 17:14:15
文字の表示は出来るんですが、数字の表示(足したり引いたりした物の表示)ができません・・・・・

どうすればいいのですか?
094545005/02/12 17:20:29
1. UI 自体は特に重たくはなっていないようです。データのやりとりだけが遅いんです。
でも、UI のチューニングを特にしていないので
メッセージが多いとか、処理が重いとかはあるかもしれません。

2. ワーカースレッドは 100byte 未満の 10000 個のデータを送信しています。
始めにタイムアウト 0 の WaitForSingleObject で切断検知をして問題なければ、
データを PostThreadMessage で送信するというループです。
このループの末尾に、Sleep を入れてみたりしたのですが・・・。

通信スレッドは、タイムアウト 0 の WaitForSingleObject で
WSAEventSelect をチェックしてソケットからの読み出しを行い
データが揃えば UI スレッドにメッセージを送信し、
PeekMessage でメッセージを確認して、来ていたらソケットへ送信を行います。
これをループとして回していました。

とりあえず UI/ワーカーから通信スレへの送信要求をメッセージではなく
CriticalSection を使った物に変えてみました。
PeekMessage のところをクリティカルセクション経由で
バッファにデータが溜っていたら送信という風にしています。

この改変と通信処理の別の部分の見直しで多少改善したようです。
データのやりとりの速度が多少マシになって、>>918 で書いた
データが途中で詰まって、ちゃんと来ない現象はなくなりました。
0946デフォルトの名無しさん05/02/12 17:26:50
>944
wsprintf(buf,"%d点",n);
0947デフォルトの名無しさん05/02/12 17:29:54
>>944
もっと具体的に。
それから、本当にこのスレ向けなのか?

http://pc5.2ch.net/test/read.cgi/tech/1104843249/
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
http://pc5.2ch.net/test/read.cgi/tech/1107926989/
http://pc5.2ch.net/test/read.cgi/tech/1031374980/
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
0948デフォルトの名無しさん05/02/12 17:38:10
どんなスレッド(通信なども)も全部UIにして、スレッド間通信をすべて
メッセージでやってるDQNコードは見たことあるな。
0949デフォルトの名無しさん05/02/12 18:02:24
GetDC()で取得したハンドルは描画が終了したらReleaseDC()で
解放しなければなら無いらしいんですが

描画するたびに
GetDC();
//描画
ReleaseDC();
ってやら無ければダメなんでしょうか?

WM_DESTROYを受け取ったときにプロシージャでReleaseDC()とか無理でしょうか?
0950デフォルトの名無しさん05/02/12 18:12:29
次スレ
http://pc5.2ch.net/test/read.cgi/tech/1108199304/
0951デフォルトの名無しさん05/02/12 18:29:36
>>945
やっぱり見ないとなんとも言えんけど所々気になるところが・・・

>2. ワーカースレッドは 100byte 未満の 10000 個のデータを送信しています。
>始めにタイムアウト 0 の WaitForSingleObject で切断検知をして問題なければ、
>データを PostThreadMessage で送信するというループです。

メッセージ連続10000往復以上は確実に遅くなると思われるのでとりあえずメッセージ回数軽減したほうがよさげ。ってこれはもう改善済みかな?
タイムアウト 0 の WaitForSingleObjectでの切断検知ってのはデータが既にある場合の事で
データがない場合はWaitFor...系でウエイトしてるって事でいいのかな?
データない場合もタイムアウト0のWaitForSingleObjectでループしてたら送信していない以上送信速度に影響ないだろうが設計的にかなりいかんよ。

>通信スレッドは、タイムアウト 0 の WaitForSingleObject で
>WSAEventSelect をチェックしてソケットからの読み出しを行い

これがいまいちよく理解出来ないんだけどWSAEventSelect使ってるのにタイムアウト0のWaitFor...?

>PeekMessage のところをクリティカルセクション経由で
>バッファにデータが溜っていたら送信という風にしています。
これもいまいちよくわからん。
もしかして
while(bConnect){
  EnterCriticalSection
  if(BufSize){
    Send();
  }
  LeaveCriticalSection
}
こんな感じでやってる?

説明見てて感じるんだけどスレッドとかWaitFor..系とかイベントオブジェクト
あまり使った事ないように見えるけどそうかな?だとしたらまずその辺から使い方調べた方がいいかも。
0952デフォルトの名無しさん05/02/12 18:38:50
>>949
だめです
0953デフォルトの名無しさん05/02/12 18:51:14
>>949
大丈夫です
095495105/02/12 18:51:59
>>945
951で色々書いたがもしちゃんとわかってての話であれば951は聞き流してくれ。
お互い掲示板じゃそこまで細かくかけないしね(´・ω・`)
095545005/02/12 18:57:24
>メッセージ連続10000往復以上は確実に遅くなると思われるのでとりあえずメッセージ回数軽減したほうがよさげ。ってこれはもう改善済みかな?
送信側だけ CriticalSection とバッファを使っています。

>タイムアウト 0 の WaitForSingleObjectでの切断検知ってのはデータが既にある場合の事で
>データがない場合はWaitFor...系でウエイトしてるって事でいいのかな?
データがなくなればスレッドが終了しますので、
データが無い場合でもループが回っているという事はないです。

>説明見てて感じるんだけどスレッドとかWaitFor..系とかイベントオブジェクト
>あまり使った事ないように見えるけどそうかな?だとしたらまずその辺から使い方調べた方がいいかも。
API の仕様はなんとかわかってはいる(と思う)んですが、経験が少なくて・・・。

>こんな感じでやってる?
CriticalSection からの送信要求の読み出しはそうですね。

for(;;){
  if(WaitForSingleObject==WAIT_OBJECT_0){
    読み込み処理;必要なデータが揃えば UI スレッドにメッセージ送信;
    ※読み込み時に通信切断もチェック
  }
  EnterCriticalSection
  if(BufSize){
    Send();
  }
  LeaveCriticalSection
}

送信要求もイベントを立てるようにして WaitForMultipleObjects を使って、
かつタイムアウトを 0 以上の値にした方がいいって事でしょうか。
0956デフォルトの名無しさん05/02/12 19:00:29
>949
それが嫌になったらC++にしな
095795105/02/12 19:16:02
んと、わかってるのであれば聞き流してもらうって事で。
通りすがりのスレッド初心者に役に立つかもしれないし、一応スレッド関連の基本を以下に書くと。

1:特定のスレッドでWaitFor..系(あるいはSleep)使ってウエイト状態にしている場合、
そのスレッドは全く存在していないのと同じように扱われCPUその他リソースを消費しない。※

具体的には
「スレッドA」UI処理
「スレッドB」for(;;)やwhile(bFlag)みたいに無限ループでフラグチェックなりをしていた場合。
CPUパワーの最大を100%とすると、
「スレッドA」CPU50%使用
「スレッドB」CPU50%使用
という状態になり、スレッドBで内容的には大した処理を行っていないにもかかわらずスレッドAは50%しか力を発揮できない。※
しかもスレッドBは常にフルパワーで動作することになるので、全く別のアプリケーションの動作にも影響が出てしまう場合もある。※

でも、
「スレッドA」UI処理
「スレッドB」WaitForSingleObject(hEvent, INFINITE)のようにした場合。
スレッドBはWaitFor..で完全に停止してるわけだけどこの場合
「スレッドA」CPU100%使用
「スレッドB」CPU0%使用
ということになり、スレッドAはフルに資源を活用できる。※

つまり、特に用がなければスレッドは出来る限りWaitFor..等で待機しておくのが望ましいというか普通という事になる。


※厳密に言えば大嘘だらけになるが、概念をわかりやすく説明する為にあえて大嘘ついております。
0958デフォルトの名無しさん05/02/12 19:24:49
非可視のウインドウを持ったUIスレッドを作りまくる奴いるよね。
ワケワカラン
0959デフォルトの名無しさん05/02/12 19:24:53
>957
説明をダウンサイジングして用語を標準化してくれる?
0960デフォルトの名無しさん05/02/12 19:25:07
c++にて、Write/GetPrivateProfileStringを使ってるんですが
日本語(text=hogeホゲ のような)データは扱えないんでしょうか?
文字化けしてしまうのですが…
0961デフォルトの名無しさん05/02/12 19:26:45
>956
MFCってことでしょうか?
C++を使ったwinプログラムって他にもありますか?
0962デフォルトの名無しさん05/02/12 19:34:02
>960
UTF-16にしてバイナリ扱いにすれば?
Get..Struct
096395105/02/12 19:34:17
つづき

んで、WaitForを活用する為に一番使われ、使いやすいのがイベントオブジェクト(CreateEventで作るやつね。)
イベントオブジェクトは文字通りイベントが起きたときに使う。
WaitForSingleObject([イベントオブジェクト], INFINITE)
とした場合イベントオブジェクトのイベントがOFF場合、WaitForSingleObject関数を抜けない。(そしてリソースを一切消費しない)※
イベントONになるとWaitForSingleObjectを抜けて次に進むことになる。

具体的な使用例を言うならば
開始時に
スレッドA(UI & メインスレッド)
スレッドB(作業スレッド)
を作成し、スレッドBではWaitFor..でウエイトさせておく。

UIの特定のボタンが押されたら特定のバッファにデータをデータを入れイベントをONにし、
後の処理はイベントONによって開放されたスレッドBが行う。(スレッドAはUI処理に戻る)

もうすこし具体的な使用例を書くならWaitForMultipleObjectsでの待機になるかな。
for(;;){
  Result = WaitForMultipleObjects // 「処理行えイベント」・「アプリ終了その他中断命令イベント」・「通信切断イベント」の三つで待機
  if(Result = XX){
    // WaitForMultipleObjects の戻り値でどのイベントがONになったかある程度判別可能なのでイベントにそった処理を行う
  }
}
このようにスレッドはWaitFor...とイベントその他を活用すれば資源を無駄にせずに有益に使用できる。※
0964デフォルトの名無しさん05/02/12 19:49:17
>961
未チェック。
class MyDC{HDC hd_; HWND hw_;
public:MyDC(HWND hw):hw_(hw)
{hd_=GetDC(hw);}
~MyDC(){ReleaceDC(hw_,hd_);}
operator HDC(){return hd_;}
};
096595105/02/12 19:51:19
つづき
んで複数スレッドを使用した場合の問題として
BYTE cbData[255]
みたいなバッファがあった場合使い方によっては
スレッドAでcbDataにデータを入れている途中でスレッドBでcbDataからデータを読み出す、という自体が起こる。
当然データはむちゃくちゃになるし、それ以外のもっと深刻な問題も多数発生する。
そんな時に使うの「クリティカルセクション」これはデータ保護のために使用するものであって、
イベントやWaitFor等とは目的が全く異なるものになる。(というか使いにくいし、それ用にイベントとかその他があるのでそっちを使う)

具体的には
CRITICAL_SECTION CObj;
BYTE cbData[255]

Send()
{
  EnterCriticalSection(&CObj)
  // cbDataのデータを読み込み全て送信する
  LeaveCriticalSection(&CObj)
}

Recv()
{
  EnterCriticalSection(&CObj)
  // ○○からもってきたデータをcbDataに全て格納する
  LeaveCriticalSection(&CObj)
}
としておけば。
スレッドAでSend()スレッドBでRecv()が同時に発生した場合、動作的には
先にEnterCriticalSectionに入った方のスレッド処理が行われ、後からEnterCriticalSectionnに入ったスレッドは先EnterCriticalSectionに入ったスレッドが
LeaveCriticalSectionするまでEnterCriticalSectionnでウエイト状態になる。
結果として、cbDataは一つのスレッドしかアクセスしないように出来るという事になり、安全になる。
0966デフォルトの名無しさん05/02/12 19:58:42
>965
そんなベタな説明するくらいなら自分のホムペに書け。マジで邪魔だ
096795105/02/12 20:00:18
長すぎるしなんか方向ずれてきたのでやめておくね orz
096895105/02/12 20:06:49
>>966

>>955のループの使い方だと結局無限ループ的動作になるって事が言いたかったのorz
クリティカルセクションがデータ保護だけではなくてイベント&WaitFor..待機的目的で使われてるように見えたので・・・

取りあえず教は寝ます。ごめんねorz
0969デフォルトの名無しさん05/02/12 20:15:43
>>958
Winsockの立場はどうなる?
097095105/02/12 20:17:45
最後って言ったけどもう一個だけ、このままだと450氏用になんの役にも立たないのでorz

1:送信回数を減らすことによって処理を早くする為に
100byte以下を10000回送信する部分を可能であれば一つにまとめて送信する。
大き目のバッファに溜め込んでおいて実際には送信せずそのバッファに入れるだけ。
バッファが満杯になったらイベントを立て、実際の送信処理を行わせる。

2:実際の送信部分の
if(BufSize){
  Send();
}
を
Waitfor...(バッファ満杯イベント)
Send()
のようにうまいこと改造する。

こんだけでもかなり変わるはず。今度こそ最後です、orz ドゲザ
0971デフォルトの名無しさん05/02/12 20:20:44
>>969
WinSockの2.0はイベントでやりとりするっしょ。
メッセージでやり取りするのは、Win16の遺物であるWinSock1.1
0972デフォルトの名無しさん05/02/12 20:24:28
InterlockedIncrementとInterlockedDecrement APIは、
特定のリソースの排他制御に適する。
TryEnterCriticalSectionも見よ。
0973デフォルトの名無しさん05/02/12 20:27:49
>>945
>2. ワーカースレッドは 100byte 未満の 10000 個のデータを送信しています。
 数が多すぎる問題は当然として、
 こんだけ多いなら、ワーカースレッドからそのまま通信したほうがよくないか?
0974デフォルトの名無しさん05/02/12 20:37:08
>>971
耳学問?
実用のWinscokプログラムの経験ないのかな。
0975デフォルトの名無しさん05/02/12 20:38:25
>>974
メッセージでI/O完了ポートを使えるのか。初耳で砂。
0976デフォルトの名無しさん05/02/12 20:41:50
WSAEventSelectを知らない爺さんがいるな。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsaeventselect_2.asp
0977(・∀・)ニヤニヤ05/02/12 20:46:53
>>976
ひょっとしてイベントが同時に待機できる最大数を知らないの?
0978デフォルトの名無しさん05/02/12 20:50:52
「よりによってWSAEventSelect()を引き合いに出すとは厨丸出しだな。」
と言うのはみっともないから我慢しようかと思ったが、我慢が体に悪いので言うことにしました。

厨丸出しだな。
0979デフォルトの名無しさん05/02/12 20:52:17
そこでI/O完了ポートですよ。
0980デフォルトの名無しさん05/02/12 20:55:37
一行レスで、HNもなく、IDもないと、
誰が、どういう立場にたって、知識をどういう方向で使おうとして発言してるのかわからない。
0981デフォルトの名無しさん05/02/12 20:56:39
MFCのCAsyncSocketを黙殺する>>976は稀有な存在。
0982デフォルトの名無しさん05/02/12 20:57:36
I/O完了ポートって、ハンドル数の制限あったっけ?
0983デフォルトの名無しさん05/02/12 21:01:31
>>982
WaitForで待つなら、Win4までだと64。
APCだと関係ないな。
0984デフォルトの名無しさん05/02/12 21:26:59
サービスでウインドウを作りたくねえよなぁww
0985デフォルトの名無しさん05/02/12 21:34:44
>>951
(945とは違う人だけど)
これから学ぼうかと思ってた自分にとっては、こういう解説は有難かったり。

とまぁ、埋めついでに
098645005/02/12 22:30:05
>>951 さん
ありがとうございました。
色々と見直してみます。

>>I/O 完了ポート
ところで I/O 完了ポートに関しての初心者向けの説明・資料ってありませんか?
Winsock FAQ とかに名前は出てくるのですが、詳細が不明で・・・。
オーバーラップド I/O とか言うのもあるんでしたっけ・・・。
098769式フリーPG ◆hND3Lufios 05/02/12 22:33:34
>>986
http://www.amazon.co.jp/exec/obidos/ASIN/4756114040/qid=1108215142/sr=1-4/ref=sr_1_10_4/250-2853882-2300213

この本とか。。。マルチスレッドスレのほうで聞いてみるのも良いかも。
0988デフォルトの名無しさん05/02/12 23:26:54
char str[32];
wsprintf(str, "こんにちは");
TextOut(hdc,0,0,str,strlen(str));

と書いてビルドすると、
TextOut(hdc,0,0,str,strlen(str));
上に対して
warning C4267: '関数' : 'size_t' から 'int' に変換しました。データが失われているかもしれません。
という警告が出ます
なぜなのでしょうか?
0989デフォルトの名無しさん05/02/12 23:27:02
インストーラが行っている処理について調べているのですが…
コントロールパネルの「プログラムの変更と削除」で表示されるプログラム一覧に
登録するためのAPI、もしくはそれを管理しているレジストリ等があれば教えてください。
どうぞよろしくお願いします。
0990デフォルトの名無しさん05/02/12 23:59:36
>>988
strlenの返り値型はsize_t、TextOutの引数型はint。
size_tからintに変換して、データが失われているかもしれないから。
0991デフォルトの名無しさん05/02/13 00:01:09
>988
strlenの戻り値はsize_tで
size_tはunsigned intの変名。
TextOutの第5引数はintだから、
キャストしなきゃ警告が出る。
099299105/02/13 00:02:35
むう、2分遅れか。orz
0993デフォルトの名無しさん05/02/13 01:22:43
>>990-991
返事ありがとうございます。
どういう風に直なおせばいいのですか??
0994デフォルトの名無しさん05/02/13 01:34:04
(int)strlen(str)
0995デフォルトの名無しさん05/02/13 01:35:58
>>994
あ、警告でなくなりました!
どうもありがとうございました。
0996デフォルトの名無しさん05/02/13 03:45:52
"c:\foo\bar\..\"を"c:\foo\"に変換する関数ってないですか?
0997デフォルトの名無しさん05/02/13 04:06:02
GetFullPathName で出来たと思う
0998デフォルトの名無しさん05/02/13 06:23:19
>>996
PathCanonicalize
0999デフォルトの名無しさん05/02/13 06:36:59
999
1000デフォルトの名無しさん05/02/13 06:37:30
Win32API質問箱 Build28
http://pc5.2ch.net/test/read.cgi/tech/1108199304/l50
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。