Win32API質問箱 Build27

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
- 過去スレ
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
(★は「いやー ごめんなさい。」に巻き込まれた模様
2デフォルトの名無しさん:05/01/19 11:53:28
3デフォルトの名無しさん:05/01/19 12:30:18
乙!
4デフォルトの名無しさん:05/01/19 12:58:51
SuspendThread
5デフォルトの名無しさん:05/01/19 13:14:32
ResumeThread
6NameSpace:05/01/19 13:15:26
 
7デフォルトの名無しさん: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 クリアして、以後来ない
ようにする。
8デフォルトの名無しさん:05/01/19 16:20:31
コントロールパネル→ハードウェアの追加と削除
→デバイスの削除/取り外し→デバイスの取り外し
と同じ事をプログラムから行いたいのですが
どのようにすでば良いのでしょうか?
DetachDevice( STORAGE_DEVICE_DESCRIPTOR sdd )
みないな感じのAPIがあると一番良いのですが…
よろしくおねがいします。
9デフォルトの名無しさん:05/01/19 17:45:55
>>前スレの最後の方
ReadFileの1行番はWIN32APIには無いはず
全部(もしくは途中まで)読み込んで、改行区切りに自分で変換しないと駄目だと思う
1行にこだわっててAPIは何でも良いなら、C標準のfgetsで読み込むのが良いかと
10デフォルトの名無しさん:05/01/19 17:47:15
>>9
fgetsって速度が遅いとかいうことはないですか?
11デフォルトの名無しさん:05/01/19 18:32:27
常識的に考えれば、遅いわけも早いわけもないだろ
12デフォルトの名無しさん:05/01/19 18:36:19
>11
役に立たない回答だねぇ
13デフォルトの名無しさん:05/01/19 18:38:37
>>11
社会的に何の信頼もない君の「常識」なんて・・・
14デフォルトの名無しさん:05/01/19 18:39:36
2ちゃねらーの常識なんて・・・
15デフォルトの名無しさん:05/01/19 18:48:54
ExitThread(ぬるぽ);
16デフォルトの名無しさん:05/01/19 18:52:12
ソートのアルゴリズムは出尽くしてるのは常識だろ
改行を判断するのもごく当たり前にやるしかないのは常識
馬鹿ですか?
17デフォルトの名無しさん:05/01/19 18:54:50
RaiseException(がっ);
18デフォルトの名無しさん:05/01/19 18:57:17
CreateFileMappingかPipe使え。パイプはOSでサポートされたjavaのStringBufferみたいなもん。
19デフォルトの名無しさん:05/01/19 19:02:35
リストビューをちらつき無しで表示する事は出来るのでしょうか
メモリDCを作ってbltで更新する手法はリストビューでも出来ますか?
20デフォルトの名無しさん:05/01/19 19:04:31
http://www.kumei.ne.jp/c_lang/sdk/sdk_09.htm
の通りにプログラムを作ったらどのようなプログラムになるでしょうか?
21デフォルトの名無しさん:05/01/19 19:05:54
書いてるだろ
22デフォルトの名無しさん:05/01/19 19:08:07
>19
サブクラス化して描画関連メッセージ処理を包むのは、大変そうだ
239:05/01/19 19:08:18
>>10
使うのが難しい関数でもないし、試しに使ってみればいい(ReadFileが使えるなら、何も悩まんだろう)
でも、もしfgetsそのものについて質問があれば、C言語関係のスレでよろしく。
24前スレ999:05/01/19 19:45:42
>>9
無いですか。
ありがとうございました。
やり方考えます。
25デフォルトの名無しさん:05/01/19 19:49:40
>>16
はい、あなたが。
26デフォルトの名無しさん:05/01/19 19:53:10
>16
プログラマの常識はいいがお前の常識は世間に通用しない。
27デフォルトの名無しさん:05/01/19 19:57:06
どっちにしろお前らみんなたいしたことないんだから、
不必要な書き込みはするな。
28デフォルトの名無しさん:05/01/19 21:42:03
>>27
了解しました。
29デフォルトの名無しさん:05/01/19 22:21:21
.  ∩∩
   | | | |
  (゚ω゚ ) < けんか、ここまで
  。ノДヽ。
   bb
30デフォルトの名無しさん: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
> お前なぁ、実際にやってみたらわかる事だろ?アホか?
31デフォルトの名無しさん:05/01/19 22:41:40
XPのメニューやツールチップのようにウィンドウに影をつける
APIって知ってませんか?
32デフォルトの名無しさん:05/01/19 22:42:19
>>30
暇人乙
33デフォルトの名無しさん:05/01/19 22:42:58
>>31
変な日本語。「知りません」って答えてあげれば満足なのかな。
34デフォルトの名無しさん:05/01/19 22:44:55
>31
モノクロパターンブラシSetROP4
35デフォルトの名無しさん:05/01/19 22:51:21
>>33
「知ってません」じゃないと不満足かと
368:05/01/20 00:40:29
やっぱり2chでは答えられるレベルではなかったですね。
自己解決しました。すんまそ。
37デフォルトの名無しさん:05/01/20 00:52:10
タイムアウトするメッセージボックスないですか?

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

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


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

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

ほら。
47デフォルトの名無しさん: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行だけど。
48デフォルトの名無しさん:05/01/20 02:25:01
えーと、フックまでする必要は無くて。

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

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

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

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

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

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

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

トンクス
挙動が気に入らなくなったらウインドウに作りかえます
91デフォルトの名無しさん:05/01/22 09:13:45
>88
ビットマップリソースにしてLoadBitmapで読み込め
92デフォルトの名無しさん: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化
  してますが、ここでは何もしてません。
9388:05/01/22 09:41:36
>>91
よくわかりません。メニュバーの項目をIE風にしたいのですが
94デフォルトの名無しさん:05/01/22 09:48:03
IE風メニューでぐぐれ
つーか猫でも〜にあったような
95デフォルトの名無しさん:05/01/22 10:25:48
>88 と >93 で質問内容が変わってないか?
9688:05/01/22 10:33:37
猫見てもわかりません。もっとわかりやすいサイトお願いします
97デフォルトの名無しさん:05/01/22 10:46:03
IEも何もWindowsの標準的なメニューじゃないか‥‥

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

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

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

リソースは、リソース・エディタで編集するけど、xxx.rc ファイルは、テキスト
としても編集できる。あたしゃ、メニューはテキストでやっている。resource.h
にも( >>97 での IDM_... の変数を)登録しないといけないのは、面倒といえば
面倒だが。
107デフォルトの名無しさん:05/01/22 11:48:16
>105
お前のほうが紛らわしい。Windowsアプリの作成を勉強しなおしてきなさい
108デフォルトの名無しさん:05/01/22 12:30:56
つまんない
109デフォルトの名無しさん:05/01/22 15:08:14
WaitableTimer使ってスタンバイ状態から復帰させると、
約二分後にOSの設定に関わらず再びスタンバイに戻ってしまいます。
OSの設定通りに挙動させるにはどうしたらいいですか?
110デフォルトの名無しさん:05/01/22 17:22:00
CreateWindow関数で
スタイルのところに
ES_AUTOHSCROLLを入れて
スクロールバーが作れるのですが
このスクロールバーをクリックしたとき
送られるメッセージは何かあるのでしょうか?
111デフォルトの名無しさん: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
112デフォルトの名無しさん:05/01/22 20:27:34
電源管理。
WM_HSCROLL、spy++。
作者に問い合わせる。
113111:05/01/22 23:53:36
>>112
ありがとうございます。
できるだけ原因を追求してから、最後に作者氏にも相談しようかと思ってました。
ただSleipnirのソースコードも盗難にあって無いらしいので…。

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

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

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

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

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

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

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

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

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

方針がないならきりが無いからいっそのこと256バイトにしといて
後は別の手段でも考えたほうがいいよ。
リストをファイル経由で受け取ったり
フォルダ指定させてそこのファイル全部とか。
139デフォルトの名無しさん:05/01/23 19:50:17
おれの秘密のフォルダには10万個以上入っているが
140デフォルトの名無しさん:05/01/23 19:52:42
エディタとかならそんな何百も開くこと無いだろうけど
何か自動処理するソフトなら数千はいっちゃうかもしれないしな。
141133:05/01/23 20:03:00
みなさん、レスありがとうございます
結論としてはいい方法はなく、十分にバッファを確保してから呼び出せですかね
ちなみにバッファは
TCHAR allpath[_MAX_DIR + (_MAX_FNAME + _MAX_EXT) * n];
の計算で確保しようと思います
ちなみに掛け算くらい出来ます
142デフォルトの名無しさん:05/01/23 20:22:20
ちゃんとMSDN読めばそんな事で悩む必要は無いと思うけど…
143デフォルトの名無しさん:05/01/23 20:23:47
GlobalAlloc使えよ
144デフォルトの名無しさん:05/01/23 20:24:25
せめてHeapAllocにしとけよ
145デフォルトの名無しさん:05/01/23 20:26:13
それだとこのスレの質問ほとんどMSDN読めで終わるな
146デフォルトの名無しさん: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用。
147141:05/01/23 21:26:20
複数ファイルが選択されたときに↓のような感じでファイル名が入ってくるのでそれにあわせてみました
ディレクトリ\0ファイル名\0ファイル名\0...ファイル名\0\0
_MAX_DIRと_MAX_FNAMEと_MAX_EXTのすべてのサイズが256か260だったのでそうとうサイズがやばかったです orz
今はMAX_PATH*nにしてHeapAllocを使いますありがとうございました!
148デフォルトの名無しさん:05/01/23 21:31:22
マネージドやれば心配ない
149デフォルトの名無しさん:05/01/23 21:46:11
>>147
あらかじめOPENFILENAMEでフックプロシージャを指定しておき、
CDN_FILEOKが送られてきたタイミングで
CDM_GETFILEPATHを送ってバッファサイズを取得し、
バッファを確保してから全体の文字列を取得する。
…てな感じでできないかな?
150128:05/01/23 23:50:41
>>129
いや、設計がいいとかよくないとかの問題ではなく
HANDLEの先にあるオブジェクトが何かを知る方法を伺っているんですが。。。

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

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

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

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

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


環境を書いていませんでした。Win2K/BorlandC++ 5.5 です。
165デフォルトの名無しさん:05/01/24 20:50:23
>163
間違えた。
WM_MENUSELECT
GetMenuState
166デフォルトの名無しさん:05/01/24 21:27:32
>>157
PlatformSDK
副読本として>>162の日本語版(BCBに付属)
167デフォルトの名無しさん:05/01/24 21:31:01
CreateWindowEx でタイトルバーの無いウインドウをつくるには
dwExStyle と dwStyle の引数に何を渡せばいいですか?
168デフォルトの名無しさん:05/01/24 21:40:23
>167
CreateWindow#WS_*の解説を読めば分かるはずだ
169デフォルトの名無しさん:05/01/24 21:42:02
dwStyle &= ~WS_CAPTION;
170160:05/01/24 21:47:49
>>165
ありがとうございます。
マウスで選択したタイミングで飛んでくるのでちょっと考えてしまいましたが、
なんとか意図したように実装することが出来ました。
171デフォルトの名無しさん:05/01/24 21:47:55
"~"はなんだ?
172167:05/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);
173デフォルトの名無しさん:05/01/24 21:53:48
間違って悪かった。自分が作った拡張APIと混同していた
174デフォルトの名無しさん:05/01/24 21:55:57
C C++ VC++とかありますが、
VC++というのは
WindowsSDKやMFCを使ったプログラミングがこれに当たるんですか?
175デフォルトの名無しさん:05/01/24 21:56:45
>>171
アフォですか?
176デフォルトの名無しさん:05/01/24 21:58:10
>>174
そんなことはない
177デフォルトの名無しさん:05/01/24 22:05:36
なんで、C/C++ と VCが同列に扱われるんだ?
まずそこんとこ教えてくれ。
178デフォルトの名無しさん:05/01/24 22:18:15
VCの本とか見ると、コンソールアプリ=C/C++、GUIアプリ=VC++って書き方の本がある(こういう本は買わないけど)
ネットでも、そういう感じの書き方は多いし、GUIアプリ勉強したての友人が得意げに「VisualC言語」って連呼してくる

クセの強い方言持ってるから、言語と言えなくも無いけどね(とか言ってみる)
179デフォルトの名無しさん:05/01/24 22:36:49
Microsoft Visual C++ .NET 2003 は、C++ 開発言語を使用して
Microsoft Windows ベースのアプリケーション、
Microsoft .NET ベースのアプリケーション、
ダイナミックな Web アプリケーション、
および XML Web サービスを作成するための強力なツールです。
180デフォルトの名無しさん:05/01/24 22:38:04
>>172
WS_POPUPベースで必要なスタイル足せ。
181デフォルトの名無しさん:05/01/24 22:55:02
>>172
CreateWindowの時はWS_OVERLAPPEDWINDOWで作って
あとからキャプション外す。
dwStyle = GetWindowLong(hWnd, GWL_STYLE);
dwStyle &= ~WS_CAPTION;
SetWindowLong(hWnd, GWL_STYLE, dwStyle);
182デフォルトの名無しさん: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つで済めばとても素敵なんです.
183デフォルトの名無しさん:05/01/24 23:21:51
LinuxとWindows,共通とか考えてるなら、Win32APIは除外するだろ普通
>182
だからおまいは俺かYO!
勝手に書き込むなっつうの

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

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

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

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

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

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

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

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

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

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

ご教示、だよな。
212デフォルトの名無しさん:05/01/26 02:32:38
213デフォルトの名無しさん:05/01/26 03:31:23
>>211
プ
214デフォルトの名無しさん:05/01/26 03:41:07
215デフォルトの名無しさん:05/01/26 04:41:29
localtime, timeに相当するWin32APIは何になるのでしょうか。
今日の日付を"2005/01/26"のような文字列に変換したいのですが。
216デフォルトの名無しさん: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;
}
217デフォルトの名無しさん:05/01/26 07:12:36
全角の文字を含む文字列をlstrlenすると正しい文字数が返ってこないことがあります。
どうすればよいでしょうか?
218デフォルトの名無しさん:05/01/26 07:23:57
きょうじゅ(ケウジュ)【教授】
1 ―する 学問・技芸を一定の順序で教える△こと(人)。
用例・作例
個人―・出張―・―料
2  〔大学や高等専門学校などで〕教育や研究に従事する人の中で、最上の職階。
用例・作例
―会・名誉―

別に「ご教授ください」でもおかしくない。
219デフォルトの名無しさん:05/01/26 07:25:06
他スレでも教授にたてついてる奴いたけど同じ奴だろうな。
痛い痛い・・・
220デフォルトの名無しさん:05/01/26 07:27:51
>>214
つか、そのリンク先はなんか意味あるの?
ただの個人の基地外野郎のサイトにしか見えないんだけど。
引用するときは信頼できるソースを頼むよ。
221デフォルトの名無しさん:05/01/26 07:34:36
>217
#define UNICODE
222デフォルトの名無しさん:05/01/26 07:52:40
>219
人の論文を盗む教授なんて殺しても良いんだよ
223デフォルトの名無しさん:05/01/26 07:54:13
>219
人違いだ。ID見ろ、ぼけ
224デフォルトの名無しさん:05/01/26 09:01:17
>>216
いたたたた……
225デフォルトの名無しさん:05/01/26 09:29:35
>216
SYSTEMTIMEの解説読め
226デフォルトの名無しさん:05/01/26 10:16:49
ファイルc:\foo.txtがあってExplorerから右クリックしたときのコンテキストメニューを
自前のプログラムから表示させるのってどうやるの?
227デフォルトの名無しさん:05/01/26 11:58:50
>>226
こんなん?英語の資料しか知らんし、自分では試してもいないけど・・・
ttp://www.codeguru.com/Cpp/COM-Tech/shell/article.php/c4505/
228デフォルトの名無しさん:05/01/26 12:15:45
>>223 (°Д°)ハァ? 何処にIDが?
229デフォルトの名無しさん:05/01/26 14:01:27

IDの見方知らない人
230デフォルトの名無しさん:05/01/26 14:05:18
そうだな、見えないやつはアフォだし。
231wonapi:05/01/26 15:39:28
WinDDK, VDM, UN*X/Linux dev, BTRON dev, syscallのいずれかに詳しい人連絡下さい。タスクを与えます。

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

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

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


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

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

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

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

日本語の通るエディタのオープンソース使ってもいいんだぜ
271デフォルトの名無しさん:05/01/27 19:30:09
↑馬鹿発見
272デフォルトの名無しさん:05/01/27 19:48:57
パソコン使える奴はいいよな…
273デフォルトの名無しさん:05/01/27 20:13:10
>268
どこにあるの?
**************ault.asp?url=/library/en-us/intl/ime_9ulh.asp
ここにのってるサンプルじゃないよね?
てか、日本語のMSDNにのってねいよ
274デフォルトの名無しさん:05/01/27 20:25:43
わかった。
GCS_RESULTSTR を使って取得すると、それまでコンポジションにあったSTRが取得され、
GCS_COMPSTRを使うと、新しく入力されたSTRが取得される。
たとえ、lParameがGCS_COMPSTRであっても
275デフォルトの名無しさん:05/01/27 20:30:07
あと、漢字入力でスペースを入力したときなんだが、
WM_IME_COMPOSITION が発行されないのはなんで?
276デフォルトの名無しさん:05/01/27 20:38:21
WM_IME_CHARで判断しときなさいってことじゃないの?
よくわからんけど。
277デフォルトの名無しさん:05/01/27 21:01:13
>273
当たり前だ。日本人向けに情報を流すわけないよ。慈善団体じゃないんだから。裏でぐぐって30秒で見つけろよ
278デフォルトの名無しさん:05/01/27 21:11:56
>>273
高卒?
279デフォルトの名無しさん:05/01/27 21:20:32
小中退です。
280デフォルトの名無しさん:05/01/27 23:22:10
なんだ。俺の勝ちか
281デフォルトの名無しさん:05/01/27 23:59:51
英語できない漏れは負け組みですか?(゚∀゚)
282デフォルトの名無しさん:05/01/28 00:04:34
なことは無い、日本語できないやつよりはまし
283デフォルトの名無しさん:05/01/28 08:16:26
そこら辺に落ちてるフリーのバイナリエディタとかって
1バイトごとに空白入ってるけど空白にキーボードフォーカスが移動しませんよね?
あれってどうやればできるんですか?
284デフォルトの名無しさん:05/01/28 08:35:14
>>283
エディットコントロール使わずに
独自に表示・入力受付のコードを書いてるんだろう
285デフォルトの名無しさん:05/01/28 08:36:49
>>193
> 193 :デフォルトの名無しさん :05/01/25 09:37:47
> そこら辺に落ちてるフリーのバイナリエディタとかって
> 1バイトごとに空白入ってるけど空白にキャレットが移動しませんよね?
> あれってどうやればできるんですか?
286デフォルトの名無しさん:05/01/28 08:37:06
X座標を調べて、空白の所に移動する場合は2マス移動とかしてんじゃね?
287デフォルトの名無しさん:05/01/28 08:39:20
>283をほかでも見た気がするが…
288デフォルトの名無しさん:05/01/28 13:10:21
>>287
おまいは2レス前も読めないのか?
289デフォルトの名無しさん:05/01/28 15:21:32
>>288
だから、2レス前で見たと言ってるんじゃないかな?
290デフォルトの名無しさん:05/01/28 15:34:16
タスクバーの色を変えるapiありますか?
291デフォルトの名無しさん: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) は別として)
292デフォルトの名無しさん:05/01/28 15:41:23
逆にRemovePropしねーとSetPropしたHANDLEが握られたままだから
解放できねってことじゃねーのかな。
だから、弊害はそのHANDLEによるんじゃねーか。
293デフォルトの名無しさん:05/01/28 16:21:56
>290
Hookでタスクバーのプロックに寄生
294デフォルトの名無しさん:05/01/28 16:29:12
>>293
初心者なので言ってる意味がわかりません
295デフォルトの名無しさん:05/01/28 16:45:08
>>290
SetSysColors()
296デフォルトの名無しさん:05/01/28 16:51:24
>294
システムカラーを変える場合、
int i=COLOR_3DFACE;
DWORD dw=RGB(赤,緑,青);
SetSysColors(1,&i,&dw);

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

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


324デフォルトの名無しさん:05/01/29 14:53:33
別スレでやったほうがよくね?
325デフォルトの名無しさん:05/01/29 15:22:33
wisdomで勉強中なんですが、
たまに、明示的なキャストが必要とでてくるのですが
キャストせずにすむ設定などはないのでしょうか?
326デフォルトの名無しさん:05/01/29 15:26:33
>>325
コードの実例みせてちょ
327デフォルトの名無しさん:05/01/29 15:30:57
>>323
そのコードで何がしたいのか教えて欲しい。
第一、どれくらいの精度が欲しいのさ。
328デフォルトの名無しさん: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)とかを、たせばいいんでしょうか
329デフォルトの名無しさん:05/01/29 15:42:29
明示的なキャストが必要
て書いてあるだろ
330デフォルトの名無しさん:05/01/29 15:51:02
>>328
CreateDIBSection()はHBITMAP型を返すはずだが
なんでそんなエラーがでるかな・・・???
331デフォルトの名無しさん:05/01/29 15:53:58
>>328
hBMP っていう名前の変数が複数あるとか、なんか変数宣言とかに原因がありそうな・・・
332デフォルトの名無しさん:05/01/29 15:58:18
>>328
STRICTマクロが定義してあると、ハンドルは構造体のポインタになって、
明示的なキャストが必要になる。
winnt.h参照。
333デフォルトの名無しさん:05/01/29 16:00:17
>>330-331
もうお前ら答えなくていいよ。
334デフォルトの名無しさん:05/01/29 16:08:26
>>328
CreateDIBSectionの第四引数の型はvoid **だよ。
335デフォルトの名無しさん:05/01/29 16:09:36
>>332
もうお前答えなくていいよ。
336 ◆utqnf46htc :05/01/29 16:15:27
こんにちは
337 ◆rqDA/8e1Lo :05/01/29 16:16:09
さようなら
338 ◆USIWdhRmqk :05/01/29 16:23:10
こちこちこっちん
339 ◆u47L8X93Gk :05/01/29 18:51:24
こっちんこっちんこっちんこっちんこっちんこっちん
340デフォルトの名無しさん:05/01/29 19:40:08
システムメニューとウィンドウ右上のボタンについて質問です。

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

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

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

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

345デフォルトの名無しさん: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);

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

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



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

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

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

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

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

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

まぁ、数万回も回せば、見なくても分かるんじゃね?
381デフォルトの名無しさん:05/01/31 14:32:39
>>374
GetWindowThreadProcessID 使ってプロセスIDとってそこから取得でたと思う
382デフォルトの名無しさん: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が返って来て失敗します。
得たファイル名だけでは無く、それとは関係ない画像ファイルでもです。
原因はどこに考えられるでしょうか。教えてください。
383デフォルトの名無しさん:05/01/31 15:27:02
384デフォルトの名無しさん:05/01/31 15:38:26
>>384
ありがとうございます。調べて見ます。
385382:05/01/31 15:39:02
>>383へです。
386382:05/01/31 16:09:20
>>383さんにお教えいただいたリンクから、
何が原因でエラーが起こったか調べるAPIがあるのが分かり、
調べた所、「指定したファイルが見つかりません」と出ました。

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

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

原因が分かったので、GetOpenFileNameで変更されたパス?を
元に戻すコードを調べたいと思います。どうもありがとうございました。
387デフォルトの名無しさん:05/01/31 16:28:38
lpstrTitleの方を使ってんじゃねーか?
388デフォルトの名無しさん:05/01/31 16:29:21
じゃない、lpstrFileTitleだ
389デフォルトの名無しさん: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

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

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

WinXPより前のOSだと、インストールしないといけないけどね。
418デフォルトの名無しさん:05/02/02 01:53:18
>>417
> WinXPより前のOSだと、インストールしないといけないけどね。
exeの横にdllを置けばOK。
419デフォルトの名無しさん:05/02/02 02:44:43
>>413
新品のPC買う人でXP以外、って意味ならね。
わざわざ2000入れる人も居るみたいだし
420デフォルトの名無しさん:05/02/02 03:38:24
DirectX で読み込んでみるとか
421デフォルトの名無しさん:05/02/02 07:51:04
SDKでツリービューコントロールについて質問です。
編集可にしたい場合はウィンドウスタイルにTVS_EDITLABELSを付け加えますが、
編集可のアイテムと不可のアイテムを混合させたい場合は
どのようにするのがいいでしょうか?
422421:05/02/02 07:58:53
自己解決しました。m(_ _)m
423デフォルトの名無しさん:05/02/02 08:27:51
>>422
せめてどうやったのか書いてくれ
424デフォルトの名無しさん:05/02/02 08:34:46
>>409
ソフトでやるなら、フィルタドライバをかませる
そうでなければ、プロトコルアナライザを使う
425421:05/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;
426デフォルトの名無しさん:05/02/02 10:20:40
タスクマネージャとかで終了させようとしたときに、
操作が拒否されましたと出るようにするにはどうすればいいですか?

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

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

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


431デフォルトの名無しさん:05/02/02 11:27:59
>>430
>難しかったらMFCでもOKです。
この一文でキサマがどれだけプログラムできないかが
よく分かった。
432デフォルトの名無しさん:05/02/02 11:29:17
>>430
部品だけ教えてやる
SetTimer
KillTimer
CreateToolHelp32Snapshot
Process32First
Process32Next
CloseHandle
433デフォルトの名無しさん: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)
に、ソースコードがそのまんま載ってる。実際にコンパイルして確認した。
434デフォルトの名無しさん:05/02/02 11:42:13
>>430
if (AfxProccessFind("notepad.exe"))
 //見つかった
else
 //見つからない
435デフォルトの名無しさん:05/02/02 11:53:31
>>433
PSAPIはWin9x系未サポートな罠
436デフォルトの名無しさん:05/02/02 12:30:33
>>435
今更Win9x系をサポートする必要あるのかねえ。
やっぱあるかねぇ。
437デフォルトの名無しさん:05/02/02 12:39:07
特殊な場合を除いて9x系は無視して良いと言っても過言ではない。
最近はUnicodeビルドばっかりやってる。
438デフォルトの名無しさん:05/02/02 13:03:43
>>411
既出だけど、gdiplus.dllは再配布可能。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

このページは準備中です
申し訳ありませんが、このページは現在利用できなくなっています。しばらくたってからもう一度お試しください。ご不明な点があれば、ヘルプをご覧の上、お問い合わせください。
507500:05/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);

だと、縁有りになりますね。
508デフォルトの名無しさん:05/02/03 17:46:54
>>504
それって2バイト文字考慮されてなかった希ガス
509デフォルトの名無しさん:05/02/03 17:48:11
510デフォルトの名無しさん:05/02/03 17:48:22
>>507
dwExStyleを初期化せずにdwStyle &= ~WS_THICKFRAME;ですかぁ?
511500:05/02/03 17:54:06
いえ、dwExStyle=0として試しましたが、駄目でしたよ。

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

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

ですが何か?
515500:05/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
516500:05/02/03 18:13:05
leftとtopに、2ドットのラインがあるんですよね。
その2ドットは多少の色違いがあるから、窪みがあるように見える。

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

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

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

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

となります。

これは私が何か問題のある行動、または足りない設定があるのでしょうか?
それとも単にSDKヘッダの定義ミスで特に問題のない事なのでしょうか?
また、回避策はあるのでしょうか?
できればSetWindowLongPtrの為だけに C4244を#pragmaでオフにすることは避けたいのですが・・・
524デフォルトの名無しさん:05/02/03 18:33:31
525デフォルトの名無しさん:05/02/03 18:34:59
>>523
キャストすれば?
526デフォルトの名無しさん:05/02/03 18:41:00
>>523
SetWindowLongPtrの戻り値をLONG/long型の変数に代入しているならLONG_PTRにしろ。
527デフォルトの名無しさん:05/02/03 18:44:29
LONG_PTRって、ポインタのような名前のくせに
実際にはlongか__int64ってのはなんでだろ。
528デフォルトの名無しさん: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); // 内容は適当
}

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

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

 LONG dwNew = 100; // 数値は適当
 SetWindowLongPtr(NULL, 0, &dwNew); // 内容は適当
}
533デフォルトの名無しさん: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を使ってます。
534デフォルトの名無しさん:05/02/03 20:41:08
ttp://www.kumei.ne.jp/c_lang/setvc.htm
これの一番下か?
535デフォルトの名無しさん:05/02/03 20:44:13
>>534
あ、そんなところに・・・・
これはどのように治せばいいのでしょうか?
536デフォルトの名無しさん:05/02/03 20:58:34
537デフォルトの名無しさん:05/02/03 21:06:53
myProg.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
538デフォルトの名無しさん:05/02/03 21:11:13
>>537
あ、出来ました
どうもありがとうございました^^
539デフォルトの名無しさん:05/02/03 21:17:24
猫以下だな…
540523,528:05/02/03 21:17:28
>>532
それだとSetWindoLongPtrを使う意味がまるでなくなってしまうような orz

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

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

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

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

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

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

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

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

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

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

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

>>598
そういうのも考えていました。私のはSetTimerの方でしたが。
WM_KEYTOUCH、WM_KEYPUSHとかあればいいんですけど。
601デフォルトの名無しさん:05/02/04 21:58:05
>>584
1xとか書いててそのまま飯食ってた……
今の所、>>597>>599>>592というレスがあるみたいなので、調べてみます。
602デフォルトの名無しさん:05/02/04 22:06:31
>>601
実装はスレッドだが、CreateTimerQueue,付近を調べれば?
知ってんじゃないの?SDKの同期/非同期サービスだが、知っていたらごめん。
いやー、あんた知ってるよね
603デフォルトの名無しさん: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)もサイズを求める物ですよね?
こいつはいったい何のためにいるのでしょうか?
604デフォルトの名無しさん:05/02/04 22:30:06
やりたいことは
あるソフトに、メッセージ(とりあえず、マウス左ボタンダウン)を投げたいのです

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

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

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

nLenが既にもう完全なhEditのサイズかと思ってました
本当に間抜けな質問申し訳ありません
曇ってたのがすっきり晴れました
マジでありがとう
608デフォルトの名無しさん:05/02/04 22:47:50
sizeof(TCHAR) * (nLen + 1)
609603:05/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バイトだとしたら
メモリーの無駄遣いしまくってしまってないでしょうか?
610デフォルトの名無しさん:05/02/04 23:05:04
>>606
LPTSTRのさいずはかわらねーよ
611デフォルトの名無しさん:05/02/04 23:06:10
>>609
あんた、釣りがへた、
典型的なハード知らないソフトウエアエンジニアー
612603:05/02/04 23:12:09
>>611
エンジニアなどたいした肩書きは無いですよ

独学で猫でもわかるを読んで勉強してるので
知り合いにCなどが出来る方がいないもので変な理解をすると
変更が効かずどんどん沼にはまっていってしまって・・・・
613デフォルトの名無しさん: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バイトだとしたら
> メモリーの無駄遣いしまくってしまってないでしょうか?

…どこを指しているのかワカラン
614603:05/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バイトだとしたら
メモリーの無駄遣いしまくってしまってないでしょうか?

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

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

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

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

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

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

malloc, new

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

HeapAlloc

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

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

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


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

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

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

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

そのAPIに「あいさつ」という文字列を引数として渡すことで、漢字変換対象のリストを表示させるみたいな。
661デフォルトの名無しさん: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のフロー制御の知識とか本が無いと意味不明だったきがする。

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

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

イベントが上がりっぱなしなのがなんでなのかが
わかってないのよ、私。
受信バッファ読んだらイベント下がると思ってたんだけどな・・・
勝手な思い込みに近いけど。
669デフォルトの名無しさん:05/02/06 00:22:09
ウィンドウを常にアクティブにする方法ってありますか?
670デフォルトの名無しさん:05/02/06 00:33:22
Zオーダーが一番上とかならあるけどな
671デフォルトの名無しさん:05/02/06 00:36:52
>>668
受信バッファ小さすぎるとか
ReadFile()が追いついてないとか
672デフォルトの名無しさん:05/02/06 01:10:18
フックして、他のプロセスへのWM_ACTIVATEAPPを潰してはどうでしょう?
673デフォルトの名無しさん:05/02/06 01:18:07
>>668
FILE_FLAG_OVERLAPPED を指定した場合は IOがペンディングになってるかどうかをチェックしないと。
674デフォルトの名無しさん:05/02/06 03:49:26
ファイル名の変更はどうすれば良いのでしょうか?
Win32APIで出来ますか?
675デフォルトの名無しさん:05/02/06 03:51:49
できます。
676デフォルトの名無しさん:05/02/06 03:57:51
>>674
MoveFile()
rename()
677デフォルトの名無しさん:05/02/06 13:56:31
すみません。waveOutWrite()で聞きたいことあるんですが、
まずwaveOutWrite()でヘッダ送る(音データが格納されているバッファのアドレスも送られる)。
その後に音データバッファのデータを変更してもOKなんですか?
もちろん再生位置付近のところとかは、いじらないようにします。
678デフォルトの名無しさん:05/02/06 16:30:10
聞く前にやってみろ
679677:05/02/06 18:07:04
>>678
いや、やってみて普通にできたから聞いてみたんだが…
共有違反とかしてそうだから不安で聞いてみた。
680デフォルトの名無しさん:05/02/06 19:41:35
LoadImageで画像表示してます。
画像Aを背景にして、画像Bを上に表示したいのですが、画像Bの要らない部分を透明に出来ますか?
分かる方お願いします。
681デフォルトの名無しさん:05/02/06 19:48:54
MaskBlt
682デフォルトの名無しさん:05/02/06 22:09:37
683デフォルトの名無しさん:05/02/06 22:12:32
半角カナを全角カナへ変換するAPIはありませんでしょうか?
684デフォルトの名無しさん:05/02/06 23:03:45
685デフォルトの名無しさん:05/02/07 04:01:37
CreateFile関数なんですが

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

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

ちなみにCreateのときにES_AUTOVSCROLLとES_MULTILINEを設定すると
鳴らなくなるんですが、処理後に改行してしまいます。
690デフォルトの名無しさん:05/02/07 14:27:38
>>689
耳を塞げ
691デフォルトの名無しさん:05/02/07 15:43:27
>>689
エディットボックスをサブクラス化してやっているって事でいいのかな?
だとしたらWM_KEYDOWNで処理した場合はCallWindowProcに渡さなければいいんでないか?
状況が良くわからないので答えようがないけど
692689:05/02/07 16:08:00
>>691
処理後return 0で返したけどだめ。
また、キーコードが入ってるwpを0にしてもだめでした
693デフォルトの名無しさん:05/02/07 16:42:02
>>685
C言語の超超基本的な事でWindowsAPI全然関係ないぞ・・・
694デフォルトの名無しさん: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 が未解決です。

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

もう一つ質問があるのですが、画像表示を速くすると、画像がちらついてしまいます。
どうすればいいのでしょうか?
699デフォルトの名無しさん:05/02/07 17:32:10
>>698
背景を消去しないようにする
(WM_ERASEBKGNDをDefWindowProcに渡さない)
700デフォルトの名無しさん:05/02/07 17:34:26
スタートアップに登録されたアプリケーションが、
OSの起動時だけ、実行したいプログラムがあるとして、
OSの起動時か?そうでないかを知るには
どうしたら良いのでしょうか?
宜しくお願いします。
701691:05/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();
}
702デフォルトの名無しさん:05/02/07 17:46:44
>>698
すいません。どのように記述すればいいのでしょうか??
703デフォルトの名無しさん:05/02/07 17:47:18

>>699
です
704デフォルトの名無しさん:05/02/07 17:52:20
>>703
case WM_ERASEBKGND: return 0;
705689:05/02/07 17:54:15
>>701
WM_CHARにしたらできました
教えて頂いてありがとうございます
706デフォルトの名無しさん:05/02/07 18:05:39
LCMapStringって「ガ」を「ガ」に変換してくれますか?
707デフォルトの名無しさん:05/02/07 18:10:31
>>700
GlobalAddAtomじゃダメかな?
708デフォルトの名無しさん:05/02/07 18:11:50
>>706
やってみたら?
709デフォルトの名無しさん:05/02/07 18:25:02
>>708
やってみたら「ガ」を「ガ」になった。
すごいAPIだ
710デフォルトの名無しさん:05/02/07 18:34:04
日本語おかしくてもプログラミングはできるんですね。
711デフォルトの名無しさん:05/02/07 18:37:45
をかしくても良いぢゃない。日本語だもの。
712デフォルトの名無しさん:05/02/07 18:52:14
>>704
ありがとうございます。
出来たのですが、ちと、おかしくなってしまいます。
WM_KEYDOWNでキー入力をすると画像を描画するようにしてるので、押しっぱなしにすると描画され続けてしまいます。
WM_KEYUPだとはなしたときなので使いづらいです。
キー入力で押し放しでも1回の入力にする方法って有りますか?
713デフォルトの名無しさん:05/02/07 18:54:40
fRepeatでも見れば。
714デフォルトの名無しさん:05/02/07 19:06:46
おかしいのはあなたの頭。
715デフォルトの名無しさん:05/02/07 19:11:27
あるWindowに属するクライアント内にマウスカーソルがあるときは、WM_MOUSEMOVEでひろえばいいですが、
あるWindowに属するクライアント外にマウスカーソルがあるということがわかる、WMメッセージ(または何か別の方法)はありますか?

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

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

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

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

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

Win32プログラミングで使いたいのです。
738デフォルトの名無しさん:05/02/07 21:31:31
「コントロールパネル」->「色の設定」
739734:05/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よ、なんていうか。

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

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

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

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

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

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

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

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

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

EXPORTS
Foo = B.Foo

って書くのねん。(ファイル名が B.DLL の場合)
769デフォルトの名無しさん:05/02/08 15:38:24
おぉ、目から鱗ビーム
770デフォルトの名無しさん:05/02/08 16:01:55
Caretの真下に窓出したいんだけどCaretの高さってどうやって知るの?
771デフォルトの名無しさん:05/02/08 16:24:57
ListView_SortItemsでリストビューをソートしようとしたんですが
コールバック関数の第一第二引数が同じものがきていて機能しません。
いくつかサンプルみたんですがどれも同じようにやっていて、原因がわかりません。
知っている方いたら是非ご教示お願いします…
772デフォルトの名無しさん:05/02/08 16:27:50
>>771
んなこたーない。
ソース晒してみ。
773デフォルトの名無しさん: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が入ってる)
77469式フリーPG ◆hND3Lufios :05/02/08 17:11:50
すぐに閉じることが出来るけど、アプリ終了時に全てのスレッドの
終了をプライマリスレッドが待機できるようにとっておくけどなぁ。<スレッドハンドル

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

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

今までBCBでやっていたのでこういう部分はほとんど触れなかったんですが
なかなかおもしろいです。
ありがとうございました。
780デフォルトの名無しさん:05/02/08 18:24:17
>>775
>760ってことでしょ。
781デフォルトの名無しさん:05/02/08 18:30:57
スレッドがウインドウプロシージャを必ず持つのならそれでも良いけどなw
782デフォルトの名無しさん:05/02/08 19:39:23
>>760
子に終了メッセージを投げて、子から終了したよメッセージが来るまで
待機するのかな。で、その返答メッセージを親が受け取った時って、
子のスレッドは*完全*に終了しているのかな?
783デフォルトの名無しさん:05/02/08 19:44:29
>>782
「終了したよ」メッセージではなく
「お手討ちにどうぞ」メッセージならどうかな?
784デフォルトの名無しさん:05/02/08 19:53:15
_beginthreadexで本当に開放いいの?
CreateProcessとかCreateThreadとかはいざ知らず。
英語にも日本語にも先に開放して良いと書いてないよ・・・
785デフォルトの名無しさん:05/02/08 20:00:03
Cランタイム内で確保されたTLSはどのタイミングで解放されるんだろう。
786デフォルトの名無しさん:05/02/08 20:19:33
VC++とか持ってるならCRT版の_beginthreadexなんかがなにやってるかはソース見れば分かる。
787デフォルトの名無しさん:05/02/08 20:27:27
>>786
おおーソースあったのねん、知らなかった。thx
おおー、読んだ読んだ、なるほど。ありがと。
あと、NTカーネルのソースありませんか、なんちって
788デフォルトの名無しさん:05/02/08 20:42:23
自作クラスのWindowStyleだけで使う独自な値って、どの辺の値にしたらいいもの?
(EditTextだとES_LEFTの0x0000L〜ES_NUMBERの0x2000L辺りみたいだけど)
何か、WS_POPUPが0x80000000とかWS_TABSTOPが0x00010000とかみたいだし、
下4桁は自由に使っても競合しない?(他のクラスを継承した場合とか以外)
789デフォルトの名無しさん: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に変えてこのスタイルを適用してみたんですけど、
やっぱりできませんでした。何か間違っていますか??
790デフォルトの名無しさん:05/02/08 21:15:36
エディットコントロールに一定以上の容量を確保したバッファを送るとキーボードからの入力を受け付けなくなるのですがなぜでしょうか?教えてください
791デフォルトの名無しさん:05/02/08 21:45:12
9x系?
792デフォルトの名無しさん:05/02/08 21:54:30
>787
このまえ流出したって騒ぎがあったな、そういや。
793デフォルトの名無しさん:05/02/08 22:07:24
>>761
>>766
>>768
おおアリガd 早速やってみる。

>>767
ごめんなさい。自然言語は苦手なんです。
794デフォルトの名無しさん:05/02/08 22:39:01
_beginthreadexはソースないだろ
795デフォルトの名無しさん: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.
796デフォルトの名無しさん:05/02/08 22:55:04
794の目はfusianasan?
797デフォルトの名無しさん:05/02/08 23:02:45
warata
798デフォルトの名無しさん:05/02/08 23:08:46
まー俺はウニバーサルだし、仕方が無い
799デフォルトの名無しさん:05/02/08 23:13:59
うぱにしゃっと?
800デフォルトの名無しさん:05/02/08 23:28:20
MDIにツールバーをつけ、ChildWindowを最大化するとツールバーに合体(?)せずに上書きしてしまいます。
これを回避するにはどうすればよろしいでしょうか?
サンプルなどありましたら宜しくお願いします。
801デフォルトの名無しさん:05/02/08 23:36:06
動的確保したメモリに音楽ファイルのデータを書き込んで
そのデータを再生したいのですが、

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

ではなく

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

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

>>803
どうも!
”トリプルバッファ”で検索したら使えそうなサンプルが見つかりました。
早速試してみることにします。
805デフォルトの名無しさん:05/02/09 00:34:24
>>804
トリプルバッファでストリーミング再生するとマルチスレッド組むようになるだろうから、
少し上のマルチスレッドのレスも参考にするとよいぞ
関係ないが、俺は昔、再生スレッドとwaveOutOpen()の同期を取り忘れてて気づくのに骨が折れたことがある
806デフォルトの名無しさん:05/02/09 01:36:42
質問です。
CreateFile系API関数にはバイナリやテキストモードの設定できる項目がないようですが、
これはバイナリ形式しか取り扱えないということなのでしょうか?
807デフォルトの名無しさん:05/02/09 01:52:19
>>806
もう少しひねりが欲しい
808デフォルトの名無しさん:05/02/09 02:07:59
質問です。 
CreateFile系API関数にはアペンドモードの設定できる項目がないようですが、 
これは上書き形式しか取り扱えないということなのでしょうか? 
809デフォルトの名無しさん: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() でも使っとけ。
810デフォルトの名無しさん:05/02/09 07:11:08
>>809
はいはい
811806:05/02/09 12:35:07
>>809
_wfopen()を使うことにしました
812デフォルトの名無しさん:05/02/09 14:21:11
>>811
_tfopenもよろしく
これもAPIじゃないけど。
813デフォルトの名無しさん:05/02/09 15:38:52
listviewで指定した行を選択させるにはsendmessageにどういった引数を指定すればいいですか?
81469式フリーPG ◆hND3Lufios :05/02/09 15:53:35
第1引数にHWND
815デフォルトの名無しさん:05/02/09 15:53:38
2回呼ぶ
先にindex調べて次に中身

816813:05/02/09 17:21:39
例えば3行目の行を選択させるにはどの様にすればいいいですか?
817デフォルトの名無しさん:05/02/09 17:32:50
ミリ秒単位の時間を得たい場合はどのAPIを使えばいいのでしょうか?
818デフォルトの名無しさん:05/02/09 17:36:24
systemtime
819デフォルトの名無しさん:05/02/09 17:37:59
GetSystemTimeだごめん
820デフォルトの名無しさん:05/02/09 17:50:22
まぁ、単位がミリ秒ってのと精度は別なわけだが。
821デフォルトの名無しさん:05/02/09 17:52:18
そういうなよ、
そんなら、あなたのパソコンはUTCに完全に同期してるとでも?
822デフォルトの名無しさん:05/02/09 18:15:20
>>813 おながいします
823813:05/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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

上記みたいに単純な形式ならばstrtok()が使えるけど、
実はCSVには少し複雑なルールがあったりするので、
結局は自力で解析処理を書くことになる。
895デフォルトの名無しさん:05/02/11 13:44:08
CSVあたりはクラス自作しとくと便利
896デフォルトの名無しさん: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()で同じようなことが出来るでしょうか?
897デフォルトの名無しさん:05/02/11 13:53:27
fgetc
898デフォルトの名無しさん:05/02/11 13:57:40
つうかCのスレで聞けば?
899デフォルトの名無しさん:05/02/11 14:19:49
>>896
Cの標準関数で普通にできるだろ。
標準関数群はOSごとのAPIの差異を吸収してどのOSでも共通のインタフェースで使えるようにしてるんだから。
900デフォルトの名無しさん:05/02/11 14:24:54
店舗ID,店舗名

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

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

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

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

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

これは逆でした。

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

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

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

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

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

UI スレッドが何らかのメッセージを受け取るのと同じような処理をする場合は
どうしていますか?WM_TIMER で CriticalSection の中を監視?
931デフォルトの名無しさん: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);
にするとウインドウが一面黒くなってしまうんだが、白くするにはどうすればいいのでしょうか?
932デフォルトの名無しさん:05/02/11 23:11:02
文字の部分だけは周りが白くなってあとは真っ黒です。
933デフォルトの名無しさん:05/02/11 23:15:42
オバキュー
934デフォルトの名無しさん:05/02/11 23:21:42
>>930
人間が使うプログラムならメッセージでもそんなに人間がかんじられるほど
遅くなることはありません。
いまいち処理が分からんので、回答できない。
935450:05/02/11 23:37:24
基本的には人間が使うプログラムなんですが、
一部のデータは大量に送られてきます。
現時点では全部のデータが一度メッセージ経由で UI に送られています。

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

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


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

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

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

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

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

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

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

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

この改変と通信処理の別の部分の見直しで多少改善したようです。
データのやりとりの速度が多少マシになって、>>918 で書いた
データが途中で詰まって、ちゃんと来ない現象はなくなりました。
946デフォルトの名無しさん:05/02/12 17:26:50
>944
wsprintf(buf,"%d点",n);
947デフォルトの名無しさん:05/02/12 17:29:54
948デフォルトの名無しさん:05/02/12 17:38:10
どんなスレッド(通信なども)も全部UIにして、スレッド間通信をすべて
メッセージでやってるDQNコードは見たことあるな。
949デフォルトの名無しさん:05/02/12 18:02:24
GetDC()で取得したハンドルは描画が終了したらReleaseDC()で
解放しなければなら無いらしいんですが

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

WM_DESTROYを受け取ったときにプロシージャでReleaseDC()とか無理でしょうか?
950デフォルトの名無しさん:05/02/12 18:12:29
951デフォルトの名無しさん: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..系とかイベントオブジェクト
あまり使った事ないように見えるけどそうかな?だとしたらまずその辺から使い方調べた方がいいかも。
952デフォルトの名無しさん:05/02/12 18:38:50
>>949
だめです
953デフォルトの名無しさん:05/02/12 18:51:14
>>949
大丈夫です
954951:05/02/12 18:51:59
>>945
951で色々書いたがもしちゃんとわかってての話であれば951は聞き流してくれ。
お互い掲示板じゃそこまで細かくかけないしね(´・ω・`)
955450:05/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 以上の値にした方がいいって事でしょうか。
956デフォルトの名無しさん:05/02/12 19:00:29
>949
それが嫌になったらC++にしな
957951:05/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..等で待機しておくのが望ましいというか普通という事になる。


※厳密に言えば大嘘だらけになるが、概念をわかりやすく説明する為にあえて大嘘ついております。
958デフォルトの名無しさん:05/02/12 19:24:49
非可視のウインドウを持ったUIスレッドを作りまくる奴いるよね。
ワケワカラン
959デフォルトの名無しさん:05/02/12 19:24:53
>957
説明をダウンサイジングして用語を標準化してくれる?
960デフォルトの名無しさん:05/02/12 19:25:07
c++にて、Write/GetPrivateProfileStringを使ってるんですが
日本語(text=hogeホゲ のような)データは扱えないんでしょうか?
文字化けしてしまうのですが…
961デフォルトの名無しさん:05/02/12 19:26:45
>956
MFCってことでしょうか?
C++を使ったwinプログラムって他にもありますか?
962デフォルトの名無しさん:05/02/12 19:34:02
>960
UTF-16にしてバイナリ扱いにすれば?
Get..Struct
963951:05/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...とイベントその他を活用すれば資源を無駄にせずに有益に使用できる。※
964デフォルトの名無しさん: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_;}
};
965951:05/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は一つのスレッドしかアクセスしないように出来るという事になり、安全になる。
966デフォルトの名無しさん:05/02/12 19:58:42
>965
そんなベタな説明するくらいなら自分のホムペに書け。マジで邪魔だ
967951:05/02/12 20:00:18
長すぎるしなんか方向ずれてきたのでやめておくね orz
968951:05/02/12 20:06:49
>>966

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

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

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

2:実際の送信部分の
if(BufSize){
  Send();
}

Waitfor...(バッファ満杯イベント)
Send()
のようにうまいこと改造する。

こんだけでもかなり変わるはず。今度こそ最後です、orz ドゲザ
971デフォルトの名無しさん:05/02/12 20:20:44
>>969
WinSockの2.0はイベントでやりとりするっしょ。
メッセージでやり取りするのは、Win16の遺物であるWinSock1.1
972デフォルトの名無しさん:05/02/12 20:24:28
InterlockedIncrementとInterlockedDecrement APIは、
特定のリソースの排他制御に適する。
TryEnterCriticalSectionも見よ。
973デフォルトの名無しさん:05/02/12 20:27:49
>>945
>2. ワーカースレッドは 100byte 未満の 10000 個のデータを送信しています。
 数が多すぎる問題は当然として、
 こんだけ多いなら、ワーカースレッドからそのまま通信したほうがよくないか?
974デフォルトの名無しさん:05/02/12 20:37:08
>>971
耳学問?
実用のWinscokプログラムの経験ないのかな。
975デフォルトの名無しさん:05/02/12 20:38:25
>>974
メッセージでI/O完了ポートを使えるのか。初耳で砂。
976デフォルトの名無しさん:05/02/12 20:41:50
977(・∀・)ニヤニヤ:05/02/12 20:46:53
>>976
ひょっとしてイベントが同時に待機できる最大数を知らないの?
978デフォルトの名無しさん:05/02/12 20:50:52
「よりによってWSAEventSelect()を引き合いに出すとは厨丸出しだな。」
と言うのはみっともないから我慢しようかと思ったが、我慢が体に悪いので言うことにしました。

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

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

>>I/O 完了ポート
ところで I/O 完了ポートに関しての初心者向けの説明・資料ってありませんか?
Winsock FAQ とかに名前は出てくるのですが、詳細が不明で・・・。
オーバーラップド I/O とか言うのもあるんでしたっけ・・・。
98769式フリー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

この本とか。。。マルチスレッドスレのほうで聞いてみるのも良いかも。
988デフォルトの名無しさん: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' に変換しました。データが失われているかもしれません。
という警告が出ます
なぜなのでしょうか?
989デフォルトの名無しさん:05/02/12 23:27:02
インストーラが行っている処理について調べているのですが…
コントロールパネルの「プログラムの変更と削除」で表示されるプログラム一覧に
登録するためのAPI、もしくはそれを管理しているレジストリ等があれば教えてください。
どうぞよろしくお願いします。
990デフォルトの名無しさん:05/02/12 23:59:36
>>988
strlenの返り値型はsize_t、TextOutの引数型はint。
size_tからintに変換して、データが失われているかもしれないから。
991デフォルトの名無しさん:05/02/13 00:01:09
>988
strlenの戻り値はsize_tで
size_tはunsigned intの変名。
TextOutの第5引数はintだから、
キャストしなきゃ警告が出る。
992991:05/02/13 00:02:35
むう、2分遅れか。orz
993デフォルトの名無しさん:05/02/13 01:22:43
>>990-991
返事ありがとうございます。
どういう風に直なおせばいいのですか??
994デフォルトの名無しさん:05/02/13 01:34:04
(int)strlen(str)
995デフォルトの名無しさん:05/02/13 01:35:58
>>994
あ、警告でなくなりました!
どうもありがとうございました。
996デフォルトの名無しさん:05/02/13 03:45:52
"c:\foo\bar\..\"を"c:\foo\"に変換する関数ってないですか?
997デフォルトの名無しさん:05/02/13 04:06:02
GetFullPathName で出来たと思う
998デフォルトの名無しさん:05/02/13 06:23:19
>>996
PathCanonicalize
999デフォルトの名無しさん:05/02/13 06:36:59
999
1000デフォルトの名無しさん:05/02/13 06:37:30
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。