Win32API質問箱 Build27
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
05/01/19 11:51:59Build26:http://pc5.2ch.net/test/read.cgi/tech/1104109858/
Build25:http://pc5.2ch.net/test/read.cgi/tech/1101393155/
Build24:http://pc5.2ch.net/test/read.cgi/tech/1098967135/
Build23:http://pc5.2ch.net/test/read.cgi/tech/1095534704/
Build22:http://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:http://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:http://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:http://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:http://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:http://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:http://pc2.2ch.net/test/read.cgi/tech/1073830065/ ★
Build15:http://pc2.2ch.net/test/read.cgi/tech/1069339866/ ★
Build14:http://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:http://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:http://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやー ごめんなさい。」に巻き込まれた模様
0002デフォルトの名無しさん
05/01/19 11:53:28http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
http://www.google.com/
Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/
0003デフォルトの名無しさん
05/01/19 12:30:180004デフォルトの名無しさん
05/01/19 12:58:510005デフォルトの名無しさん
05/01/19 13:14:320006NameSpace
05/01/19 13:15:260007デフォルトの名無しさん
05/01/19 13:23:00どっかのサンプルを真似しただけだが、
WM_LBUTTONDOWN を捉える。lparam に座標が入っている。
(WM_LBUTTONDOWN で MSDN を検索すると、サンプルがあるのではないか)
modal dialog なら、switch (msg){... の中ですむ。
座標は、local へ変換するかして、お目当ての矩形(pane)と平仄を合わせる。
PtInRect() だっかたかで、目当ての矩形の中にあるなら、GetCPixel() で
色は取り出せる。色の index を求めるなら、その矩形を描いた方法を逆に
辿って、位置を割り出す。256 色の、個々の色の矩形は、多分、幅、高さは
皆、同じだろうから、それで、座標の x, y を割り、数値を一次元に戻せば
よい。
modeless dialog なら、dialog の HWND をグローバルにしておいて、
それから辿る。dialog を閉じたら、HWND は NULL クリアして、以後来ない
ようにする。
0008デフォルトの名無しさん
05/01/19 16:20:31→デバイスの削除/取り外し→デバイスの取り外し
と同じ事をプログラムから行いたいのですが
どのようにすでば良いのでしょうか?
DetachDevice( STORAGE_DEVICE_DESCRIPTOR sdd )
みないな感じのAPIがあると一番良いのですが…
よろしくおねがいします。
0009デフォルトの名無しさん
05/01/19 17:45:55ReadFileの1行番はWIN32APIには無いはず
全部(もしくは途中まで)読み込んで、改行区切りに自分で変換しないと駄目だと思う
1行にこだわっててAPIは何でも良いなら、C標準のfgetsで読み込むのが良いかと
0010デフォルトの名無しさん
05/01/19 17:47:15fgetsって速度が遅いとかいうことはないですか?
0011デフォルトの名無しさん
05/01/19 18:32:270012デフォルトの名無しさん
05/01/19 18:36:19役に立たない回答だねぇ
0013デフォルトの名無しさん
05/01/19 18:38:37社会的に何の信頼もない君の「常識」なんて・・・
0014デフォルトの名無しさん
05/01/19 18:39:360015デフォルトの名無しさん
05/01/19 18:48:540016デフォルトの名無しさん
05/01/19 18:52:12改行を判断するのもごく当たり前にやるしかないのは常識
馬鹿ですか?
0017デフォルトの名無しさん
05/01/19 18:54:500018デフォルトの名無しさん
05/01/19 18:57:170019デフォルトの名無しさん
05/01/19 19:02:35メモリDCを作ってbltで更新する手法はリストビューでも出来ますか?
0020デフォルトの名無しさん
05/01/19 19:04:31の通りにプログラムを作ったらどのようなプログラムになるでしょうか?
0021デフォルトの名無しさん
05/01/19 19:05:540022デフォルトの名無しさん
05/01/19 19:08:07サブクラス化して描画関連メッセージ処理を包むのは、大変そうだ
00239
05/01/19 19:08:18使うのが難しい関数でもないし、試しに使ってみればいい(ReadFileが使えるなら、何も悩まんだろう)
でも、もしfgetsそのものについて質問があれば、C言語関係のスレでよろしく。
0024前スレ999
05/01/19 19:45:42無いですか。
ありがとうございました。
やり方考えます。
0025デフォルトの名無しさん
05/01/19 19:49:40はい、あなたが。
0026デフォルトの名無しさん
05/01/19 19:53:10プログラマの常識はいいがお前の常識は世間に通用しない。
0027デフォルトの名無しさん
05/01/19 19:57:06不必要な書き込みはするな。
0028デフォルトの名無しさん
05/01/19 21:42:03了解しました。
0029デフォルトの名無しさん
05/01/19 22:21:21| | | |
(゚ω゚ ) < けんか、ここまで
。ノДヽ。
bb
0030デフォルトの名無しさん
05/01/19 22:38:36> 906 :デフォルトの名無しさん :05/01/19 22:06:37
> win32apiのReadFileで1行読み込みのプログラムを作ろうと思ってます。
>
> この場合、全データをメモリに読み込んで改行ごとに分けるか。
> 1バイトづつ改行まで読み込んでいくとでは
> どっが効率良いですか?
>
>
> 909 :デフォルトの名無しさん :05/01/19 22:34:22
> >>906
> 死ねマルチ
>
>
> 910 :デフォルトの名無しさん :05/01/19 22:34:25
> >>906
> お前なぁ、実際にやってみたらわかる事だろ?アホか?
0031デフォルトの名無しさん
05/01/19 22:41:40APIって知ってませんか?
0032デフォルトの名無しさん
05/01/19 22:42:19暇人乙
0033デフォルトの名無しさん
05/01/19 22:42:58変な日本語。「知りません」って答えてあげれば満足なのかな。
0034デフォルトの名無しさん
05/01/19 22:44:55モノクロパターンブラシSetROP4
0035デフォルトの名無しさん
05/01/19 22:51:21「知ってません」じゃないと不満足かと
00368
05/01/20 00:40:29自己解決しました。すんまそ。
0037デフォルトの名無しさん
05/01/20 00:52:10n秒後に勝手に閉じてもらいたい。
0038デフォルトの名無しさん
05/01/20 01:00:450039デフォルトの名無しさん
05/01/20 01:01:48そういったものは、知らないです。
SetTimerでタイムアップしたらSendMessageで送ればどうでしょ?
0040デフォルトの名無しさん
05/01/20 01:06:21フックする方法ありませんか?
モーダルなのでどうしようもない気がします。
0041デフォルトの名無しさん
05/01/20 01:29:51プロシージャのアドレス受け取ってすげ替えればいけるのかな?
強引な方法で、もう一個プログラム作るのはダメ?
メッセージボックス作る直前に、「時間が経つと、任意のメッセージボックスを閉じるプログラム」を実行するっての
閉じるメッセージボックスの選択は、ウィンドウテキストをユニークなものにして、サーチするとか
(スレッドとかのが、まだスマートに出来るけど)
0042デフォルトの名無しさん
05/01/20 01:37:06そうすればフックは可能。タイマーまでは試してないから知らん。
0044デフォルトの名無しさん
05/01/20 01:56:340045デフォルトの名無しさん
05/01/20 02:03:46だんだんMessageBoxから遠ざかってる気がしてきました。
数行でやっつけ仕事みたいな感じでできないものでしょうか。
0046デフォルトの名無しさん
05/01/20 02:12:43SetWindowHookEx でローカルフック開始。
直後にメッセージボックス表示。
ウィンドウが作られたYO!ってくるからタイマー開始。
なんも無しで期限がきたら破棄。
期限前に何かあったらタイマー終了。
フックも終了。
ほら。
0047デフォルトの名無しさん
05/01/20 02:23:31unsigned id;
HANDLE cth = GetCurrentThreadId(),
th = _beginthreadex(NULL, 0,
lambda __stdcall(UINT timeout) int {
HWND hmb = 0;
Sleep(timeout);
EnumThreadWindows(cth,
lambda __stdcall(HWND h, LPARAM l) BOOL {
char buf[256];
int Ret = GetClassName(h, buf, 256);
return (Ret && !strcmp(buf, "#32770"), hmb = h) ? 0 : 1; }
, NULL);
if (hmb && IsWindow(hmb))
EndDialog(hmb, 100), SendMessage(hmb,WM_CLOSE,0,0);
}, timeout, 0, &id);
int r = MessageBox(h,text,cap,style);
if (th) CloseHandle(th);
return r;
}
20行だけど。
0048デフォルトの名無しさん
05/01/20 02:25:01google で timeout と MessageBox をキーにして検索したら色々出てくると思うが。
要は、SetTimer 掛けといて時間が経過したら、
FindWindow("MessageBox のタイトル")
で検索かけて、WM_CLOSE をポストするとか、
WM_QUIT を送って、MessageBox 関数から
戻ってきたら、すかさずキューから WM_QUIT を取り除くとか色々方法あるよ。
0049デフォルトの名無しさん
05/01/20 02:25:14return (Ret && !strcmp(buf, "#32770") && hmb = h) ? 0 : 1; }
0050デフォルトの名無しさん
05/01/20 02:26:46ありがとうございました。
0051デフォルトの名無しさん
05/01/20 02:28:480052デフォルトの名無しさん
05/01/20 02:30:42判ると思うけど普通のC言語じゃないからね。
lambdaについてはLISP屋さんにでも聞いてください。
様はインラインでコールバック書いてるだけ。
0053デフォルトの名無しさん
05/01/20 02:34:52なんかわからんがすげー
0054デフォルトの名無しさん
05/01/20 04:25:470055デフォルトの名無しさん
05/01/20 05:41:220056デフォルトの名無しさん
05/01/20 09:05:49どうしたらいいんでしょうか?
アクセス権を変更できるようなAPIが見当たらないのですが・・・
0057デフォルトの名無しさん
05/01/20 09:38:28{
TOKEN_PRIVILEGES tp;
if(LookupPrivilegeValue(NULL,pszSE_Name,&tp.Privileges[0].Luid)){
tp.PrivilegeCount=1;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
return AdjustTokenPrivileges(hToken,FALSE,&tp,0,NULL,NULL);
}
return FALSE;
}
0058デフォルトの名無しさん
05/01/20 10:00:04InitializeSecurityDescriptor,
SetSecurityDescriptorDacl,
OpenProcessToken,
SetTokenInformation
を見よ
0059デフォルトの名無しさん
05/01/20 16:44:530060デフォルトの名無しさん
05/01/20 16:48:26SetTimer関数を呼び出す。
0061デフォルトの名無しさん
05/01/20 16:50:130062デフォルトの名無しさん
05/01/20 17:48:57上手く説明できるか分からないのですが質問があります。宜しくお願いします
VC++.netを使用しています
例えば直線を引く関数MoveToExやLineToがありますが
MoveToEx(hdc, 20, 500);
LineTo(hdc, 500, 500);
にして描いてみると 直線が書けるのですが
ウィンドウのサイズを小さくしていくと途中から見えなくなってしまうのですが(画面の外に出て消えてしまう)
私が書きたいのはサイズを小さくしていっても画面から消えずに
画面が小さくなるに連れて直線もどんどん縮小していくような直線が描きたいのですが
何かいい関数はないものでしょうか?
0063デフォルトの名無しさん
05/01/20 17:53:48ウィンドウの大きさにあわせてMoveTo,LineToに渡す座標値を変える
別解は、SetMapMode
0064デフォルトの名無しさん
05/01/20 18:16:25ありがとうございます
図形描写に適していそうな
SetMapModeが都合よさそうなのでそちらを勉強しようと思います
0065猫にも劣るプログラマー
05/01/20 18:21:490066デフォルトの名無しさん
05/01/20 18:28:190067猫にも劣るプログラマー
05/01/20 19:09:12とかコンパイラがいってくるんですが、どういう意味ですか?
0068デフォルトの名無しさん
05/01/20 19:15:01メモリデバイスコンテキストにLineToして、それを
StretchBlitでクライアントの大きさに縮小して表示したら?
0069猫にも劣るプログラマー
05/01/20 19:16:49これからしっかり調べてきます。
0070デフォルトの名無しさん
05/01/20 21:10:12ありがとうございます参考になります
StretchBlitに縮小率を渡すために画面の縮小率などを計算しとかないといけなくなってきますね
元の大きさと変更後の大きさで計算して求めていかないといけないと・・・・
0071デフォルトの名無しさん
05/01/20 21:13:00線がガタガタになったり、消えたりもする。
0072デフォルトの名無しさん
05/01/20 22:07:510073デフォルトの名無しさん
05/01/20 23:33:21有ったら教えて下さい。
0074デフォルトの名無しさん
05/01/20 23:33:550075デフォルトの名無しさん
05/01/20 23:37:42SetCursorPos
0076デフォルトの名無しさん
05/01/21 01:07:16できました。ありがとう。
0077デフォルトの名無しさん
05/01/21 01:42:26))
ノ)
(,,_ _,,)
(,,____,,_) オーバーサンプリングすればいいんじゃない?
(,,_,,___, ,_)
0078デフォルトの名無しさん
05/01/21 08:03:16#define SetLastErrorEx(dwERROR_,dwSLE_Type) \
_WONSLE##dwSLE_Type(dwERROR_)
#define _WONSLE0(dwERROR_) SetLastError(wERROR_)
...
0079デフォルトの名無しさん
05/01/21 11:22:40これを解除して親ウインドウが前面にくるようにできますか?
0080デフォルトの名無しさん
05/01/21 11:33:57所有権を放棄?
0081デフォルトの名無しさん
05/01/21 17:29:44プログラムによっては文字列が出る機能がありますが、
それはなんという名前なのでしょうか。
実装したいのですが、検索する上でのキーワードにさせていただきます。
008281
05/01/21 17:34:11メニューの下にあるボタン群です。
0083デフォルトの名無しさん
05/01/21 17:37:10008579
05/01/21 19:10:47けどこれでいいんだろうか・・
0086デフォルトの名無しさん
05/01/21 19:24:25最小化したときの挙動とか見て納得ならいいんでない?
0087デフォルトの名無しさん
05/01/21 19:25:13OK牧場
0088デフォルトの名無しさん
05/01/22 01:46:01http://f29.aaa.livedoor.jp/~retoroup/gazoubbs/src/1106325912414.jpg
0089デフォルトの名無しさん
05/01/22 08:25:02現在のマウスカーソルの場所とは関係なく、
フォーカスを持つウインドウへ送られてくるのでしょうか?
ホイール回転のメッセージを、現在のマウスカーソルの
下にあるウインドウに処理させたいときは、いちいち、
現在のマウスカーソルの位置は?
それは自分の上にある?
あるならそのまま処理するけど、そうでないなら
そのウインドウへメッセージを再送する
とかするんでしょうか?
009079
05/01/22 09:09:15>79
トンクス
挙動が気に入らなくなったらウインドウに作りかえます
0091デフォルトの名無しさん
05/01/22 09:13:45ビットマップリソースにしてLoadBitmapで読み込め
0092デフォルトの名無しさん
05/01/22 09:24:05事情がよくわかりませんが、私の 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化
してますが、ここでは何もしてません。
0094デフォルトの名無しさん
05/01/22 09:48:03つーか猫でも〜にあったような
0095デフォルトの名無しさん
05/01/22 10:25:48009688
05/01/22 10:33:370097デフォルトの名無しさん
05/01/22 10:46:03MENU_HOGE MENU
{
POPUP "&Window"
{
MENUITEM "Menu&Item" IDM_HOGE1
POPUP "&ArrowedItem"
{
MENUITEM "&ChildItem" IDM_HOGE2
}
}
}
0099デフォルトの名無しさん
05/01/22 11:07:17正直ただのメニューの作り方もさっぱりわからないだろ。
0101デフォルトの名無しさん
05/01/22 11:10:05んなこたーない
010288
05/01/22 11:10:40010388
05/01/22 11:15:160104デフォルトの名無しさん
05/01/22 11:15:31010588
05/01/22 11:17:34ほんと猫紛らわしい。あのサイトいらね
0106デフォルトの名無しさん
05/01/22 11:23:49>>97 の例の POPUP の行がメニューに現れる時には、中に子のメニュー項目が
あるから、自動的に、横向き三角マークは付く。
>>97 は、リソース・ファイルでの表現。xxx.rc というファイルをテキストと
して開くとこの書き方が見える。
ってことが、分からなかったのかな。分からないってなんだろ。
リソースは、リソース・エディタで編集するけど、xxx.rc ファイルは、テキスト
としても編集できる。あたしゃ、メニューはテキストでやっている。resource.h
にも( >>97 での IDM_... の変数を)登録しないといけないのは、面倒といえば
面倒だが。
0107デフォルトの名無しさん
05/01/22 11:48:16お前のほうが紛らわしい。Windowsアプリの作成を勉強しなおしてきなさい
0108デフォルトの名無しさん
05/01/22 12:30:560109デフォルトの名無しさん
05/01/22 15:08:14約二分後にOSの設定に関わらず再びスタンバイに戻ってしまいます。
OSの設定通りに挙動させるにはどうしたらいいですか?
0110デフォルトの名無しさん
05/01/22 17:22:00スタイルのところに
ES_AUTOHSCROLLを入れて
スクロールバーが作れるのですが
このスクロールバーをクリックしたとき
送られるメッセージは何かあるのでしょうか?
0111デフォルトの名無しさん
05/01/22 19:49:02ようにするソフトを作りました。それ自体は正常に動作しているようなんですが、何故か
Sleipnirと同時に起動しているとタスクマネージャでSleipnir側の仮想メモリサイズが毎秒
10〜20KBくらいの勢いで徐々に増加していきます。
公開されているマウスジェスチャーなんかのソフトではそういうことは発生しないので、自分の
コードが悪いと思うのですが、メモリが増えていくのが別アプリなのでどうやって問題を切り分け
ればいいのか分かりません。いい方法はないでしょうか。
フックプロシージャ内の処理を
return CallNextHookEx(hHook, nCode, wParam, lParam);
だけにしたり、フックをWH_MOUSEやWH_GETMESSAGEにしてみたりしましたが現象は同じでした。
---
Borland C++ 5.51 + WindowsXP SP2
0112デフォルトの名無しさん
05/01/22 20:27:34WM_HSCROLL、spy++。
作者に問い合わせる。
0113111
05/01/22 23:53:36ありがとうございます。
できるだけ原因を追求してから、最後に作者氏にも相談しようかと思ってました。
ただSleipnirのソースコードも盗難にあって無いらしいので…。
011489
05/01/23 01:51:26現在のマウスカーソルの場所とは関係なく、
フォーカスを持つウインドウへ送られてくるのでしょうか?
0115111
05/01/23 02:01:38特定のアプリケーション内で動作すればよかったので、SetWindowHookEx()の第4引数に
対象のスレッドIDを指定することで現象は発生しなくなりました。
# 一応試してはいたんですが、初期化の順番間違えてスレッドID取得できていませんでした
他のグローバルフックかけてるアプリではなんで発生しないんだろう…
0116デフォルトの名無しさん
05/01/23 02:07:25実際にやってみるのが早いと思いますが、位置にかかわらずフォーカスのある
ウィンドウにWM_MOUSEWHEELは送られます。
位置情報があれば WindowFromPoint() でカーソル下のウィンドウハンドルを
取得できるのでPostMessage()なりで再送すればいいでしょう。
自分の上にあるかどうかの分岐は必要ありませんね。
0118デフォルトの名無しさん
05/01/23 10:11:42WindowsAPIをオブジェクト指向の考え方で使いやすくラップしたものがMFC
っていう認識をしているのですが、合ってます?
0119デフォルトの名無しさん
05/01/23 11:15:31Platform SDKは、第三者向けのWin用ソフト開発Kitですが、開発環境ではありません。いじわるだがそれなりに有益なサンプル集が付属します。
0120デフォルトの名無しさん
05/01/23 11:23:32MFC・ATL/WTLはそれぞれ継承やテンプレートを利用したモジュールプログラミングなクラスライブラリです。
基本的にオブジェクト指向してません。
0121デフォルトの名無しさん
05/01/23 12:23:06リンクしたり、動的ロードして実行できる?
OSはWindowsXP-64
0122デフォルトの名無しさん
05/01/23 13:51:42http://pcweb.mycom.co.jp/articles/2004/06/23/win64/
0123デフォルトの名無しさん
05/01/23 14:27:13作ろうとしてるのは1行のみ入力するタイプです。
又リソースエディタからではなく、
CreateWindowExでエディットボックスを作ってます。
フォントは設定してないので、システムフォントが使われていると思います。
0124デフォルトの名無しさん
05/01/23 14:55:25GetDialogBaseUnits
GetSystemMetric#SM_CYBORDER
GetTextMetrics
0125デフォルトの名無しさん
05/01/23 15:08:27その子ウィンドウとしてラジオボタンを配置して
XPスタイルで実行するとラジオボタンが真っ黒になるのですが
これは一体?
0126デフォルトの名無しさん
05/01/23 15:43:27小窓にするな。
そこを256回クリックしてみろ。何も起こらないから。
0127125
05/01/23 15:57:36見た目だけなんですね。
0128デフォルトの名無しさん
05/01/23 16:35:42ファイルハンドルなのか、ミューテックスなのか、、、などを
調べる方法はないでしょうか?
0129デフォルトの名無しさん
05/01/23 17:00:30とは、どのようにすればよろしいんでしょうか?
hbitmap = SelectObject(hdcMem,hBMP);
0130デフォルトの名無しさん
05/01/23 17:15:42ハンドルを混同するような設計は良くない。GetFilePointerのエラー値、シグナル待ちなど。
0131デフォルトの名無しさん
05/01/23 17:17:10Select*@<windowsx.h>
0132デフォルトの名無しさん
05/01/23 18:14:480133デフォルトの名無しさん
05/01/23 19:13:38質問なんですけどよろしくお願いします
GetOpenFileNameで複数ファイル選択可能にした場合、どのくらいバッファを確保すればいいですか?
どこかで見たサンプルでは
char str[MAX_PATH*1024];
とやっていたのですがこの1024に意味はあるのですか?最大ファイル数とか・・・
0134デフォルトの名無しさん
05/01/23 19:17:180135デフォルトの名無しさん
05/01/23 19:19:420136デフォルトの名無しさん
05/01/23 19:20:540137デフォルトの名無しさん
05/01/23 19:23:13正しくサイズを指定すれば、溢れは切り捨てられるんじゃないか。開かれるだろうファイルの数*MAX_PATHが目安。1フォルダに1200個もファイルを置くなんて考えられないね
0138デフォルトの名無しさん
05/01/23 19:38:24方針がないならきりが無いからいっそのこと256バイトにしといて
後は別の手段でも考えたほうがいいよ。
リストをファイル経由で受け取ったり
フォルダ指定させてそこのファイル全部とか。
0139デフォルトの名無しさん
05/01/23 19:50:170140デフォルトの名無しさん
05/01/23 19:52:42何か自動処理するソフトなら数千はいっちゃうかもしれないしな。
0141133
05/01/23 20:03:00結論としてはいい方法はなく、十分にバッファを確保してから呼び出せですかね
ちなみにバッファは
TCHAR allpath[_MAX_DIR + (_MAX_FNAME + _MAX_EXT) * n];
の計算で確保しようと思います
ちなみに掛け算くらい出来ます
0142デフォルトの名無しさん
05/01/23 20:22:200143デフォルトの名無しさん
05/01/23 20:23:470144デフォルトの名無しさん
05/01/23 20:24:250145デフォルトの名無しさん
05/01/23 20:26:130146デフォルトの名無しさん
05/01/23 21:19:26http://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用。
0147141
05/01/23 21:26:20ディレクトリ\0ファイル名\0ファイル名\0...ファイル名\0\0
_MAX_DIRと_MAX_FNAMEと_MAX_EXTのすべてのサイズが256か260だったのでそうとうサイズがやばかったです orz
今はMAX_PATH*nにしてHeapAllocを使いますありがとうございました!
0148デフォルトの名無しさん
05/01/23 21:31:220149デフォルトの名無しさん
05/01/23 21:46:11あらかじめOPENFILENAMEでフックプロシージャを指定しておき、
CDN_FILEOKが送られてきたタイミングで
CDM_GETFILEPATHを送ってバッファサイズを取得し、
バッファを確保してから全体の文字列を取得する。
…てな感じでできないかな?
0150128
05/01/23 23:50:41いや、設計がいいとかよくないとかの問題ではなく
HANDLEの先にあるオブジェクトが何かを知る方法を伺っているんですが。。。
目的は、診断目的です。
0151デフォルトの名無しさん
05/01/24 00:42:36使えるとしたらどうしたらいいのかわからないので教えてください。
0152デフォルトの名無しさん
05/01/24 01:24:17使える
xとyがintで宣言されてるのを見ればわかるとおもうg
0153デフォルトの名無しさん
05/01/24 01:25:320154デフォルトの名無しさん
05/01/24 01:29:50わかりました、サンプルを色々見て勉強します。
ありがとうございました。
0155デフォルトの名無しさん
05/01/24 02:07:100156デフォルトの名無しさん
05/01/24 08:39:40エロ画像★
0157デフォルトの名無しさん
05/01/24 19:12:38膨大な数のAPIをどのように検索して使用するのが一般的ですか?
本とかWebサイトとかいろいろ方法はあると思うのですが、
皆さんは仕事で、どのようにAPIの使用方法を調べて使ってるんでしょうか?
0158デフォルトの名無しさん
05/01/24 19:35:120159デフォルトの名無しさん
05/01/24 19:51:41なるほど、言われてみればそうですよね・・・
つまらない質問してすいませんでした
0160デフォルトの名無しさん
05/01/24 20:25:44だったら特別な処理を行いたいと思ってます。
いまいち方法が思いつかないのですが、たとえばポップアップメニューが
表示されているかを調べるようなことはできるでしょうか。あるいは、マウス
カーソルの下がメニューかどうかを調べる方法とか…?
アイデア、ヒントなどありましたらご教授ください。
0161デフォルトの名無しさん
05/01/24 20:31:150162デフォルトの名無しさん
05/01/24 20:32:41古くて不完全な情報なら英語winhelp形式のWin32 reference manualを見る。直接リンクはできないけどwinehqあたりで入手できる
0163デフォルトの名無しさん
05/01/24 20:34:27WM_BEGINPOPUP~
0164160
05/01/24 20:43:24そうです。
それを判別する方法も今悩み中なんですが…
>>163
ありがとうございます。
"WM_BEGINPOPUP"のあとに何かの単語が続くということでしょうか。
MSDNやGoogleで検索してみましたが、見つけられませんでした。
もう少しだけヒントをいただけないでしょうか。
環境を書いていませんでした。Win2K/BorlandC++ 5.5 です。
0165デフォルトの名無しさん
05/01/24 20:50:23間違えた。
WM_MENUSELECT
GetMenuState
0166デフォルトの名無しさん
05/01/24 21:27:32PlatformSDK
副読本として>>162の日本語版(BCBに付属)
0167デフォルトの名無しさん
05/01/24 21:31:01dwExStyle と dwStyle の引数に何を渡せばいいですか?
0168デフォルトの名無しさん
05/01/24 21:40:23CreateWindow#WS_*の解説を読めば分かるはずだ
0169デフォルトの名無しさん
05/01/24 21:42:020170160
05/01/24 21:47:49ありがとうございます。
マウスで選択したタイミングで飛んでくるのでちょっと考えてしまいましたが、
なんとか意図したように実装することが出来ました。
0171デフォルトの名無しさん
05/01/24 21:47:550172167
05/01/24 21:52:04ありがとうございます。
でもダメポ・・・
DWORD dwExStyle = 0;
DWORD dwStyle = 0;
dwStyle &= ~WS_CAPTION;
hwnd = CreateWindowEx(dwExStyle, szAppName, "unko", dwStyle,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
0173デフォルトの名無しさん
05/01/24 21:53:480174デフォルトの名無しさん
05/01/24 21:55:57VC++というのは
WindowsSDKやMFCを使ったプログラミングがこれに当たるんですか?
0175デフォルトの名無しさん
05/01/24 21:56:45アフォですか?
0176デフォルトの名無しさん
05/01/24 21:58:10そんなことはない
0177デフォルトの名無しさん
05/01/24 22:05:36まずそこんとこ教えてくれ。
0178デフォルトの名無しさん
05/01/24 22:18:15ネットでも、そういう感じの書き方は多いし、GUIアプリ勉強したての友人が得意げに「VisualC言語」って連呼してくる
クセの強い方言持ってるから、言語と言えなくも無いけどね(とか言ってみる)
0179デフォルトの名無しさん
05/01/24 22:36:49Microsoft Windows ベースのアプリケーション、
Microsoft .NET ベースのアプリケーション、
ダイナミックな Web アプリケーション、
および XML Web サービスを作成するための強力なツールです。
0180デフォルトの名無しさん
05/01/24 22:38:04WS_POPUPベースで必要なスタイル足せ。
0181デフォルトの名無しさん
05/01/24 22:55:02CreateWindowの時はWS_OVERLAPPEDWINDOWで作って
あとからキャプション外す。
dwStyle = GetWindowLong(hWnd, GWL_STYLE);
dwStyle &= ~WS_CAPTION;
SetWindowLong(hWnd, GWL_STYLE, dwStyle);
0182デフォルトの名無しさん
05/01/24 23:13:11誘導されたのでこちらで質問します.
現在gcc(Linux上)を使って作ったプログラムをWindowsのVC6.0(?)でコンパイルしようとしてます.
コマンドラインオプションの処理で,gccのunistd.hにあるgetopt()を使ってるんですが,
どうやらVCには無いようです.VCで代わりになるようなものってありませんか?
いちいち組まないといかんのですかね?
それから
LinuxとWindows,共通に使えるMakefileの書き方についての情報(HP等)がございましたらお教えください.
いちいち変更するより1つで済めばとても素敵なんです.
0183デフォルトの名無しさん
05/01/24 23:21:510184C言語なら俺に聞けスレの257
05/01/24 23:28:53だからおまいは俺かYO!
勝手に書き込むなっつうの
>183
そう思ってC言語なら俺に…スレに書いたんすけどね.
すんません.もう一人の俺(?)が勝手に…
0185デフォルトの名無しさん
05/01/24 23:29:28交通事故解決のため終了
0186デフォルトの名無しさん
05/01/25 01:55:000187デフォルトの名無しさん
05/01/25 01:56:450188デフォルトの名無しさん
05/01/25 02:00:120189デフォルトの名無しさん
05/01/25 07:12:36それが最近はそうでもないんだなー
0190デフォルトの名無しさん
05/01/25 08:43:20void sage(void);
METHOD_PTR hoge;
hogeにsage関数のポインタを代入したいのですができますか?
0191デフォルトの名無しさん
05/01/25 08:46:12hoge=(METHOD_PTR)sage
0192デフォルトの名無しさん
05/01/25 09:13:58>エラー E2031 xx.cpp 8: 'void (*)()' から 'void (* (_closure )())()' へのキャストはできない(関数 main() )
と出てコンパイルできませんでした><
#include <stdio.h>
typedef void (__closure *METHOD_PTR)(void);
void sage(void) { printf(" test "); }
main() {
METHOD_PTR hoge;
hoge = (METHOD_PTR)sage;
hoge();
}
0193デフォルトの名無しさん
05/01/25 09:37:471バイトごとに空白入ってるけど空白にキャレットが移動しませんよね?
あれってどうやればできるんですか?
0194デフォルトの名無しさん
05/01/25 09:54:160195デフォルトの名無しさん
05/01/25 17:02:44ツールバーの領域も含めた位置になってしまいます。
差し引いた分の位置に表示したいのですが、
表示する度にツールバーの幅分を足さなくても、
自動で計算してくれるやり方を教えてください。
0196デフォルトの名無しさん
05/01/25 17:04:520197デフォルトの名無しさん
05/01/25 17:07:25初めからツールバーの幅を見越して位置を指定しろ。
0198デフォルトの名無しさん
05/01/25 17:08:24子ウィンドウ作って、ツールバーと重ならないように配置しろ
0199195
05/01/25 17:10:01おかしな文章ですいません。
>>197
それしかないんですかね。猫でもそうしているようですし。
ウィンドウの名前の部分は、自動で差し引いているようなので、
似たような物があるのかなと思ったのですが。
0201デフォルトの名無しさん
05/01/25 17:24:44SetWindowOrgEx,SetViewportOrgEx
国内人材は有限だ。企業外の教育システムを見直して、猫が猿を教える状況をどうにかしろ!
何で無職が在職を教えねばならんのだ!
0203デフォルトの名無しさん
05/01/25 17:58:42InvalidateRectで、更新する領域を指定しますが、
その指定した領域を取り出す方法はありますか?
もちろん、こちら側で指定したRect領域ですから、自分が知ってて当然なので取り出す必要はないのはわかってますが、
システム側に登録されている更新領域を知りたいのです。
Get〜みたいな関数は用意されていないのでしょうか?
ご返答いただけると助かります。
0204デフォルトの名無しさん
05/01/25 18:01:490205デフォルトの名無しさん
05/01/25 18:31:43親ウインドウのWM_CREATEにて
SendMessage(hWnd, EM_SETCHARFORMAT, 0, lpCharformat)
のような感じでフォントを変更してみましたが、変更したコントロールに文字(直接入力)を打ち込むと
変更されていない状態で入力されてしまいます。
そのまま日本語入力に切り替えて、何か打ち込むと指定したフォントで入力され、
また直接入力に切り替えて入力すると、フォントの変更が有効?になり、最初とは違うフォントで入力されてしまいます。
リッチエディットやフォントの使用法に誤りがあると思うのですが、どうしてもよくわかりません。
ご教授をお願いいします。(´・ω・`)
0206デフォルトの名無しさん
05/01/25 19:52:04確か
SetWindowFont@<windowsx.h>
か段落書式を設定だったかな
0207デフォルトの名無しさん
05/01/25 19:53:150208デフォルトの名無しさん
05/01/25 20:24:35> SendMessage(hWnd, EM_SETCHARFORMAT, 0, lpCharformat)
の hWnd はリッチエディットコントロールのウィンドウハンドルになってる?
0209デフォルトの名無しさん
05/01/25 21:08:45よくわからんけどアプリケーション初期のときに
InitCommonControlsEx で新しめのRichEditを要求しといて、
SendMessageのwParamにはちゃんとSCF_DEFAULTを渡せばいいんじゃない?
0210デフォルトの名無しさん
05/01/25 21:53:050211デフォルトの名無しさん
05/01/26 02:16:33ご教示、だよな。
0212デフォルトの名無しさん
05/01/26 02:32:38http://dictionary.goo.ne.jp/search.php?MT=%B6%B5%BC%F8&kind=&mode=0&jn.x=26&jn.y=12
0213デフォルトの名無しさん
05/01/26 03:31:23プ
0214デフォルトの名無しさん
05/01/26 03:41:07http://www.tt.rim.or.jp/~rudyard/torii009.html
>>211が正解。>>212,213は痛い。
0215デフォルトの名無しさん
05/01/26 04:41:29今日の日付を"2005/01/26"のような文字列に変換したいのですが。
0216デフォルトの名無しさん
05/01/26 05:24:54#include <windows.h>
#include <stdio.h>
int main()
{
SYSTEMTIME st;
GetLocalTime(&st);
printf("%4d/%2d/%2d %2d:%2d:%2d.%03d\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wMinute, st.wMilliseconds);
puts("Hit Any Key.");
getchar();
return 0;
}
0217デフォルトの名無しさん
05/01/26 07:12:36どうすればよいでしょうか?
0218デフォルトの名無しさん
05/01/26 07:23:571 ―する 学問・技芸を一定の順序で教える△こと(人)。
用例・作例
個人―・出張―・―料
2 〔大学や高等専門学校などで〕教育や研究に従事する人の中で、最上の職階。
用例・作例
―会・名誉―
別に「ご教授ください」でもおかしくない。
0219デフォルトの名無しさん
05/01/26 07:25:06痛い痛い・・・
0220デフォルトの名無しさん
05/01/26 07:27:51つか、そのリンク先はなんか意味あるの?
ただの個人の基地外野郎のサイトにしか見えないんだけど。
引用するときは信頼できるソースを頼むよ。
0221デフォルトの名無しさん
05/01/26 07:34:36#define UNICODE
0222デフォルトの名無しさん
05/01/26 07:52:40人の論文を盗む教授なんて殺しても良いんだよ
0223デフォルトの名無しさん
05/01/26 07:54:13人違いだ。ID見ろ、ぼけ
0224デフォルトの名無しさん
05/01/26 09:01:17いたたたた……
0225デフォルトの名無しさん
05/01/26 09:29:35SYSTEMTIMEの解説読め
0226デフォルトの名無しさん
05/01/26 10:16:49自前のプログラムから表示させるのってどうやるの?
0227デフォルトの名無しさん
05/01/26 11:58:50こんなん?英語の資料しか知らんし、自分では試してもいないけど・・・
ttp://www.codeguru.com/Cpp/COM-Tech/shell/article.php/c4505/
0228デフォルトの名無しさん
05/01/26 12:15:450229デフォルトの名無しさん
05/01/26 14:01:27IDの見方知らない人
0230デフォルトの名無しさん
05/01/26 14:05:180231wonapi
05/01/26 15:39:28[email protected]
0232デフォルトの名無しさん
05/01/26 15:42:18次の方、いらっしゃいますか
0233デフォルトの名無しさん
05/01/26 16:04:55金くれ
0234デフォルトの名無しさん
05/01/26 17:38:130235デフォルトの名無しさん
05/01/26 17:40:035.0+0.1
以下はだめで良いじゃん?
0236デフォルトの名無しさん
05/01/26 17:41:20MFCが使えたら、WindowsSDKってほとんど必要ないんじゃないの?
ってぐらい便利で開発しやすいと思うのですが、
実際のwindowsアプリケーションの開発現場ではどうなのでしょうか?
0237デフォルトの名無しさん
05/01/26 17:48:410238デフォルトの名無しさん
05/01/26 17:52:37何の開発かによるだろ。
0239デフォルトの名無しさん
05/01/26 17:54:47つまり開発によっては、両方を使い分けるってことですか?
使用頻度としては5分5分?
0240デフォルトの名無しさん
05/01/26 17:58:380241デフォルトの名無しさん
05/01/26 18:02:16ゲームの開発・ネットワークシステムの開発・アプリの開発…PCソフトの開発・PCを使って組み込みソフトの開発……全部同じと?
0242デフォルトの名無しさん
05/01/26 18:06:05>あるテクノロジー(プログラミング言語やAPIなど)を利用して
>ソフトウェアを開発する際に必要なツールのセット。
と書いてあったのですが、
この「ツールのセット」とは何でしょうか?
0243デフォルトの名無しさん
05/01/26 18:11:03ツールの意味は分かる?
セットの意味は分かる?
0244デフォルトの名無しさん
05/01/26 18:26:22MFCはそこそこ便利なんで、ウィンドウのハンドリングとかはATLかMFCで書くことが多いなー。
でもWindowsの機能の大半はMFCがカバーしていないわけで、SDK直に呼び出さないと
ならないケースって山ほどあると思うけど。
0245デフォルトの名無しさん
05/01/26 18:40:00>あるテクノロジー(プログラミング言語やAPIなど)を利用して
>ソフトウェアを開発する際に必要なツールのセット。
と書いてあったのですが、
この「ツールのセット」とは何でしょうか?
0246デフォルトの名無しさん
05/01/26 18:50:42ツールの意味は分かる?
セットの意味は分かる?
0247デフォルトの名無しさん
05/01/26 18:52:24より貴重なもの
0248デフォルトの名無しさん
05/01/26 19:04:31>あるテクノロジー(プログラミング言語やAPIなど)を利用して
>ソフトウェアを開発する際に必要なツールのセット。
と書いてあったのですが、
この「ツールのセット」とは何でしょうか?
0249デフォルトの名無しさん
05/01/26 19:07:340250デフォルトの名無しさん
05/01/26 19:58:590251デフォルトの名無しさん
05/01/26 20:07:180252デフォルトの名無しさん
05/01/27 00:02:03その結果、国内ではwinapiやCOM、ネットゲームなどの最新の開発技術情報は入って来ない。
しかも英語ができないで馬鹿なアンシャンレジームの官僚どもが古い技術(CASLとかN88-BASIC)で教育システムを敷いているのに、勇壮たる国内企業はこれから起こる急激な人材不足に何の用意もしていない。
このままではお前らの情報技術は死滅してしまうぞ! 糞ジャップの売国奴どもめ!
0253デフォルトの名無しさん
05/01/27 04:16:32ってことは、参照するために実態がなきゃいけないと思うんですけど、
それはどこに宣言してあるんですか? 不思議で仕方ないです。
0254デフォルトの名無しさん
05/01/27 07:04:150255デフォルトの名無しさん
05/01/27 07:11:24どうかしたの?
0256デフォルトの名無しさん
05/01/27 08:40:30scrnsave.cか.cpp探せ
0257デフォルトの名無しさん
05/01/27 08:46:370258デフォルトの名無しさん
05/01/27 09:04:54君以外はみんな見えてるよ
0259デフォルトの名無しさん
05/01/27 11:03:52なにやら正常な値が取れない環境があるみたいなのですが
0260デフォルトの名無しさん
05/01/27 11:11:51IsWindow
GetWindowRect(hwnd,&rc)の返値チェック
GetClientRect(hwnd,&rc)
GetWindowPlacement
0261デフォルトの名無しさん
05/01/27 11:41:07(°Д°)ハァ?
0262デフォルトの名無しさん
05/01/27 12:00:32ハァハァ..
0263デフォルトの名無しさん
05/01/27 12:02:29自分の周りの2,3人が当てはまるだけで「みんな」と
表現する奴っているよね。
0264デフォルトの名無しさん
05/01/27 16:03:44scrnsave.libにコンパイルされて入ってるんじゃないの
0265デフォルトの名無しさん
05/01/27 16:53:40例えば、IMEで、"おい"と入力して、変換して、"甥"として、
ここから続けて、"あ"と入力すると、IMEメッセージは、
WM_IME_COMPOSITION が発行されて、lParamに、GCS_COMPSTR が入っており、
ここから、ImmGetComposition() を使うと、"あ"が取得され、以前の文字は消えてます。
ということは、それまでの文字はキャンセルされてると思われる。
やっぱだめじゃん?
0266デフォルトの名無しさん
05/01/27 17:27:08IMEのサンプルコード探せ。
メッセージの聞き方が間違い。
WM_IME_*をマニュアルで見ろ。
GCS_RESULTSTRは?
0267デフォルトの名無しさん
05/01/27 18:20:09>GCS_RESULTSTRは?
lParamの値は、0x1BF で、GCS_RESULTSTRは、0x800 だから、
GCS_RESULTSTRは、含まれてないようだが
0268デフォルトの名無しさん
05/01/27 18:33:21WM_IME_COMPOSITIONでコンテキストに結果を置いたか?
もう一度WM_IME_COMPOSITIONとImmGetCompos~Str~#GCS_RESULTSTRの解説を見ろ
0269デフォルトの名無しさん
05/01/27 19:06:390270デフォルトの名無しさん
05/01/27 19:18:37日本語の通るエディタのオープンソース使ってもいいんだぜ
0271デフォルトの名無しさん
05/01/27 19:30:090272デフォルトの名無しさん
05/01/27 19:48:570273デフォルトの名無しさん
05/01/27 20:13:10どこにあるの?
**************ault.asp?url=/library/en-us/intl/ime_9ulh.asp
ここにのってるサンプルじゃないよね?
てか、日本語のMSDNにのってねいよ
0274デフォルトの名無しさん
05/01/27 20:25:43GCS_RESULTSTR を使って取得すると、それまでコンポジションにあったSTRが取得され、
GCS_COMPSTRを使うと、新しく入力されたSTRが取得される。
たとえ、lParameがGCS_COMPSTRであっても
0275デフォルトの名無しさん
05/01/27 20:30:07WM_IME_COMPOSITION が発行されないのはなんで?
0276デフォルトの名無しさん
05/01/27 20:38:21よくわからんけど。
0277デフォルトの名無しさん
05/01/27 21:01:13当たり前だ。日本人向けに情報を流すわけないよ。慈善団体じゃないんだから。裏でぐぐって30秒で見つけろよ
0278デフォルトの名無しさん
05/01/27 21:11:56高卒?
0279デフォルトの名無しさん
05/01/27 21:20:320280デフォルトの名無しさん
05/01/27 23:22:100281デフォルトの名無しさん
05/01/27 23:59:510282デフォルトの名無しさん
05/01/28 00:04:340283デフォルトの名無しさん
05/01/28 08:16:261バイトごとに空白入ってるけど空白にキーボードフォーカスが移動しませんよね?
あれってどうやればできるんですか?
0284デフォルトの名無しさん
05/01/28 08:35:14エディットコントロール使わずに
独自に表示・入力受付のコードを書いてるんだろう
0285デフォルトの名無しさん
05/01/28 08:36:49> 193 :デフォルトの名無しさん :05/01/25 09:37:47
> そこら辺に落ちてるフリーのバイナリエディタとかって
> 1バイトごとに空白入ってるけど空白にキャレットが移動しませんよね?
> あれってどうやればできるんですか?
0286デフォルトの名無しさん
05/01/28 08:37:060287デフォルトの名無しさん
05/01/28 08:39:200288デフォルトの名無しさん
05/01/28 13:10:21おまいは2レス前も読めないのか?
0289デフォルトの名無しさん
05/01/28 15:21:32だから、2レス前で見たと言ってるんじゃないかな?
0290デフォルトの名無しさん
05/01/28 15:34:160291デフォルトの名無しさん
05/01/28 15:36:41> Before a window is destroyed,
> an application must remove all entries
> it has added to the property list.
とあるのですが、RemoveProp しないままだとどういう害がありますか?
(SetProp で追加したデータが何らかの後始末が必要なものだった場合
(例えば malloc に対する free) は別として)
0292デフォルトの名無しさん
05/01/28 15:41:23解放できねってことじゃねーのかな。
だから、弊害はそのHANDLEによるんじゃねーか。
0293デフォルトの名無しさん
05/01/28 16:21:56Hookでタスクバーのプロックに寄生
0294デフォルトの名無しさん
05/01/28 16:29:12初心者なので言ってる意味がわかりません
0295デフォルトの名無しさん
05/01/28 16:45:08SetSysColors()
0296デフォルトの名無しさん
05/01/28 16:51:24システムカラーを変える場合、
int i=COLOR_3DFACE;
DWORD dw=RGB(赤,緑,青);
SetSysColors(1,&i,&dw);
システムカラーを変えないでタスクバーのみを変えたいなら、SetWindowsHookExの使い方を学べ
0298デフォルトの名無しさん
05/01/28 17:02:41古い携帯から書いてると字数制限が
0299デフォルトの名無しさん
05/01/28 17:05:030300デフォルトの名無しさん
05/01/28 17:11:340301デフォルトの名無しさん
05/01/28 17:34:25WM_NCPAINTのイベントハンドラを自分でつくる
0302上
05/01/28 17:34:400303301
05/01/28 17:48:07すまん適当すぎる答えだった
ここでも参考にしてくれ↓
ttp://hp.vector.co.jp/authors/VA016117/bmpcap1.html
0304291
05/01/28 17:58:07SetProp で追加したデータ自体はどうでもいいのです。
>>291 で引用したように、ああいう注釈がある以上、
RemoveProp しなければ何らかの問題が起こるのではないか、
起こるとすればそれはどのようなものかが知りたいのです。
0305デフォルトの名無しさん
05/01/28 18:22:48Window Properties Overview見て勉強
0307291
05/01/28 18:28:360308デフォルトの名無しさん
05/01/28 18:30:58知らないならスルーしとけば?質問自体下らないしさ。
0309デフォルトの名無しさん
05/01/28 19:20:06MSDNになかったらM$の開発者に訊くしかないんじゃない?
0310デフォルトの名無しさん
05/01/28 19:26:270311デフォルトの名無しさん
05/01/28 19:38:29それははじめから知ってるだろ
0312デフォルトの名無しさん
05/01/28 19:41:540313デフォルトの名無しさん
05/01/28 20:34:35あんまりよく知らんが、システムリースの無駄な消費が起こるんじゃない?
派生的に色々な問題が起こるだろ。
0314デフォルトの名無しさん
05/01/28 20:53:020315デフォルトの名無しさん
05/01/28 22:05:38システムリースってなんですか?
0316デフォルトの名無しさん
05/01/29 02:09:390317デフォルトの名無しさん
05/01/29 12:49:28イメージとしてはSleepのような感じです。
WM_TIMER系は精度が洒落にならないので除外の方向でお願いします。
0318デフォルトの名無しさん
05/01/29 12:55:19マルチメディアタイマー
0320デフォルトの名無しさん
05/01/29 13:14:08Sleepでよいなら、Sleep使えば?
timeBeginPeriod(1) すれば、1ms精度で寝られるが?
0321デフォルトの名無しさん
05/01/29 13:53:30そうです。メモリマップドファイルなら使ったことがあるので
似たようなクラスとかがあれば一番いいのですが、やりたい
ことは、プロセス間通信です。
CreateFileMappingで作ったMMFの一覧表示ってできますか?
0322デフォルトの名無しさん
05/01/29 14:27:080323317
05/01/29 14:48:34こんな感じですか?
while(true) {
timeGetTime(); //経過時間計測
Sleep(1); //ウェイト
}
それと、Sleep(1)をSleep(0)やPeekMessage、DispatchMessageでやる実装って問題はあるのでしょうか?
0324デフォルトの名無しさん
05/01/29 14:53:330325デフォルトの名無しさん
05/01/29 15:22:33たまに、明示的なキャストが必要とでてくるのですが
キャストせずにすむ設定などはないのでしょうか?
0326デフォルトの名無しさん
05/01/29 15:26:33コードの実例みせてちょ
0327デフォルトの名無しさん
05/01/29 15:30:57そのコードで何がしたいのか教えて欲しい。
第一、どれくらいの精度が欲しいのさ。
0328デフォルトの名無しさん
05/01/29 15:36:27static HBITMAP hBMP, hBMPOLD;
hBMP = CreateDIBSection(hdc, &biInfo, DIB_RGB_COLORS, (LPVOID)(&lpPixel), NULL, 0);
CreateDIBSection'
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
となってしまうのですがこれは(HBITMAP)とかを、たせばいいんでしょうか
0329デフォルトの名無しさん
05/01/29 15:42:29て書いてあるだろ
0330デフォルトの名無しさん
05/01/29 15:51:02CreateDIBSection()はHBITMAP型を返すはずだが
なんでそんなエラーがでるかな・・・???
0331デフォルトの名無しさん
05/01/29 15:53:58hBMP っていう名前の変数が複数あるとか、なんか変数宣言とかに原因がありそうな・・・
0332デフォルトの名無しさん
05/01/29 15:58:18STRICTマクロが定義してあると、ハンドルは構造体のポインタになって、
明示的なキャストが必要になる。
winnt.h参照。
0333デフォルトの名無しさん
05/01/29 16:00:17もうお前ら答えなくていいよ。
0334デフォルトの名無しさん
05/01/29 16:08:26CreateDIBSectionの第四引数の型はvoid **だよ。
0335デフォルトの名無しさん
05/01/29 16:09:36もうお前答えなくていいよ。
0339 ◆u47L8X93Gk
05/01/29 18:51:240340デフォルトの名無しさん
05/01/29 19:40:081.WM_SYSCOMMANDで
SC_MINIMIZE(最小化)、SC_MAXIMIZE(最大化)を
特定の大きさになるように操作していますが、
DefWindowProcを通さないためか、
右上のボタンが変更されません。
※WM_SIZEでサイズ変更を試みたのですが、
どうも最小化最大化のフラグがあるようで、
うまくいきませんでした。
2.上記に関連して、システムメニューの
元に戻す、最小化、最大化を状態変更したいのですが、
グレー状態←→許可状態の変更ができません。
※DeleteMenuで項目を消すことはできます。
以上、解決方法があれば教えていただけないでしょうか?
0341デフォルトの名無しさん
05/01/29 20:10:51ShowWindowでSW_MAXIMIZEした後、目的のサイズにリサイズするとか。
0343デフォルトの名無しさん
05/01/29 20:57:27ありがとうございます。その方向で行きたいと思います。
最小化の動作は回避できそうにないので、
ウィンドウスタイルで無効にすることにします。
最大化の動作は一瞬タイトルバーが伸びてしまうのを、
気にしないようにすることにします。
0344デフォルトの名無しさん
05/01/29 21:51:321.
WM_GETMINMAXINFO を独自に処理してやれば
ウィンドウを目的のサイズに制限はできるよ
0345デフォルトの名無しさん
05/01/29 23:03:14CreatePen(PS_SOLID, 0, 色)
と
lb.lbStyle = BS_SOLID;
lb.lbColor = 色;
ExtCreatePen(PS_COSMETIC | PS_SOLID, 1, &lb, 0, NULL);
の結果って異なるものでしょうか?
0346デフォルトの名無しさん
05/01/30 01:48:450347デフォルトの名無しさん
05/01/30 01:57:13超ナンセンス
そもそも、待機ループ用スレッドをマルチメディアタイマ関数が提供している。
timeSetEvent()呼び出しによって最高優先度スレッドが生成され、
そのスレッド内でループが実行される。車輪の再発明をする意味なし。
自分でループ用スレッドを使ったら、スレッドと同期するための仕組みがさらに必要になるだろ?
0348デフォルトの名無しさん
05/01/30 01:57:59PostQuitMessage
0349デフォルトの名無しさん
05/01/30 02:07:490350デフォルトの名無しさん
05/01/30 10:10:18わーすごーい。
プッ
0351デフォルトの名無しさん
05/01/30 12:04:530352デフォルトの名無しさん
05/01/30 12:34:43職場の先輩に恵まれていないとこういう考えになっちゃうんだろうなぁ。
まぁ気づかなければバレるまで問題にはならないから
なんとかなっちゃうかもしれないけどね。
0353デフォルトの名無しさん
05/01/30 14:39:06これを自分で実装する(MCIとか使わない)人って何使ってるの?
マルチメディアタイマー?
自前のメッセージループでタイマー?
他?
ソフトウェアMIDIキーボードとかだと押されたタイミングで音出せば良いだけだけど、再生だとどうしてるんだろ?
0354デフォルトの名無しさん
05/01/30 17:35:36GetMenuが0を返すかで判断していいのですか?
GetMenuは子ウインドウの場合は戻り値が未定義と書いてあってちょっと不安・・
他に正しい確認方があるのでしょうか?
0355デフォルトの名無しさん
05/01/30 17:43:51子ウィンドウはメニューを持てないから、子ウィンドウかどうかを先に確かめればいい。
0356デフォルトの名無しさん
05/01/30 17:46:45ふつうマルチメディアタイマー
0357デフォルトの名無しさん
05/01/30 18:12:01ありが�d それでやってみます。
0358デフォルトの名無しさん
05/01/30 18:37:31そか。サンクス。
俺も気が向いたら作ってみようかな。
0359デフォルトの名無しさん
05/01/30 21:26:380360デフォルトの名無しさん
05/01/30 21:35:07ない
0361デフォルトの名無しさん
05/01/30 21:50:200362デフォルトの名無しさん
05/01/30 22:12:28もしかして、これのこと?
http://msdn.microsoft.com/library/en-us/dnwui/html/layerwin.asp
0363デフォルトの名無しさん
05/01/30 23:03:42参)アルファ・ブレンド
ttp://hp.vector.co.jp/authors/VA016117/assem/alpha.html
0364デフォルトの名無しさん
05/01/30 23:21:42つーか、まんまな名前のAPIあるけどな。
0365デフォルトの名無しさん
05/01/31 00:15:22って言ってるから、単に半透過させるだけじゃだめなんじゃない?
0366デフォルトの名無しさん
05/01/31 00:19:000367デフォルトの名無しさん
05/01/31 00:21:42タイマーで透過率を変えていくとか
0368デフォルトの名無しさん
05/01/31 00:58:26一連の質問を連投しているように見えて仕方ない。
タイマーと透過に関する質問は同一人物か、ひょっとして?
0369デフォルトの名無しさん
05/01/31 01:09:070370デフォルトの名無しさん
05/01/31 01:48:58させるやつですよね。でも、参考になりました。
>>363
>>364
アルファブレンドっていうんですか。
覚えておきます。
僕だって、メッセージ駆動型ぐらい理解できてますとも!
ありがとうございました。
0371デフォルトの名無しさん
05/01/31 02:09:590372デフォルトの名無しさん
05/01/31 02:35:47メッセージを投げるには、どうしたらいいのでしょうか?
0373デフォルトの名無しさん
05/01/31 03:11:28日本語はここね
http://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.asp
0374デフォルトの名無しさん
05/01/31 05:04:33GetWindowModuleFileName を使っても、ちゃんとした値が返ってきませんでした。
どうしたらできるでしょうか?
0375デフォルトの名無しさん
05/01/31 05:26:34やっちゃったら、具体的にどんな危険な事が起こるのですか?
0376デフォルトの名無しさん
05/01/31 07:02:550377デフォルトの名無しさん
05/01/31 07:22:390378デフォルトの名無しさん
05/01/31 07:28:47取得するAPIってありますか?
0379デフォルトの名無しさん
05/01/31 08:00:16『ビットマップハンドルをメモリDCに選択した場合,メモリDCに最初に選択されていたビットマップハンドルに戻してからメモリDCを解放するのだろうか?。
Microsoftのサンプルプログラムがこのようにしていたからであるが,このようにしていないアプリケーションも多いので,戻さなくても害がないのだろうか?。
調べたところ,戻さないとだめだった。』
ググっていたらこれ見つけましたが、彼、もしくは彼女はどこをどのように調べたか
どなたか検討がつきますか?
0380デフォルトの名無しさん
05/01/31 09:29:29タスクマネージャで監視しつつ
その動作をループで回してみる
まぁ、数万回も回せば、見なくても分かるんじゃね?
0381デフォルトの名無しさん
05/01/31 14:32:39GetWindowThreadProcessID 使ってプロセスIDとってそこから取得でたと思う
0382デフォルトの名無しさん
05/01/31 15:22:17static char szFn[512]="", szFt[512]=""; //ファイル名を格納
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.hInstance = NULL;
ofn.lpstrFilter = "ビットマップ(*.bmp)\0*.bmp\0\0";
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 1; // フィルターの初期位置
ofn.lpstrFile = szFn; // ファイル名用文字列バッファ
ofn.nMaxFile = 511; // 文字列バッファのサイズ
ofn.lpstrFileTitle = szFt; // ファイルのタイトル用文字列バッファ
ofn.nMaxFileTitle = 511; // 文字列バッファのサイズ
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = "ビットマップを開く"; // タイトル
ofn.Flags = OFN_FILEMUSTEXIST ;//| OFN_HIDEREADONLY;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = NULL;
ofn.lCustData = 0;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = NULL;
if(!GetOpenFileName(&ofn)) return 0;
GetOpenFileNameを上のような感じで使うと、そこではエラーは出なく、
選んだファイル名、パスをちゃんと得られて成功するのですが、
その後にLoadImageで画像を表示しようとすると、NULLが返って来て失敗します。
得たファイル名だけでは無く、それとは関係ない画像ファイルでもです。
原因はどこに考えられるでしょうか。教えてください。
0383デフォルトの名無しさん
05/01/31 15:27:02http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_loadimage.asp
を熟読してみたら?
0384デフォルトの名無しさん
05/01/31 15:38:26ありがとうございます。調べて見ます。
0386382
05/01/31 16:09:20何が原因でエラーが起こったか調べるAPIがあるのが分かり、
調べた所、「指定したファイルが見つかりません」と出ました。
もしかしたら、パスの位置がGetOpenFileNameを使う事で
おかしくなるのかなと思い、GetOpenFileNameで開くファイルを、
LoadImageで開くファイルと同じパスに置いた所、成功しました。
さらに書くと、実行ファイルの ../ の位置のファイルをGetOpenFileNameで
開いた場合、実行ファイルと同じ位置のファイルをLoadImageで開く時、
実行ファイルのあるフォルダ名/ をファイル名に付ければ成功するという感じです。
原因が分かったので、GetOpenFileNameで変更されたパス?を
元に戻すコードを調べたいと思います。どうもありがとうございました。
0387デフォルトの名無しさん
05/01/31 16:28:380388デフォルトの名無しさん
05/01/31 16:29:210389デフォルトの名無しさん
05/01/31 16:37:53int 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
なにが原因でしょう?
0391デフォルトの名無しさん
05/01/31 16:47:59そこまで表示しといてわからんもんかな…
RegEnumKeyEx() くんが subkey のサイズを知るために、lpcbName に入っ
ている値を参照する。ようするに、RegEnumKeyEx() を呼ぶ前に
lpcbName = 256; が毎回必要。
0392391
05/01/31 16:53:45ERROR_INSUFFICIENT_BUFFER じゃないんだね。
0394デフォルトの名無しさん
05/01/31 16:59:38自分を卑下するんじゃない。
経験を積めば問題解決のセンスも磨かれるので、がんばれ。
0395デフォルトの名無しさん
05/01/31 17:57:230396デフォルトの名無しさん
05/01/31 18:00:040397374
05/01/31 22:31:12初めはプロセス情報からファイル名しか取れなくて悩みましたが、
GetWindowThreadProcessID で得たプロセスのモジュール情報から、
ちゃんとフルパスを得ることができました。
どうもありがとうございました。
0398デフォルトの名無しさん
05/02/01 01:09:320399デフォルトの名無しさん
05/02/01 01:14:190400デフォルトの名無しさん
05/02/01 01:24:24MSDN
0401デフォルトの名無しさん
05/02/01 01:37:380402デフォルトの名無しさん
05/02/01 08:22:17ttp://techtips.belution.com/ja/vc/0026/
ttp://hp.vector.co.jp/authors/VA016117/hook.html
ttp://hp.vector.co.jp/authors/VA016117/spy.html
ttp://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N006.html
0403デフォルトの名無しさん
05/02/01 23:04:08どの様な物があるのでしょうか。
今まではIJGのライブラリやSUSIEのプラグインを使用させて頂いて
いたのですが、ライブラリは実行ファイルのサイズが膨れあがり、
SUSIEはもうマイナーな様なので、一般的なDLLで読めるなら、もう
素直にそっちを使いたいなぁ・・・
何年か前にぐぐった時は、IE関連のDLLが利用出来ると読んだ様な
記憶があるのですが、今探してみるとそれらしい事が書かれたサイトは
見つかりませんでした。
0404デフォルトの名無しさん
05/02/01 23:23:200405デフォルトの名無しさん
05/02/01 23:27:56IE関連の〜ってのは、多分 OleLoadPicture() かな?
ただ、それだと>>404なのでGDI+かねぇ
0406デフォルトの名無しさん
05/02/01 23:50:020407403
05/02/02 00:20:25PNGは読みたい所なので、保存も出来るらしいGDI+の方向で逝こうと
思ったのですが、プラットフォームSDKが・・・暫く悩んでみます。
0408デフォルトの名無しさん
05/02/02 00:34:02あとはIE本体をCOM経由で呼びだしてhogeるとか?
0409デフォルトの名無しさん
05/02/02 00:40:07あるUSB機器を使用しているときに
機器との通信内容をモニタすることはできますか?
0410デフォルトの名無しさん
05/02/02 01:25:14多少の加工もできることだし。
0411デフォルトの名無しさん
05/02/02 01:28:35GDI+ねぇ。
PSDKのダウソ&導入の点で悩むよりはむしろ、
WindowsNT5.0以上でないと動かないという点で悩むべきでしょ。
あと、WindowsUpdateでアップデートされたりする対象なので取り扱い注意。
0412デフォルトの名無しさん
05/02/02 01:39:21> WindowsNT5.0以上でないと動かないという点で悩むべきでしょ。
今時、問題ねーよ。
0413デフォルトの名無しさん
05/02/02 01:41:49そういう香具師ならGDI+位自分で入れるでしょ
0414デフォルトの名無しさん
05/02/02 01:46:120415デフォルトの名無しさん
05/02/02 01:47:350416デフォルトの名無しさん
05/02/02 01:48:570417405
05/02/02 01:50:21Win98/Me/NT4.0でも使えるよ。
そもそもGDI+は.NETのグラフィック関係で使われてるから、
少なくとも.NETが動くWindowsでは使える。
WinXPより前のOSだと、インストールしないといけないけどね。
0418デフォルトの名無しさん
05/02/02 01:53:18> WinXPより前のOSだと、インストールしないといけないけどね。
exeの横にdllを置けばOK。
0419デフォルトの名無しさん
05/02/02 02:44:43新品のPC買う人でXP以外、って意味ならね。
わざわざ2000入れる人も居るみたいだし
0420デフォルトの名無しさん
05/02/02 03:38:240421デフォルトの名無しさん
05/02/02 07:51:04編集可にしたい場合はウィンドウスタイルにTVS_EDITLABELSを付け加えますが、
編集可のアイテムと不可のアイテムを混合させたい場合は
どのようにするのがいいでしょうか?
0422421
05/02/02 07:58:530423デフォルトの名無しさん
05/02/02 08:27:51せめてどうやったのか書いてくれ
0424デフォルトの名無しさん
05/02/02 08:34:46ソフトでやるなら、フィルタドライバをかませる
そうでなければ、プロトコルアナライザを使う
0425421
05/02/02 09:29:13親の無いアイテム(ルートのアイテム)のみ編集可能にする場合
下記のような感じでできました。
ですが、一つ問題があって、
TreeView_EndEditLabelNowで編集を強制終了したときに画面がちらつきます。
よく考えてみればラベルの編集可と不可の混合するツリービューを見たことないですし、
もしかするとこの処理は良くないのかもしれません。
case WM_NOTIFY:
if(wParam == IDC_TREEVIEW){
ptv_disp = (TV_DISPINFO *)lParam;
HTREEITEM hTi;
switch(ptv_disp->hdr.code){
case TVN_BEGINLABELEDIT:
// 編集してよいか調べる //
hTi = TreeView_GetSelection(hTreeView); // 選択されているアイテムを取得
hTi = TreeView_GetParent(hTreeView, hTi); // 選択されているアイテムの親を取得
if(hTi != NULL){
TreeView_EndEditLabelNow(hTreeView, TRUE); // ルートのアイテムではないので編集処理を強制終了
}
break;
case TVN_ENDLABELEDIT:
// 編集の結果を反映する //
TreeView_SetItem(hTreeView, &ptv_disp->item);
break;
}
}
break;
0426デフォルトの名無しさん
05/02/02 10:20:40操作が拒否されましたと出るようにするにはどうすればいいですか?
勝手に外部から終了されないようにしたいのですが。
0427デフォルトの名無しさん
05/02/02 10:49:24どんなウィルス作るの?
0428デフォルトの名無しさん
05/02/02 10:58:37完全にバグの無いプログラムを書ける自身があれば別だが
0429デフォルトの名無しさん
05/02/02 11:00:53なるほど、そういう考え方もありますね
0430仕様書無しさん
05/02/02 11:18:33検出するにはどうしたらいいんでしょうか?
・1分ごと(1000ms*60)ごとにチェック
・特定のプロセス名が起動していたら・・・
というところがわかりません。
簡単でしたらwinmain()からお願いします。
AfxMessageBox()程度なのでウインドウを作ったりする必要はありません。
難しかったらMFCでもOKです。
0431デフォルトの名無しさん
05/02/02 11:27:59>難しかったらMFCでもOKです。
この一文でキサマがどれだけプログラムできないかが
よく分かった。
0432デフォルトの名無しさん
05/02/02 11:29:17部品だけ教えてやる
SetTimer
KillTimer
CreateToolHelp32Snapshot
Process32First
Process32Next
CloseHandle
0433デフォルトの名無しさん
05/02/02 11:38:17Enumerating All Processes という項目
(Windows開発 > Windows Development > Windows Base Services >
Performance Monitoring > SDK Documentation > Process Status Helper >
Using PSAPI)
に、ソースコードがそのまんま載ってる。実際にコンパイルして確認した。
0434デフォルトの名無しさん
05/02/02 11:42:13if (AfxProccessFind("notepad.exe"))
//見つかった
else
//見つからない
0435デフォルトの名無しさん
05/02/02 11:53:31PSAPIはWin9x系未サポートな罠
0436デフォルトの名無しさん
05/02/02 12:30:33今更Win9x系をサポートする必要あるのかねえ。
やっぱあるかねぇ。
0437デフォルトの名無しさん
05/02/02 12:39:07最近はUnicodeビルドばっかりやってる。
0438デフォルトの名無しさん
05/02/02 13:03:43既出だけど、gdiplus.dllは再配布可能。
でも初期の版はセキュリティ問題あるので、新しい奴じゃないとダメ。
libpngもセキュリティ関連で似たような経緯あるし、OleLoadPictureに
頼っておいて Windows Update でカタ付けてもらうのが良いような・・
0439デフォルトの名無しさん
05/02/02 13:17:5995はともかく98-Meは現役で使われてるのがかなりある。
特にMeあたりだとPentium3搭載とかでハードウェア的には全く問題ないわけだし
0440デフォルトの名無しさん
05/02/02 13:47:180441デフォルトの名無しさん
05/02/02 13:58:34「タスクバーにアイコン表示しないようにする」くらいにして
起動してるのを目立たなくしておく、くらいにしといたら?
0442デフォルトの名無しさん
05/02/02 14:01:46結構危険なのでお勧めしないけどね
0443デフォルトの名無しさん
05/02/02 14:55:03Unicodeビルドでもlibunicows + unicows.dll使ってるし。
最近unicows.dllの代わりにOpencowsなんてものも出てきたからちょっと期待。
0444409
05/02/02 14:58:15レスthx.
プロトコルアナライザは高くて手が出ないので、ソフトウェア的に行きたかったのです。
今回の場合、USB Monitor というプログラムで目的が実現しそうです。
どうもでした。
0445443
05/02/02 15:21:150446デフォルトの名無しさん
05/02/02 16:50:28FTPならINTERNET_STATUS_RESPONSE_RECEIVEDにダウンロードサイズが付いてくるようなんですがHTTPの場合来ないようなので‥‥
0447デフォルトの名無しさん
05/02/02 16:54:00読み書きすればよいのでしょうか。
タイトル、表題、作成者、カテゴリ、キーワード、コメント
等をファイルマネージャで弄りたいのです。
0448デフォルトの名無しさん
05/02/02 16:55:02すごい、がんばってください、
0449デフォルトの名無しさん
05/02/02 17:00:39ググったらこれがトップに出てきた。
http://www.geocities.jp/bruce_teller/adsmngr/helpfiles/aboutads.htm
0450デフォルトの名無しさん
05/02/02 17:18:22思いついたのは、長時間の処理をする為のスレッドを作成するか、
処理の途中で状態を変数に残しておきリターンして
タイマー呼出しで処理を継続する(関数のポインタによる呼出し)
という方法の二つです。
スレッドは使いたくないので後者にするとして、
処理を中断するタイミングや次に処理するタイマーの設定が問題になります。
10ミリ秒処理をすれば一度中断して1秒後に再開とか。
システムに過度の負荷を与えない範囲で、できる限り高効率で実行したいと
なるとどういう数値を指定すればいいのかもわかりません。
処理も結構複雑になりそうですし、他にいいやり方があればと思っています。
0451デフォルトの名無しさん
05/02/02 17:22:09来ると思うけど・・・
0452デフォルトの名無しさん
05/02/02 17:22:32スレッド使え。何が嫌なんだ?
それと負荷軽減にはSleep(0);
0453デフォルトの名無しさん
05/02/02 17:22:58スレッド。使いたくなくてもスレッド。
0454デフォルトの名無しさん
05/02/02 18:03:00InernetReadFileに渡すバッファサイズが大きすぎて(== ファイルサイズ)来てなかったみたいです。
thx
0455450
05/02/02 18:13:30WSAAsyncSelect を用いたネットワークプログラム(GUI)です。
Winsock は一つのソケットを複数のスレッドで共有出来ないはずなので、
スレッドを利用するとなるとそのソケットの専用スレッドが必要ですよね?
PostThreadMessage を利用すればソケットから読んだデータに応じて
GUI に処理を渡すのは楽なんですが、別の何らかの方法で逆も実装しなければ
いけないのと、ソケットスレッドがその長時間の処理を行ってる最中に、
どうやって読み込み処理をするかが問題になってきます。
スレッドを使わない方法の方は、Sleep(0) で負荷の軽減は出来ましたけど、
長時間の処理をやりながら、なおかつ本来のメッセージ処理も滞りなく
する方法が必要になります。
0456デフォルトの名無しさん
05/02/02 18:15:08ごるぁ
0457デフォルトの名無しさん
05/02/02 18:39:160458デフォルトの名無しさん
05/02/02 18:46:29区別は、Win3の互換性だな
0459デフォルトの名無しさん
05/02/02 18:48:43> GUI に処理を渡すのは楽なんですが、別の何らかの方法で逆も実装しなければ
その逆の流れもPostThreadMessage使えよ。
0460デフォルトの名無しさん
05/02/02 19:16:30どっちもDWORDで置き換え可能
0461450
05/02/02 19:19:02スレッド用に不可視のウィンドウですか?
残りの問題は、長時間処理をしている最中に
どうやって読み込んで処理を出来るかなんですが、
>>450 に書いた処理を中断・継続する方法を使えば同様に実装できるとは
思いますが、実装がややこしいのはほとんど変わりません。
特に不可視のウィンドウを使ってメッセージで処理するなら、
スレッドを使わない場合と同じような実装になると考えられます。
>>455 では読みづらかったかもしれませんが、長時間の処理をしている
最中でも、ソケットから来るデータを別途処理しなければなりません。
この場合、スレッドを使うメリットは何かありますか?
0462デフォルトの名無しさん
05/02/02 19:51:59漏れならこういう設計にする
・UIスレッド
- 通信用スレッドからのイベントに反応
- 通信用スレッドへデータ供給 (Queueや共有するメモリなどで)
・通信用スレッド
- 送るべきデータがあればsend
- 読めるデータがあればrecv。
アプリケーション的に意味あるカタマリになったらUIスレッドへ通知
・ワーカスレッド
- UIスレッドから指示を受けて動く。
- なにか時間のかかる処理があるならここで。
スレッド間のメッセージのやり取り・同期。待ち合わせはイベント等を使う。
おしまい。
0463デフォルトの名無しさん
05/02/02 19:53:43ロック中描画が止まる。
0464デフォルトの名無しさん
05/02/02 19:55:39一般に言ってユーザとのインタラクトの他にどこからデータが発生する?
Queueに貯めとけばいいだけじゃん。
0465デフォルトの名無しさん
05/02/02 19:58:470466デフォルトの名無しさん
05/02/02 19:59:000467デフォルトの名無しさん
05/02/02 20:10:18何を言っているのかさっぱりわからないので詳しくお願いします。
例えばメーラのUIスレッドで「ログイン」ボタンの押下イベントを受けたら、
・UIスレッドはアカウント名とパスワードを特定のメモリに保存して、
「ログインしろ」と通信用スレッドへ通知 (queueでコマンドを送る/
stateを変更した後イベントをセットする等)
・通信用スレッドはログイン処理開始。
成功したり失敗したらUI側へ通知
みたいな流れになると思うんだけど・・・
0468デフォルトの名無しさん
05/02/02 20:18:18分かる?
0469デフォルトの名無しさん
05/02/02 20:18:40と言う事をしたいのですが、どうしたら良いのかさっぱりわかりません。
とりあえずSpy++のTARGETアイコン(?)のような機能を呼び出す方法を探しているんですが、それが上手くみつからず、、
わかる方がいらっしゃいましたら教えて頂ければ幸いです。
0470デフォルトの名無しさん
05/02/02 20:25:00例えば>>467の例だと、非UIスレッドが「アカウント名」とか「パスワード」を
どっからか手に入れて供給するのが正しいわけですね。
面倒なので合意しときます。
>>466>>468
何を言っているのかさっぱりわからないので具体的に詳しくお願いします。
っていうか割と由緒正しいこんなスレでも妄想キチ相手にしてる漏れって・・・
通信をステートマシンで実装するのは当たり前だし、
ちゃんと作れば当たり前に中断だってできるだろう・・・
(プロトコルが許す範囲において)
0471デフォルトの名無しさん
05/02/02 20:30:30そこが混み合ったらどうすんの?しばらくメインスレッドが応答不能になりそうだよ。
0472デフォルトの名無しさん
05/02/02 20:33:350473デフォルトの名無しさん
05/02/02 20:36:330474450
05/02/02 20:49:32長時間占有してなおかつ送受信が必要な処理を想定してたのですが、
それを純粋に分離しちゃった方がいいわけですね。
同期・通信(キューとか)機構をどうするかは考えなくてはいけないけど、
今まで考えてたやり方よりはまだ簡単そうです。
0475デフォルトの名無しさん
05/02/02 22:56:24もう答え要らんみたいだけど、実行するユーザを工夫するか。
ちょっと違うけど複数プロセスで構成してお互いに監視して再起動でも要件満たす?
ぐらいしか思いつかんかったがどうだろう。
0476デフォルトの名無しさん
05/02/03 01:19:48具体的にやりたい事は、Beckyのプラグインをつくってるのですが、
そこで、ツールバーにアイコンをひとつ加えたいのです。
0477デフォルトの名無しさん
05/02/03 01:29:320478デフォルトの名無しさん
05/02/03 01:55:13何か、メッセージ調べてると、どうも0x2を押したときに0x202が送られてきてるみたいなんですが…
こういう場合は、DirectInputを使うかjoyGetPosExを使うしか無いですか?
0479デフォルトの名無しさん
05/02/03 03:28:29これでも参考にしなさい
http://support.microsoft.com/kb/186898
0480デフォルトの名無しさん
05/02/03 04:30:39具体的にどうやればいいのでしょうか?
なにか、API名などのヒントだけでも頂ければあとは自分で調べます。
0481デフォルトの名無しさん
05/02/03 05:16:12AddMenu
0482デフォルトの名無しさん
05/02/03 07:50:40>>481
わかんねーんなら、黙ってろ
てきとーな関数名ならべてんじゃねーよ
0483デフォルトの名無しさん
05/02/03 10:30:32C++ ではなくて C で Windows95 以降用のプログラムを作りたいの
ですが、どの開発環境を使えば出来るのかよくわかりません。
ランタイムライブラリのファイルを 1,2 個入れる程度なら妥協は
出来ますが、.NET Freamwork をインストールするなんて方法は取
りたくありません。
何か方法がありますか?
今思い出したのですが、Quick C for Windows 持っています。
それでいいかも。
代案があればお願いします。
0485デフォルトの名無しさん
05/02/03 11:37:550486デフォルトの名無しさん
05/02/03 11:39:27C++に対応してないC専用開発環境。マジオススメ。
0488デフォルトの名無しさん
05/02/03 16:01:29検索アルゴリズムは自作するしかないの?
0489デフォルトの名無しさん
05/02/03 16:12:490490デフォルトの名無しさん
05/02/03 16:22:46何を検索したいのか知らんが、とりあえず "Indexing Service"でも使えば?
0491デフォルトの名無しさん
05/02/03 16:50:30何を指定すればいいのでしょうか?
数時間かけて調べてみましたが、よくわかりません。
すいません。
0492デフォルトの名無しさん
05/02/03 17:08:230493デフォルトの名無しさん
05/02/03 17:08:430494493
05/02/03 17:11:130495デフォルトの名無しさん
05/02/03 17:12:06別にウィンドウなんてなくてもメッセージはやり取りできるし、
そのためにPostThreadMessageはあるんだが……。
0496488
05/02/03 17:12:120497デフォルトの名無しさん
05/02/03 17:13:120498デフォルトの名無しさん
05/02/03 17:29:47いわゆるVC++でデバックする時に使うブレークポイントを自分でAPIを使って実現したいのですが。
またその時のレジスタ値を取得するようなAPIはあるのでしょうか?
0499デフォルトの名無しさん
05/02/03 17:32:48タスクバーにはアイコンがあります・・・
0500デフォルトの名無しさん
05/02/03 17:33:26やはり境界(2ドット程度)ができるんですよ。
くぼみっぽいものが。
http://www.geocities.jp/ayana_city/windowstyle.jpg
完全に窪み・縁がないウィンドウはつくれないのでしょうか?
ToolTipの小さいウィンドウみたいな感じのものを作りたいのです。
0501デフォルトの名無しさん
05/02/03 17:36:400502デフォルトの名無しさん
05/02/03 17:36:480503500
05/02/03 17:38:00http://www.geocities.jp/ayana_city/tooltip.jpg
周囲の縁は上記の写真のとおり、一ドットまでならOKです。
0504デフォルトの名無しさん
05/02/03 17:39:13Win32APIじゃないけど文字列検索ならとりあえずstd::string::findとかstd::strstrとか
0505デフォルトの名無しさん
05/02/03 17:39:140506デフォルトの名無しさん
05/02/03 17:42:23http://www.geocities.jp/ayana_city/tooltip.jpg
このページは準備中です
申し訳ありませんが、このページは現在利用できなくなっています。しばらくたってからもう一度お試しください。ご不明な点があれば、ヘルプをご覧の上、お問い合わせください。
0507500
05/02/03 17:46:43DWORD dwExStyle;
lpszClassName = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW, hCursor);
dwExStyle = WS_EX_TOPMOST;
dwStyle &= ~WS_THICKFRAME;
return CreateEx( dwExStyle, lpszClassName, _T("タイトルバー"), dwStyle, rect, NULL, NULL, NULL);
だと、縁有りになりますね。
0508デフォルトの名無しさん
05/02/03 17:46:54それって2バイト文字考慮されてなかった希ガス
0509デフォルトの名無しさん
05/02/03 17:48:11ttp://forums.belution.com/ja/vc/000/059/84.shtml
0510デフォルトの名無しさん
05/02/03 17:48:22dwExStyleを初期化せずにdwStyle &= ~WS_THICKFRAME;ですかぁ?
0511500
05/02/03 17:54:06>>509さん、
それ参照したいと思います。
皆さん、本当にご迷惑おかけして吸いません。
0512デフォルトの名無しさん
05/02/03 17:57:17というのはわりと嵌りやすい罠だな。
0513デフォルトの名無しさん
05/02/03 17:58:03ウィンドウ作られあとに(WM_CREATEとかの処理の中で)
GetWindowStyle
ws &= ~WS_THICKFRAME
SetWindowStyle
じゃだめ?
0514デフォルトの名無しさん
05/02/03 17:59:01#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | \
WS_CAPTION | \
WS_SYSMENU | \
WS_THICKFRAME | \
WS_MINIMIZEBOX | \
WS_MAXIMIZEBOX)
ですが何か?
0515500
05/02/03 18:05:54{
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
0516500
05/02/03 18:13:05その2ドットは多少の色違いがあるから、窪みがあるように見える。
rightとbottomは一ドットなんですけども。
left top right bottomの四方全て、一ドットの枠にしたいんですが。
0517デフォルトの名無しさん
05/02/03 18:16:51dwStyle &= ~WS_THICKFRAME;
アフォ?
0518デフォルトの名無しさん
05/02/03 18:16:57CXSFrameWndがCFrameWnd派生だとすると、段差がついてるのはCXSFrameWndに貼り付けられた子ウィンドウのほうなんじゃねぇか?
0519デフォルトの名無しさん
05/02/03 18:20:31ttp://homepage2.nifty.com/DSS/VCPP/MFC/Window/Window3DHide.htm
0520デフォルトの名無しさん
05/02/03 18:21:060521デフォルトの名無しさん
05/02/03 18:23:050522デフォルトの名無しさん
05/02/03 18:26:19ウィンドウが作られたあとにスタイル変更する方が無難。
0523デフォルトの名無しさん
05/02/03 18:27:02SetWindowLongPtrを使用しているのですがコンパイル時に
warning C4244: '引数' : 'LONG_PTR' から 'LONG' に変換しました。データが失われているかもしれません。
となります。
これは私が何か問題のある行動、または足りない設定があるのでしょうか?
それとも単にSDKヘッダの定義ミスで特に問題のない事なのでしょうか?
また、回避策はあるのでしょうか?
できればSetWindowLongPtrの為だけに C4244を#pragmaでオフにすることは避けたいのですが・・・
0524デフォルトの名無しさん
05/02/03 18:33:310525デフォルトの名無しさん
05/02/03 18:34:59キャストすれば?
0526デフォルトの名無しさん
05/02/03 18:41:00SetWindowLongPtrの戻り値をLONG/long型の変数に代入しているならLONG_PTRにしろ。
0527デフォルトの名無しさん
05/02/03 18:44:29実際にはlongか__int64ってのはなんでだろ。
0528デフォルトの名無しさん
05/02/03 18:45:43SetWindowLongPtrの定義が
LONG_PTR SetWindowLongPtr( HWND hWnd, int nIndex, LONG_PTR dwNewLong );
のようになっているはずでにもかかわらず
INT WINAPI _tWinMain(省略)
{
LONG_PTR dwNew = 100; // 数値は適当
SetWindowLongPtr(NULL, 0, dwNew); // 内容は適当
}
のようなコードで上記警告になってしまいます。
0530デフォルトの名無しさん
05/02/03 19:27:22警告はLONG_PTR dwNew = 100; で出てるんじゃね?
0531デフォルトの名無しさん
05/02/03 19:49:330532デフォルトの名無しさん
05/02/03 19:50:46{
LONG dwNew = 100; // 数値は適当
SetWindowLongPtr(NULL, 0, &dwNew); // 内容は適当
}
0533デフォルトの名無しさん
05/02/03 20:33:02c:\source1.cpp(20) : error C2440: '=' : 'HGDIOBJ' から 'HBRUSH' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
c:\source1.cpp(43) : warning C4244: 'return' : 'WPARAM' から 'int' に変換しました。データが失われているかもしれません。
というエラーと警告が出ます。
なぜだか分からないのですが分かる方教えてくれませんか?
MC++2003を使ってます。
0534デフォルトの名無しさん
05/02/03 20:41:08これの一番下か?
0535デフォルトの名無しさん
05/02/03 20:44:13あ、そんなところに・・・・
これはどのように治せばいいのでしょうか?
0536デフォルトの名無しさん
05/02/03 20:58:340537デフォルトの名無しさん
05/02/03 21:06:530538デフォルトの名無しさん
05/02/03 21:11:13あ、出来ました
どうもありがとうございました^^
0539デフォルトの名無しさん
05/02/03 21:17:240540523,528
05/02/03 21:17:28それだとSetWindoLongPtrを使う意味がまるでなくなってしまうような orz
MSのヘッダにミスがあるということで良い気がしてきました(´・ω・`)
0541デフォルトの名無しさん
05/02/03 21:57:25あるDLLを静的リンクしたいのですが、DLLだけしかありません。
関数の型はわかってます。
0542デフォルトの名無しさん
05/02/03 22:13:270543デフォルトの名無しさん
05/02/03 22:13:490544デフォルトの名無しさん
05/02/03 22:15:160545デフォルトの名無しさん
05/02/03 22:18:08DEFを書けば、LIB.EXEから作成できる。
0546デフォルトの名無しさん
05/02/03 22:27:29まさかキャレットの移動じゃないよね?
0547544
05/02/03 22:38:060548デフォルトの名無しさん
05/02/03 22:59:08WindowFromPoint()でウィンドウハンドル取って
SetFocus()だとどうだろう
0549デフォルトの名無しさん
05/02/03 23:44:26エディットボックスの斜め上あたりにカーソルを存在させる
とか?
かなり無理があると思うが・・・・
0550デフォルトの名無しさん
05/02/04 00:13:170551デフォルトの名無しさん
05/02/04 07:20:14ダイアログが閉じる前に選択されたファイルのチェックを行い
メッセージボックスを表示したいのですが、
どのようにすればよいでしょうか。
CDN_FILEOK だとダメみたいです。。。
0552デフォルトの名無しさん
05/02/04 07:48:48CDN_FILEOKを受け取った後、FALSEを返してるか?
0553デフォルトの名無しさん
05/02/04 09:01:380554デフォルトの名無しさん
05/02/04 10:00:210555デフォルトの名無しさん
05/02/04 10:17:03あの文で何がしたいか分かるのか?
0556デフォルトの名無しさん
05/02/04 10:44:010557デフォルトの名無しさん
05/02/04 10:54:46・ダイアログが閉じる前に
(=ダイアログを閉じないで)
・CDN_FILEOK だとダメみたいです。。。
(=CDN_FILEOKをフックして色々したけど駄目だった)
この程度を文中から読み取れないで、
よくMSDNとか理解できるな。
0558デフォルトの名無しさん
05/02/04 11:24:30どのラジオボタンが押されているのかを取得したいのですが、
IDが、IDC_RADIO1 , IDC_RADIO2 , ・・・・・ と並んでいるとして
SendMessage(GetDlgItem(hDlgWnd, IDC_RADIOx ),BM_GETCHECK, 0, 0)
をforループで回して、 チェックされているラジオボタンを検出したら
nCheckItem = i としたらいいのではないか?と思ってます。
ところが、#defineで定義されている最後の数字をFORループの変数に従って
変えるやり方がわかりません。どうしたらいいでしょう?
0559デフォルトの名無しさん
05/02/04 11:25:36CDN_FILEOKの応答を正しく書いてないかもしれない。
0560デフォルトの名無しさん
05/02/04 11:28:37意味不明
0561デフォルトの名無しさん
05/02/04 11:36:10int id[] = {IDC_RADIO1,IDC_RADIO2, ・・・・・};
0562558
05/02/04 12:31:370563デフォルトの名無しさん
05/02/04 12:35:18実はこうなっている。
#ifdef _WIN64
(略)
#else
#define SetWindowLongPtrA SetWindowLongA
#define SetWindowLongPtrW SetWindowLongW
#endif
Windows 95から使えるのはこういうわけ
0564デフォルトの名無しさん
05/02/04 12:35:53「ポインタと同じサイズ」と言いたいのだろう。
0565デフォルトの名無しさん
05/02/04 12:47:130566デフォルトの名無しさん
05/02/04 12:59:32どうやってもダイアログにアイコンを表示できません。
初期のコードにSetIconなどのアイコンを表示するようなコードが書かれているのですが、
なぜ表示されないのでしょうか?
0567566
05/02/04 13:11:430568デフォルトの名無しさん
05/02/04 13:39:33解決したなら、それはそれで「なぜ表示できていなくて
どうやって解決したか」を語るべきだ。
0569デフォルトの名無しさん
05/02/04 13:49:370570デフォルトの名無しさん
05/02/04 14:11:46現在のマウスの位置を取得するには、どのようにすればいいのでしょうか?
0571デフォルトの名無しさん
05/02/04 14:12:48マウスのLボタンがクリックされているかどうかを調べるWin32関数はありますか?
0572デフォルトの名無しさん
05/02/04 14:17:45CDから指定トラックのデータを吸い出すAPIとかってあるの?
知ってる人にはフザけた質問かもしれんが、ちょっとマジで聞いてます。
だれかマジレスお願いします。
0573デフォルトの名無しさん
05/02/04 15:01:10>>571 GetAsyncKeyState
0575566
05/02/04 16:07:38それをTrueにしたらアイコンが表示されました
これをTrueにしないとアイコンや最大化、最小化が表示されないっていうのを知りませんでした
0576デフォルトの名無しさん
05/02/04 16:40:000577デフォルトの名無しさん
05/02/04 17:15:31どうしたらよいのでしょうか?
0578デフォルトの名無しさん
05/02/04 17:34:41ScreenToClient
0579デフォルトの名無しさん
05/02/04 18:18:01逆引きAPIのすごく細かいサイトとか本あればいいのにねぇ。
金になるならやるんだが。
0580デフォルトの名無しさん
05/02/04 18:42:38スレッド→メッセージループ→時間が来たらメッセージ送信
って感じですか?
それとも、別の良い方法がある?
0581デフォルトの名無しさん
05/02/04 18:44:010582デフォルトの名無しさん
05/02/04 18:47:550583デフォルトの名無しさん
05/02/04 18:52:06Me以下もサポートしなけりゃならないなら余計な事になるから。
0584580
05/02/04 18:59:47私へのレスですよね
出来れば1xもサポートできる方が良いですが、自分も回りもXPか2000だけなんで、無サポートでも良いです
どんな方法か教えてください。
0585デフォルトの名無しさん
05/02/04 19:14:511xって…9xなのか?
それとも…ガクガク
0586デフォルトの名無しさん
05/02/04 19:41:25スレタイをちゃんと見てる香具師ならそれはないだろう
0587デフォルトの名無しさん
05/02/04 19:50:250588デフォルトの名無しさん
05/02/04 20:02:32俺も使った
( ゚д゚)ペッ が感想
0589デフォルトの名無しさん
05/02/04 20:07:20まー、あのころはStarに感動してポケットマネーでGUIを感動した時代だ。
仕方が無い
059069式フリーPG ◆hND3Lufios
05/02/04 20:16:08まあ、68000の8MHzであれだけのことをやってたMacはたいしたもんだった。
爆弾でまくりだったけど。
0591デフォルトの名無しさん
05/02/04 20:16:550592デフォルトの名無しさん
05/02/04 20:19:510593デフォルトの名無しさん
05/02/04 20:21:00だったらMe以下でもできるじゃん。
たぶん>>581は俺たちの知らない様なこと知ってる。
期待。
0594デフォルトの名無しさん
05/02/04 20:21:020595デフォルトの名無しさん
05/02/04 20:59:03連続で押していると、100ミリ秒ぐらいの間隔でWM_KEYDOWNが来ますが、
PostMessageでやると、その間がありません。
どうやれば、ホントにキーを押した感じのような表現が出来るでしょうか。
0596デフォルトの名無しさん
05/02/04 21:02:49とか思ってるのはあほすぎ。逆に、システムがユーザーをごまかす
を考えろw、ユーザーが不利にならない範囲でだがw
0597デフォルトの名無しさん
05/02/04 21:07:03きっとFiberのことでは?
0598デフォルトの名無しさん
05/02/04 21:07:22Sleep(100);
SendMessage(...);
でだめか?
0599デフォルトの名無しさん
05/02/04 21:10:53Tipかと思った
0600595
05/02/04 21:11:35すいません。
>>598
そういうのも考えていました。私のはSetTimerの方でしたが。
WM_KEYTOUCH、WM_KEYPUSHとかあればいいんですけど。
0601デフォルトの名無しさん
05/02/04 21:58:051xとか書いててそのまま飯食ってた……
今の所、>>597>>599>>592というレスがあるみたいなので、調べてみます。
0602デフォルトの名無しさん
05/02/04 22:06:31実装はスレッドだが、CreateTimerQueue,付近を調べれば?
知ってんじゃないの?SDKの同期/非同期サービスだが、知っていたらごめん。
いやー、あんた知ってるよね
0603デフォルトの名無しさん
05/02/04 22:25:24GlobalAllocの第2引数の 割り当てるサイズ なのですが
わかりにくいと思うのですが
char *lpszBuf;
int nLen;
HGLOBAL hMen;
nLen = GetWindowTextLength(hEdit);←hEditのサイズが入る
hMem = GlobalAlloc(GHND, sizeof(char) * nLen + 1);
lpszBuf = (char *)GlobalLock(hMen);
こんな感じになると思うのですが
sizeof(char) * nLen + 1のところが良くわからないのですが
sizeof(char) × (nLen + 1)ってことなのでしょうか?
その時のnLen+1は理解できるのですが
sizeof(char)もサイズを求める物ですよね?
こいつはいったい何のためにいるのでしょうか?
0604デフォルトの名無しさん
05/02/04 22:30:06あるソフトに、メッセージ(とりあえず、マウス左ボタンダウン)を投げたいのです
ですが、その対象となるソフトが、グローバルフックでメッセージを受けて処理している場合、
そのソフトに対し、メッセージを投げるにはどうしたらいいのでしょうか?
わかるかたいらしたらお願いいたします
0605デフォルトの名無しさん
05/02/04 22:33:48sizeof(char) * nLen + 1は(sizeof(char) * nLen )+ 1と等しい
GetWindowTextLength(hEdit)はhEditに格納されている文字列の文字数が返り値になる
つまり一文字のバイト数*文字数+1てわけ
つうかコレ書いた奴間抜けだな
0606デフォルトの名無しさん
05/02/04 22:36:07本来はsizeof(LPTSTR) * nLen + 1じゃないか?それ。
この場合はUNICODEが定義されてるかどうかでLPTSTRのサイズが変わる。
0607デフォルトの名無しさん
05/02/04 22:37:55分かりました!
勘違いで迷路に迷ってたみたいです
nLenが既にもう完全なhEditのサイズかと思ってました
本当に間抜けな質問申し訳ありません
曇ってたのがすっきり晴れました
マジでありがとう
0608デフォルトの名無しさん
05/02/04 22:47:500609603
05/02/04 22:56:45nLen = GetWindowTextLength(hEdit);←hEditの文字数が入る
のときのnLenが文字数なので sizeof(char)*nLen+1は理解できたのですが
dwSize = GetFile(hFile , NULL);←dwSizeにサイズが入る
このとき dwSizeは完全なサイズが入っているので
第2引数は dwSize+1 だけでいいと思うのですが
何故かsizeof(char)*dwSize+1となっているのですが
charが8バイトでdwSize+1が17バイトだとしたら
メモリーの無駄遣いしまくってしまってないでしょうか?
0610デフォルトの名無しさん
05/02/04 23:05:04LPTSTRのさいずはかわらねーよ
0611デフォルトの名無しさん
05/02/04 23:06:10あんた、釣りがへた、
典型的なハード知らないソフトウエアエンジニアー
0612603
05/02/04 23:12:09エンジニアなどたいした肩書きは無いですよ
独学で猫でもわかるを読んで勉強してるので
知り合いにCなどが出来る方がいないもので変な理解をすると
変更が効かずどんどん沼にはまっていってしまって・・・・
0613デフォルトの名無しさん
05/02/04 23:13:08> dwSize = GetFile(hFile , NULL);←dwSizeにサイズが入る
> このとき dwSizeは完全なサイズが入っているので
> 第2引数は dwSize+1 だけでいいと思うのですが
> 何故かsizeof(char)*dwSize+1となっているのですが
> charが8バイトでdwSize+1が17バイトだとしたら
> メモリーの無駄遣いしまくってしまってないでしょうか?
…どこを指しているのかワカラン
0614603
05/02/04 23:19:33申し訳ないですわかりにくかったです
HANDLE hFile;← CreatFileで既に作ってる
char *lpszBuf;
DWORD dwSize;
HGLOBAL hMen;
dwSize = GetFileSize(hFile, NULL);←hFileのサイズが入る
hMem = GlobalAlloc(GHND, sizeof(char) * dwSiza + 1);
lpszBuf = (char *)GlobalLock(hMen);
dwSize = GetFile(hFile , NULL);←dwSizeにサイズが入る
このとき dwSizeは完全なサイズが入っているので
第2引数は dwSize+1 だけでいいと思うのですが
何故かsizeof(char)*dwSize+1となっているのですが
charが8バイトでdwSize+1が17バイトだとしたら
メモリーの無駄遣いしまくってしまってないでしょうか?
まだわかりにくいと思うのですが宜しくおねがいします
0615デフォルトの名無しさん
05/02/04 23:24:190616デフォルトの名無しさん
05/02/04 23:24:340617603
05/02/04 23:30:518ビットは1バイトですね
本当にはずかしい
テンパってテンパって・・・
くだらない質問に答えていただいてありがとうございます。
くだらなかったのにマジで悩んでました
0618デフォルトの名無しさん
05/02/04 23:37:120619デフォルトの名無しさん
05/02/05 00:52:540620デフォルトの名無しさん
05/02/05 01:24:530621デフォルトの名無しさん
05/02/05 01:39:54ttp://www.tscn.net/antenna/news/food/11/0.html
0622デフォルトの名無しさん
05/02/05 01:42:360623デフォルトの名無しさん
05/02/05 03:19:11strlen=lstrlen、strcpy=lstrcpy、sprintf=wsprintfがあるぐらいだからそれもありそうなんだが。
0624デフォルトの名無しさん
05/02/05 03:35:550625デフォルトの名無しさん
05/02/05 03:42:27とかいうやつは、しゃらぽあ、あいこ、いらない、五月蠅い
0626デフォルトの名無しさん
05/02/05 03:46:20asciiはそうだ、8ビットこーどは西洋にはない
0627デフォルトの名無しさん
05/02/05 03:48:01>8ビットこーどは西洋にはない
>8ビットこーどは西洋にはない
0628デフォルトの名無しさん
05/02/05 03:49:26ありますた。
どうもありが�d。
0629デフォルトの名無しさん
05/02/05 03:53:100630デフォルトの名無しさん
05/02/05 04:36:120631デフォルトの名無しさん
05/02/05 07:08:54GlobalAllocなんて忘れろ。
クリップボードを扱うときしか使わない。
0632デフォルトの名無しさん
05/02/05 07:10:53理由は?
0633デフォルトの名無しさん
05/02/05 07:14:0116Bit時代の遺物
HeapAlloc使え
0634デフォルトの名無しさん
05/02/05 07:20:24さむ
0635デフォルトの名無しさん
05/02/05 07:28:29使うじゃん。
おまえもしかして、malloc で済む用事に
わざわざ VirtualAlloc だの CreateFileMapping だの使う手合いか?
0636デフォルトの名無しさん
05/02/05 07:53:27>>633嫁
0637デフォルトの名無しさん
05/02/05 08:00:33意味わからん
0638デフォルトの名無しさん
05/02/05 08:14:28大抵自プロセス内だけのデータならLocalAllocで済ますんだが
0639デフォルトの名無しさん
05/02/05 08:51:13固有の機能を必要としない場面でむやみに使うと
移植性おとすだけだろ
0640デフォルトの名無しさん
05/02/05 08:56:40Win32 APIでは、 ローカル ヒープとグローバル ヒープに違いはありません。
バカじゃねーの?
0641デフォルトの名無しさん
05/02/05 09:02:35malloc で済む用事にCreateFileMapping
具体的にmalloc で済む用事にCreateFileMappingが使える例を教えて下さい。
0642デフォルトの名無しさん
05/02/05 09:13:180643デフォルトの名無しさん
05/02/05 09:17:39ファイルマッピングの使い方が知りたいなら MSDN でも嫁
ここでイチから教えてやるほどヒマじゃねえ
時間単価1万くらい出すなら別だが
0644デフォルトの名無しさん
05/02/05 09:21:36使い方は知ってますがmallocの代わりなんかに使える例を教えて下さい。
0645デフォルトの名無しさん
05/02/05 09:31:46HeapAllocを何も考えずに直接使うのはただのバカ。
0646デフォルトの名無しさん
05/02/05 09:42:36確保したいサイズを指定してCreateFileMappingを呼び、
MapViewOfFileすればいいだけだろ?
mallocが使える全ての場所で、その代わりにできるが?
もちろん、mallocが使えるならmallocを使うに越したことは無い。
0648デフォルトの名無しさん
05/02/05 09:43:49----柵----
malloc > HeapAlloc(GetProcessHeap()) >>>>(越えられない壁)>>>> Global/LocalAlloc
----別世界----
CreateHeap, IMalloc, Global/Localメモリハンドルが必要なとき
----別次元----
CreateFileMapping
0649デフォルトの名無しさん
05/02/05 09:58:04バグばっかり作ってるんだろうな。
0650デフォルトの名無しさん
05/02/05 10:04:49はいはい。君の作ったコードも先輩がこっそり
直してくれてるんだろうね。
0651デフォルトの名無しさん
05/02/05 10:09:13-----神の壁-----
malloc, new
----一般人の壁------
HeapAlloc
----バカの壁--------
LocalAlloc, GlobalAlloc
0652デフォルトの名無しさん
05/02/05 10:11:22動的バッファもvector<char>でいいし。
0653デフォルトの名無しさん
05/02/05 10:14:12「あるウィンドウ」を表示させるとき、今のアクティブなウィンドウをディアクティブにしないで、
アクティブのままにしつつ、「あるウィンドウ」を表示させたい場合どうすればいいのでしょうか?
0654デフォルトの名無しさん
05/02/05 10:19:390655デフォルトの名無しさん
05/02/05 10:29:060656デフォルトの名無しさん
05/02/05 11:06:40もうちょっと質問者の意図を汲んでやれよ。
0657デフォルトの名無しさん
05/02/05 13:15:15WaitCommEvent();
つかってさあ、
スレッドでシリアルの受信バッファのイベント待って、
受信バッファのデータをchar変数にバッファさせようとしてるのよ。
ところが、一回受信してEV_RXCHARのイベントが上がったら、
上がりっぱなしで、charにたまりつづけてるんだけど、
どうすりゃいいのよ?
つうかさ、いまさら232Cかよ。
0658デフォルトの名無しさん
05/02/05 13:16:51Cisco製品を普段使ってるんですが、
その際、TeraTermを使用してるんです。
で、自作のターミナルを作ろうと思ってるんですが、
その際、資料として参考になるサイトってご存知得ないですか?
できれば、教えていただきたいのですが。
よろしくお願いします。
0659デフォルトの名無しさん
05/02/05 13:19:180660デフォルトの名無しさん
05/02/05 14:29:15例えば、「あいさつ」という文字列を変換させたいとして、
そのAPIに「あいさつ」という文字列を引数として渡すことで、漢字変換対象のリストを表示させるみたいな。
0661デフォルトの名無しさん
05/02/05 14:31:22>>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のフロー制御の知識とか本が無いと意味不明だったきがする。
0663デフォルトの名無しさん
05/02/05 14:56:24無手順?
複数のスレッドで交代で切れ目なく受信バッファを読むとかダメ?
0664デフォルトの名無しさん
05/02/05 17:11:40SimpleTerm とかいうサンプルが MSDN にあったのではないか。
オレはこれを元に作った ComNifty まがいで nifty のパソコン通信していた。
なんとか7という口へ 56Kモデム経由だったと思う。
0665デフォルトの名無しさん
05/02/05 17:26:150666デフォルトの名無しさん
05/02/05 18:13:570667デフォルトの名無しさん
05/02/05 21:14:30TeraTermの拡張インタフェースは、かなり捻じれている。
それを思えば、単体で動くPUTTYのソースを直接弄って
独自PUTTYに改変するのいい。
0668657
05/02/05 23:48:20イベントが上がりっぱなしなのがなんでなのかが
わかってないのよ、私。
受信バッファ読んだらイベント下がると思ってたんだけどな・・・
勝手な思い込みに近いけど。
0669デフォルトの名無しさん
05/02/06 00:22:090670デフォルトの名無しさん
05/02/06 00:33:220671デフォルトの名無しさん
05/02/06 00:36:52受信バッファ小さすぎるとか
ReadFile()が追いついてないとか
0672デフォルトの名無しさん
05/02/06 01:10:180673デフォルトの名無しさん
05/02/06 01:18:07FILE_FLAG_OVERLAPPED を指定した場合は IOがペンディングになってるかどうかをチェックしないと。
0674デフォルトの名無しさん
05/02/06 03:49:26Win32APIで出来ますか?
0675デフォルトの名無しさん
05/02/06 03:51:490676デフォルトの名無しさん
05/02/06 03:57:51MoveFile()
rename()
0677デフォルトの名無しさん
05/02/06 13:56:31まずwaveOutWrite()でヘッダ送る(音データが格納されているバッファのアドレスも送られる)。
その後に音データバッファのデータを変更してもOKなんですか?
もちろん再生位置付近のところとかは、いじらないようにします。
0678デフォルトの名無しさん
05/02/06 16:30:100680デフォルトの名無しさん
05/02/06 19:41:35画像Aを背景にして、画像Bを上に表示したいのですが、画像Bの要らない部分を透明に出来ますか?
分かる方お願いします。
0681デフォルトの名無しさん
05/02/06 19:48:540682デフォルトの名無しさん
05/02/06 22:09:37冴子先生みたいになればいいんなら
↓
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/layerwin.asp
0683デフォルトの名無しさん
05/02/06 22:12:320684デフォルトの名無しさん
05/02/06 23:03:450685デフォルトの名無しさん
05/02/07 04:01:37C:\txt\a.txt だと読めないのに
C:\\txt\\a.txtだと読めるのはなぜですか?
_getcwdでデレクトリー調べているので
C:\txt としかゲット出来ないですけど
どうしたら良いんでしょうか?
0686デフォルトの名無しさん
05/02/07 04:08:360687デフォルトの名無しさん
05/02/07 04:23:02\\a,txtにしたら出来ました
どうも^^
0688デフォルトの名無しさん
05/02/07 11:05:350689デフォルトの名無しさん
05/02/07 12:53:16Enterキーが押されたときに処理させたいのですが、
押すとビープ音が鳴ってしまいます。
これを鳴らさないようにするには、どうすればいいのですか?
ちなみにCreateのときにES_AUTOVSCROLLとES_MULTILINEを設定すると
鳴らなくなるんですが、処理後に改行してしまいます。
0690デフォルトの名無しさん
05/02/07 14:27:38耳を塞げ
0691デフォルトの名無しさん
05/02/07 15:43:27エディットボックスをサブクラス化してやっているって事でいいのかな?
だとしたらWM_KEYDOWNで処理した場合はCallWindowProcに渡さなければいいんでないか?
状況が良くわからないので答えようがないけど
0693デフォルトの名無しさん
05/02/07 16:42:02C言語の超超基本的な事でWindowsAPI全然関係ないぞ・・・
0694デフォルトの名無しさん
05/02/07 16:47:49Debug/test1.exe : fatal error LNK1120: 外部参照 1 が未解決です。
と出るのですがどういう事なのでしょうか?
0695デフォルトの名無しさん
05/02/07 16:52:30関数WndProcが無いとおっしゃってます
0696デフォルトの名無しさん
05/02/07 17:19:030697デフォルトの名無しさん
05/02/07 17:24:50そーっすね。
0698デフォルトの名無しさん
05/02/07 17:29:02ありがとうございます^^
書き方をミスってましたw
もう一つ質問があるのですが、画像表示を速くすると、画像がちらついてしまいます。
どうすればいいのでしょうか?
0699デフォルトの名無しさん
05/02/07 17:32:10背景を消去しないようにする
(WM_ERASEBKGNDをDefWindowProcに渡さない)
0700デフォルトの名無しさん
05/02/07 17:34:26OSの起動時だけ、実行したいプログラムがあるとして、
OSの起動時か?そうでないかを知るには
どうしたら良いのでしょうか?
宜しくお願いします。
0701691
05/02/07 17:39:21>>692
WM_KEYDOWNじゃなくてWM_CHARにして
wpがVK_RETURNだったらCallしないって感じでどうだろう。
//サブクラス化したプロシージャ
LRESULT CALLBACK _SubWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CHAR:
if(wParam == VK_RETURN){
//処理
return 0;
}
}
return CallWindowProc();
}
0702デフォルトの名無しさん
05/02/07 17:46:44すいません。どのように記述すればいいのでしょうか??
0703デフォルトの名無しさん
05/02/07 17:47:18>>699
です
0704デフォルトの名無しさん
05/02/07 17:52:20case WM_ERASEBKGND: return 0;
0706デフォルトの名無しさん
05/02/07 18:05:390707デフォルトの名無しさん
05/02/07 18:10:31GlobalAddAtomじゃダメかな?
0708デフォルトの名無しさん
05/02/07 18:11:50やってみたら?
0709デフォルトの名無しさん
05/02/07 18:25:02やってみたら「ガ」を「ガ」になった。
すごいAPIだ
0710デフォルトの名無しさん
05/02/07 18:34:040711デフォルトの名無しさん
05/02/07 18:37:450712デフォルトの名無しさん
05/02/07 18:52:14ありがとうございます。
出来たのですが、ちと、おかしくなってしまいます。
WM_KEYDOWNでキー入力をすると画像を描画するようにしてるので、押しっぱなしにすると描画され続けてしまいます。
WM_KEYUPだとはなしたときなので使いづらいです。
キー入力で押し放しでも1回の入力にする方法って有りますか?
0713デフォルトの名無しさん
05/02/07 18:54:400714デフォルトの名無しさん
05/02/07 19:06:460715デフォルトの名無しさん
05/02/07 19:11:27あるWindowに属するクライアント外にマウスカーソルがあるということがわかる、WMメッセージ(または何か別の方法)はありますか?
カーソルがクライアント内からクライアント外へ出たことを知りたいもので。
宜しくお願いします。
0716デフォルトの名無しさん
05/02/07 19:11:472回目以降おなじコードなら無視すればいいじゃん
0717デフォルトの名無しさん
05/02/07 19:32:27それと同じようなタイプのウィンドウをもう1つ出して、
新しく出た方のウィンドウにフォーカスを移したいと思います。
これを専門用語で言うと、STATICなPOPUPウィンドウを作り、
それをサブクラス化するでいいんでしょうか。
検索する時のキーワードにさせていただきます。
0718デフォルトの名無しさん
05/02/07 19:45:010719デフォルトの名無しさん
05/02/07 19:48:231.マウスキャプチャして検知
2.WM_MOUSELEAVEを拾う(Win 98以降)
0721デフォルトの名無しさん
05/02/07 20:00:590722717
05/02/07 20:02:04自分なら、WM_MOUSEMOVEが来る毎に、以下のような感じの関数を使い、
真なら、ウィンドウの中にマウスポインタがあるとします。
int CheckWindowCursorPos(HWND hWnd, POINT *point)
{
GetCursorPos(point);
if(!ScreenToClient(hWnd, point)) return 0;
return 1;
}
0723715
05/02/07 20:05:03マウスボタンを押さないで、検知したいので、それだと無理です。
>Winにおいては、WM_MOUSE_LEAVEは、WM_LBUTTON_DOWN後に TrackMouseEvent?();をTME_LEAVEを指定して呼び出した場合に一度だけ送信される。
でも、ありがとうございました。
0724717
05/02/07 20:05:100725デフォルトの名無しさん
05/02/07 20:05:28WM_MOUSEMOVEが来るのは常にwindow内にあるときのみ
0726715
05/02/07 20:07:13ええ、おっしゃるとおりで。
で、クライアント領域を外れたら、通知されるメッセージがあると助かるのですが、
ないとなると、自作システムを変更せざるえません。
0727デフォルトの名無しさん
05/02/07 20:11:590728717
05/02/07 20:15:11そうですね。間違えました。
自分も、マウスの位置によって、処理の動作を変えるとか
やっているんですが、ウィンドウの中での位置でした。すみません。
0729デフォルトの名無しさん
05/02/07 20:15:300730デフォルトの名無しさん
05/02/07 20:18:550731デフォルトの名無しさん
05/02/07 20:19:032回目同じコードなら無視する方法も考えてみたけど分からなかったです・・・・
どうすればいいのでしょうか?
0732デフォルトの名無しさん
05/02/07 20:20:570733デフォルトの名無しさん
05/02/07 20:32:48>other keyboard accelerators do not work.
0734デフォルトの名無しさん
05/02/07 20:34:12WM_KEYDOWNの説明よく見れ
lParamの0-15ビットにリピートカウント(押しっぱなしによって何度もキーが押されるた回数)入ってるから
キーリピートでの入力じゃない場合はすればよい。
0735デフォルトの名無しさん
05/02/07 20:59:00どうもです^^
例など教えて頂けませんか?
0736デフォルトの名無しさん
05/02/07 21:01:16氏ね
0737デフォルトの名無しさん
05/02/07 21:28:40あると便利なんですが。
Win32プログラミングで使いたいのです。
0738デフォルトの名無しさん
05/02/07 21:31:310739734
05/02/07 21:47:52>>735
すまんすまん、今良く見たら自分が勘違いしていた、>>734じゃできないわ。
だが、結局答えがWM_KEYDOWNの説明にそのまま書いてあったぞ。
lParamのビット30が直前のキー状態を保持してるので、その状態が離された状態なら初回と判断すればよい。
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg){
case WM_KEYDOWN:
if( ((lParam >> 30) & 0x00000001) == 0){ // 初回押下なら
// 初回押下時のみの処理
}
break;
}
}
MFCならこんな感じかな?
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags )
{
if( ((nFlags >> 15) & 0x00000001) == 0){ // 初回押下なら
// 初回押下時のみの処理
}
}
だがな
>>731 >>735よ、なんていうか。
市ね
0740デフォルトの名無しさん
05/02/07 21:52:45_beginthreadexで作成したスレッドは
CloseHandleで閉じなければいけませんが、
スレッドが終了したら閉じるということを
やりたい場合、どう書くのがいいのでしょうか?
今はスレッド関数を抜けるreturn文の直前で、
OnEndThread()みたいな通知関数を呼んで、
その中でCloseHandle()を呼び出す方法にしています。
このOnEndThread()で、CloseHandle()を呼び出す前に、
スレッドが確実に終了してからCloseHandleしたほうがいいのでしょうか?
思いつくのは、Sleep()で適当に待つか、
WaitForSingleObject()にタイムアウトを設定して無限ループで
リトライをかける、ぐらいなのですが、こんなんでいいのでしょうか。
それとも気にしないでCloseHandleしていいのでしょうか?
0741デフォルトの名無しさん
05/02/07 22:01:380742デフォルトの名無しさん
05/02/07 22:11:22スレッドハンドルは使わないならスレッド作成直後に即CloseHandleしてもOK
0743デフォルトの名無しさん
05/02/07 22:17:13単純、明快な回答ありがとうございます。
>スレッドハンドルは使わないならスレッド作成直後に即CloseHandleしてもOK
試してみて大丈夫だったんで不思議に思ってたんですが、
このことってMSDNとかに書いてあるでしょうか?
0744デフォルトの名無しさん
05/02/07 22:41:05まじで?
0745デフォルトの名無しさん
05/02/07 22:48:520746デフォルトの名無しさん
05/02/07 22:52:080747デフォルトの名無しさん
05/02/07 22:53:240748デフォルトの名無しさん
05/02/07 23:06:490749デフォルトの名無しさん
05/02/07 23:07:33ハンドルが閉じられてても動作保証あるのかって問いには
誰も答えられないのか
0750742
05/02/07 23:09:35CloseHandle 関数を使って、プロセスのハンドルとメインスレッドのハンドルの両方を閉じなければなりません。
これらのハンドルが必要ない場合、プロセスを作成した直後にそれらのハンドルを閉じるのが最善です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
とある。
0751デフォルトの名無しさん
05/02/07 23:14:19おもっくそMSDNにも書いてあったし。
こういうお約束的なAPIって案外調べたりしないもんだから見落としてることもあるんだろうな。
0752デフォルトの名無しさん
05/02/07 23:36:25えー、閉じなきゃいけないんですか?
てゆーか、CloseHandleって関数の存在を始めてしりました。
0753デフォルトの名無しさん
05/02/08 00:32:390754デフォルトの名無しさん
05/02/08 00:36:01CreateFile に特有の機能が必要ないときは迷わず
0755デフォルトの名無しさん
05/02/08 00:52:42lpNumberOfBytesReadを特殊な条件化じゃないとNULL指定できないのが面倒なんだよなぁ
0756デフォルトの名無しさん
05/02/08 01:04:27APP(A)からDLL(B)を呼び出しているのですが、DLL(B)からさらにDLL(C)をLoadLibrayでロードしています。
DLL(C)からDLL(B)の関数をGetProcAddress()で読んでいるのですが、DLL(C)はハードコーディングで
GetProcAddress(GetModuleHandle(NULL), "Foo")
みたいになっちゃっていてどうもAPP(A)の空間しか見れて無いらしくDLL(B)の関数がGetProcAddressできてません。
明示的にAPP(A)の関数の名前空間にDLL(B)に関数も含めるにはどうすればいいのでしょうか?
0757デフォルトの名無しさん
05/02/08 01:09:160758デフォルトの名無しさん
05/02/08 01:22:45スレッドが終了するときに、 シグナル状態になるので、それを
WaitForSingleObject()あるいは
WaitForMultipleObjects()で検知して
で、スレッド終了後の処理を始めればいいんじゃないの
0759デフォルトの名無しさん
05/02/08 02:01:58漏れはいつもそうしてる
スレッド作成直後にCloseHandle()する勇気がなかったんで…
0760デフォルトの名無しさん
05/02/08 03:50:12子への通知はPostThreadMessage()でいいし、逆方向も子に適当なハンドルを渡しておいてそれにMessageを投げさせれば済むしね。
0761デフォルトの名無しさん
05/02/08 04:40:43Read/WriteProcessMemoryかな。
0762デフォルトの名無しさん
05/02/08 07:22:420763デフォルトの名無しさん
05/02/08 07:36:40その心は?
0764デフォルトの名無しさん
05/02/08 10:15:07A・) ガクブルガクブル
0765デフォルトの名無しさん
05/02/08 10:29:58CreateProcess()はエンドユーザ向きじゃないので、
あまりランチャーでは使わんでしょ。
カスタマイズ可能なランチャーならShellExecute()にすると思われ。
0766デフォルトの名無しさん
05/02/08 14:14:47APP(A)に"Foo"関数をエクスポートさせて(保障されてるかは知らない)
APP(A)の"Foo"からDLL(B)の関数を呼んでみてはどうだろか。
0767デフォルトの名無しさん
05/02/08 14:24:07日本語が良く分からない
文を短くしろ
主語述語の関係をはっきりさせろ
0768デフォルトの名無しさん
05/02/08 15:12:06>>766 と似たようなもんだけど、APP(A) で forwarder RVA で
DLL(B) の関数をエクスポートする。APP(A) の .def ファイルで、
EXPORTS
Foo = B.Foo
って書くのねん。(ファイル名が B.DLL の場合)
0769デフォルトの名無しさん
05/02/08 15:38:240770デフォルトの名無しさん
05/02/08 16:01:550771デフォルトの名無しさん
05/02/08 16:24:57コールバック関数の第一第二引数が同じものがきていて機能しません。
いくつかサンプルみたんですがどれも同じようにやっていて、原因がわかりません。
知っている方いたら是非ご教示お願いします…
0772デフォルトの名無しさん
05/02/08 16:27:50んなこたーない。
ソース晒してみ。
0773デフォルトの名無しさん
05/02/08 16:43:21コールバックにくるlParam1, lParam2は各リストアイテム(LVITEM)のlParamだよ。
LVITEM挿入時とかにlParam同じの入れてればコールバックにも同じのしかこないよ。
一番簡単な流れで言うと
1:アイテム挿入時にLPARAMに重複しない連番を入れておく
2:コールバック関数内でFINDITEMとかでlParamの番号を元に目的のデータを持ってくる。
3:2で持って来た実データを比較し、比較結果を返す。
同じのしかこないなら
LVITEM挿入時にlParamに値入れてないのでは?(memosetやZeroMemoryでの0が入ってる)
077469式フリーPG ◆hND3Lufios
05/02/08 17:11:50終了をプライマリスレッドが待機できるようにとっておくけどなぁ。<スレッドハンドル
0775デフォルトの名無しさん
05/02/08 17:24:40閉じられるとは言ってもスレッドハンドルいらないケースってまずないような気がするね
0776デフォルトの名無しさん
05/02/08 17:32:58と記述すると、
'Load_Bmp': 識別子は、引数依存の照合を使用しても見つかりません。
とエラーが出るのですが、Load_Bmpの使い方間違ってますか?
0777デフォルトの名無しさん
05/02/08 17:40:05LoadBitmapなら、Winuser.hで宣言されてるはずだけど
Load_Bmpという関数は知らないな
自作関数なら、宣言を見直せ
0778デフォルトの名無しさん
05/02/08 17:41:340779771
05/02/08 18:18:10レスありがとうございます。
lParamが未設定で、設定してもいかないので悩んでいたら
アイテム挿入時にLVIF_PARAMフラグを指定していなかっただけでした。
今までBCBでやっていたのでこういう部分はほとんど触れなかったんですが
なかなかおもしろいです。
ありがとうございました。
0780デフォルトの名無しさん
05/02/08 18:24:17>760ってことでしょ。
0781デフォルトの名無しさん
05/02/08 18:30:570782デフォルトの名無しさん
05/02/08 19:39:23子に終了メッセージを投げて、子から終了したよメッセージが来るまで
待機するのかな。で、その返答メッセージを親が受け取った時って、
子のスレッドは*完全*に終了しているのかな?
0783デフォルトの名無しさん
05/02/08 19:44:29「終了したよ」メッセージではなく
「お手討ちにどうぞ」メッセージならどうかな?
0784デフォルトの名無しさん
05/02/08 19:53:15CreateProcessとかCreateThreadとかはいざ知らず。
英語にも日本語にも先に開放して良いと書いてないよ・・・
0785デフォルトの名無しさん
05/02/08 20:00:030786デフォルトの名無しさん
05/02/08 20:19:330787デフォルトの名無しさん
05/02/08 20:27:27おおーソースあったのねん、知らなかった。thx
おおー、読んだ読んだ、なるほど。ありがと。
あと、NTカーネルのソースありませんか、なんちって
0788デフォルトの名無しさん
05/02/08 20:42:23(EditTextだとES_LEFTの0x0000L〜ES_NUMBERの0x2000L辺りみたいだけど)
何か、WS_POPUPが0x80000000とかWS_TABSTOPが0x00010000とかみたいだし、
下4桁は自由に使っても競合しない?(他のクラスを継承した場合とか以外)
0789デフォルトの名無しさん
05/02/08 20:51:25CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 30, 30, 80, 24, hWnd, (HMENU)ID_EDIT1, hInst, NULL);
CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 140, 30, 80, 24, hWnd, (HMENU)ID_EDIT2, hInst, NULL);
CreateWindow("BUTTON", "ボタン", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP, 300, 30, 80, 24, hWnd, (HMENU)ID_BTN, hInst, NULL);
としてみたんですが、ポーンって音が鳴るだけでした。
MSDN見てみたらWS_EX_CONTROLPARENTの説明が
「ユーザーが[Tab]キーを使って子ウィンドウ間を移動できるようにします。」
だったのでこれかと思ってCreateWindowExに変えてこのスタイルを適用してみたんですけど、
やっぱりできませんでした。何か間違っていますか??
0790デフォルトの名無しさん
05/02/08 21:15:360791デフォルトの名無しさん
05/02/08 21:45:120792デフォルトの名無しさん
05/02/08 21:54:30このまえ流出したって騒ぎがあったな、そういや。
0793デフォルトの名無しさん
05/02/08 22:07:24>>766
>>768
おおアリガ�d 早速やってみる。
>>767
ごめんなさい。自然言語は苦手なんです。
0794デフォルトの名無しさん
05/02/08 22:39:010795デフォルトの名無しさん
05/02/08 22:42:00*threadex.c - Extended versions of Begin (Create) and End (Exit) a Thread
*
* Copyright (c) Microsoft Corporation. All rights reserved.
略
0796デフォルトの名無しさん
05/02/08 22:55:040797デフォルトの名無しさん
05/02/08 23:02:450798デフォルトの名無しさん
05/02/08 23:08:460799デフォルトの名無しさん
05/02/08 23:13:590800デフォルトの名無しさん
05/02/08 23:28:20これを回避するにはどうすればよろしいでしょうか?
サンプルなどありましたら宜しくお願いします。
0801デフォルトの名無しさん
05/02/08 23:36:06そのデータを再生したいのですが、
<具体例>
暗号化した音楽ファイル(DAT) ー> 復号 ー> MP3として書き出す −> MICIで再生
ではなく
暗号化した音楽ファイル(DAT) ー> 復号 ー> データを再生
APIのみで何かいい方法はありませんか?
0802デフォルトの名無しさん
05/02/08 23:41:07メディアフォーマットSDKあるからそれダウンロード汁(無料)
0803デフォルトの名無しさん
05/02/08 23:42:17復号したデータをトリプルバッファでwaveOutWrite
0804801
05/02/09 00:28:10どうも!
MSDNで”Windows Media Format 7.1 SDK”なるものを発見できました。
>>803
どうも!
”トリプルバッファ”で検索したら使えそうなサンプルが見つかりました。
早速試してみることにします。
0805デフォルトの名無しさん
05/02/09 00:34:24トリプルバッファでストリーミング再生するとマルチスレッド組むようになるだろうから、
少し上のマルチスレッドのレスも参考にするとよいぞ
関係ないが、俺は昔、再生スレッドとwaveOutOpen()の同期を取り忘れてて気づくのに骨が折れたことがある
0806デフォルトの名無しさん
05/02/09 01:36:42CreateFile系API関数にはバイナリやテキストモードの設定できる項目がないようですが、
これはバイナリ形式しか取り扱えないということなのでしょうか?
0807デフォルトの名無しさん
05/02/09 01:52:19もう少しひねりが欲しい
0808デフォルトの名無しさん
05/02/09 02:07:59CreateFile系API関数にはアペンドモードの設定できる項目がないようですが、
これは上書き形式しか取り扱えないということなのでしょうか?
0809デフォルトの名無しさん
05/02/09 04:51:24そうで御座います。
面倒だったら素直に fopen() でも使っとけ。
>>808
DWORD dwDummy;
HANDLE hFile = CreateFile("TestFile.txt", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
SetFilePointer(hFile, 0, 0, FILE_END);
WriteFile(hFile, "Test\r\n", 6, &dwDummy, NULL);
面倒だったら素直に fopen() でも使っとけ。
0810デフォルトの名無しさん
05/02/09 07:11:08はいはい
0812デフォルトの名無しさん
05/02/09 14:21:11_tfopenもよろしく
これもAPIじゃないけど。
0813デフォルトの名無しさん
05/02/09 15:38:52081469式フリーPG ◆hND3Lufios
05/02/09 15:53:350815デフォルトの名無しさん
05/02/09 15:53:38先にindex調べて次に中身
0816813
05/02/09 17:21:390817デフォルトの名無しさん
05/02/09 17:32:500818デフォルトの名無しさん
05/02/09 17:36:240819デフォルトの名無しさん
05/02/09 17:37:590820デフォルトの名無しさん
05/02/09 17:50:220821デフォルトの名無しさん
05/02/09 17:52:18そんなら、あなたのパソコンはUTCに完全に同期してるとでも?
0822デフォルトの名無しさん
05/02/09 18:15:200823813
05/02/09 18:15:39Const LVM_FIRST As Long = &H1000
Const LVS_EX_FULLROWSELECT As Long = &H20
Const LVM_SETEXTENDEDLISTVIEWSTYLE As Long = (LVM_FIRST + 54)
'コード
SendMessage List1.hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, ByVal LVS_EX_FULLROWSELECT
指定行を選択させるには↑でいいでしょうか?
0824デフォルトの名無しさん
05/02/09 18:25:40VB?
なつかしいな…
0825デフォルトの名無しさん
05/02/09 18:45:44精度と UTC に何の関係が?
0826デフォルトの名無しさん
05/02/09 18:48:16ほう、あんたが、精度というのを持ち出したんだろうが。
別時間で生きてる方にはわからんかもね
0827デフォルトの名無しさん
05/02/09 19:12:46> ほう、あんたが、精度というのを持ち出したんだろうが。
別時間で生きてる方にはわからんかもね 820≠825 ですが何か?
> 別時間で生きてる方にはわからんかもね
説明できないので逃げるのですか?
0828デフォルトの名無しさん
05/02/09 19:13:260829デフォルトの名無しさん
05/02/09 19:15:360830デフォルトの名無しさん
05/02/09 19:21:01バカだね、WindowsはりあるタイムOSでは無いのに
0831デフォルトの名無しさん
05/02/09 19:43:11まあGetSystemTimeでミリ秒時間を計測する奴もどうかと思うが。
Windowsでもミリ秒ぐらいなら十分正確に測れる。
0832デフォルトの名無しさん
05/02/09 19:43:340833デフォルトの名無しさん
05/02/09 20:40:530834デフォルトの名無しさん
05/02/09 20:51:06APIじゃないってどういう意味なんですか?
0835デフォルトの名無しさん
05/02/09 20:54:220836デフォルトの名無しさん
05/02/09 20:55:560837デフォルトの名無しさん
05/02/09 21:09:55がどうしたの?
0838デフォルトの名無しさん
05/02/09 21:46:570839デフォルトの名無しさん
05/02/09 21:50:110840デフォルトの名無しさん
05/02/09 22:00:02http://support.microsoft.com/kb/q140584/
0841デフォルトの名無しさん
05/02/09 22:05:03CRTは、モニタではなく、ブラウン管のこと。
だから、液晶CRTとかはありえない
0842デフォルトの名無しさん
05/02/09 22:07:10精度がほしい場合
QueryPerformanceCounter
QueryPerformanceFrequency
が良いとか聞いたような。
でもハード依存っぽい事説明に書いてあるし使ったことないしで詳しくは知らない(´・ω・`)
0843デフォルトの名無しさん
05/02/09 22:11:26液晶CRTはヨドバシカメラにたくさん売られていますよ。
0844デフォルトの名無しさん
05/02/09 22:26:150845デフォルトの名無しさん
05/02/09 22:27:29動的にCPUのクロックが変わったときに、Frequencyの方は
古いまま、という問題があったようなきがする。
0846デフォルトの名無しさん
05/02/10 01:36:51ハードの性能がちょっと変わっただけで使い物にならなくなるソフト……
0847デフォルトの名無しさん
05/02/10 02:08:18CPUの独占使用を放棄して他のスッドレに処理を行う機会を与えるらしいが。
0848デフォルトの名無しさん
05/02/10 02:19:38が、他にアクティブなスレッドが存在しなければ即座にまた戻ってきて、
結果的にスレッド切り替えのコストだけを浪費することになる。
0849デフォルトの名無しさん
05/02/10 02:36:26アクティブなスレッドがないんなら、別にCPU時間を浪費してもいいじゃん。
空ループの離脱条件成立が遅れるなどの副作用はあるだろうけどさ。
0850デフォルトの名無しさん
05/02/10 03:03:370851デフォルトの名無しさん
05/02/10 04:07:140852デフォルトの名無しさん
05/02/10 04:11:470853デフォルトの名無しさん
05/02/10 07:02:420854デフォルトの名無しさん
05/02/10 08:16:570855デフォルトの名無しさん
05/02/10 11:56:380856デフォルトの名無しさん
05/02/10 12:12:100857デフォルトの名無しさん
05/02/10 12:16:120858デフォルトの名無しさん
05/02/10 12:22:55ありが�d
0859デフォルトの名無しさん
05/02/10 17:24:05CPU使用率が100%のままだとファンがうるさくなったりするらしい。
俺のボロPCには関係ないけど。
0860デフォルトの名無しさん
05/02/10 17:52:49アクティブなスレッドが存在しないときはスレッドを切り替える必要が無いのだから、
切り替える先があるかどうか調べればいいだけなんだからそんなにコストは高くないだろ。
0861デフォルトの名無しさん
05/02/10 17:57:11俺はマルチスレッド使うときはSleep()使わんようにしてる。
0862デフォルトの名無しさん
05/02/10 18:09:070863デフォルトの名無しさん
05/02/10 18:11:470864デフォルトの名無しさん
05/02/10 18:17:04使いかたが変なやつがバカだけなのに
0865デフォルトの名無しさん
05/02/10 18:20:050866デフォルトの名無しさん
05/02/10 22:10:130867デフォルトの名無しさん
05/02/10 22:58:21というか、他人のソース見てたら、
「ここでSleep(1)しておくとうまく動く」
とかいうコメントが書いてあって呆れた。
0868デフォルトの名無しさん
05/02/10 23:05:280869デフォルトの名無しさん
05/02/10 23:16:51その理由も説明できなオバカさん発見
0870デフォルトの名無しさん
05/02/10 23:17:34そんなことは今関係ない。
0871デフォルトの名無しさん
05/02/10 23:17:51まぁ、納得いかなかったので、調べまくって修正したが。
0872デフォルトの名無しさん
05/02/11 00:12:47説明不要のヴァカを
両方まとめて晒しage
0873デフォルトの名無しさん
05/02/11 00:41:26後者
0874デフォルトの名無しさん
05/02/11 01:51:47自分より低い優先度のスレッドに実行機会が与えられるから。
0875デフォルトの名無しさん
05/02/11 04:03:170876デフォルトの名無しさん
05/02/11 04:11:03画面の大きさをしらべて、ウィンドウのサイズを最大にする
0877デフォルトの名無しさん
05/02/11 09:46:49ShowWindow(hWnd, SW_SHOWMAXIMIZED);
でも戻し方がわからない・・・誰か教えてくれたらありがたいです
0878デフォルトの名無しさん
05/02/11 10:33:25システムカラーを得るには、GetSysColorですが、
システムで使われてるフォント名を得たい場合はどうすればいいのでしょうか?
0879デフォルトの名無しさん
05/02/11 10:45:450880デフォルトの名無しさん
05/02/11 11:02:34GetTextExtentを使って、デバイスコンテキストでの文字列の長さを得たんですが、
なんか微妙に異なるんですよね。
GetTextExtentを呼び出す前にデバイスコンテキストに設定するのは、フォントだけで問題ないですよね?
何か他にあります?
0881デフォルトの名無しさん
05/02/11 11:09:25ゲームでフルスクリーンならChangeDisplaySettings()
0882デフォルトの名無しさん
05/02/11 11:17:35SystemParametersInfoでフォント名は得られない。
確か、別な方法があったはず。
0883デフォルトの名無しさん
05/02/11 11:39:010884デフォルトの名無しさん
05/02/11 12:02:40GetTextExtentなんてAPIはWin32にはないよ
0885880
05/02/11 12:04:43スマソ
0886デフォルトの名無しさん
05/02/11 12:40:18LocalLockがよくわからないのですが
私の予想では
LocalLockとは別のメモリ空間にあるデータの先頭アドレスを
自分のメモリ空間のポインタとして扱えるようにするでOKですか?
0887デフォルトの名無しさん
05/02/11 12:46:48そのメモリのポインタを取得する。
0888デフォルトの名無しさん
05/02/11 13:12:16回答ありがとうございます
調べてみたのですが固定メモリと移動可能メモリがあるんですね、
まだまだ勉強がたりないようです orz
0889デフォルトの名無しさん
05/02/11 13:29:01CSVファイルを開いて
そこから色々とやっていきたいのですが
例えば
CSVに
東店,12000,300000
西店,5000,9000
という物が保存されていたき
コレを参照したいときはやはりバイト数などで出すしかないのでしょうか?
それとも何かいい関数などあるのでしょうか?
0890デフォルトの名無しさん
05/02/11 13:33:180891デフォルトの名無しさん
05/02/11 13:33:510892デフォルトの名無しさん
05/02/11 13:36:46普通はIDirectDraw::SetDisplayModeじゃないか?
0893デフォルトの名無しさん
05/02/11 13:40:02サンクス ちょっといってきます
0894デフォルトの名無しさん
05/02/11 13:40:36>東店,12000,300000
>西店,5000,9000
上記みたいに単純な形式ならばstrtok()が使えるけど、
実はCSVには少し複雑なルールがあったりするので、
結局は自力で解析処理を書くことになる。
0895デフォルトの名無しさん
05/02/11 13:44:080896デフォルトの名無しさん
05/02/11 13:52:07もうちょっと詳しく書いてみますと
CSVまたはDATファイルの中が
日付,店舗ID,売り上げ,目標の順番になっていて
20040101,01,12000,30000
20040102,01,20000,21000
毎回決まった形となっているのですが
バイト数で考えると難しそうなので
例えば配列を用意しておいてa[3]
最初の , が来るまではa[0]に代入
次の , が来るまではa[1]に代入・・・・・・a[3]に代入
としていこうかと考えているのですが
ファイルを開いてからどのような関数で , などを認識し
やっていけばいいのか見当もつかない状態になっています
もっといい方法もあると思うのですが私が考えれるのはこのくらいでして
strtok()で同じようなことが出来るでしょうか?
0897デフォルトの名無しさん
05/02/11 13:53:270898デフォルトの名無しさん
05/02/11 13:57:400899デフォルトの名無しさん
05/02/11 14:19:49Cの標準関数で普通にできるだろ。
標準関数群はOSごとのAPIの差異を吸収してどのOSでも共通のインタフェースで使えるようにしてるんだから。
0900デフォルトの名無しさん
05/02/11 14:24:5401,"店舗1"
02,"店舗2, (改装中)"
03,"店舗3"
0901デフォルトの名無しさん
05/02/11 14:26:390902デフォルトの名無しさん
05/02/11 14:38:170903デフォルトの名無しさん
05/02/11 14:41:580904デフォルトの名無しさん
05/02/11 15:12:500905デフォルトの名無しさん
05/02/11 16:29:02まあ、CSVだけのためにそんなことする人もあまりいないだろうが・・・
DBのデータをCSV出力したい場合とかは便利なのかな?
>>904
サイズ変更系ボタンつかないスタイルで作って最初から最大化で表示させればよいだけでは?
0906904
05/02/11 16:58:52そうなんですが、それの記述方法が分からなくて・・・・。
あと、普通に画像を表示させると、ちらつくので、ちらつかなくするには、CreateCompatibleDCとCreateCompatibleBitmapを使うことは分かったのですが、
どのように書けばいいのですか?
サンプルソースなどがあるサイトしりませんか?
0907デフォルトの名無しさん
05/02/11 17:03:21PaintイベントでBitBlt
0908デフォルトの名無しさん
05/02/11 17:17:47サイズ不変は、表示する時に^ WS_MAXIMIZEBOX ^ WS_THICKFRAME。
最大化は分からない。
0909908
05/02/11 17:19:270910デフォルトの名無しさん
05/02/11 17:27:25WM_PAINTはGetClipBoxして↑のをBitBlt。
0911デフォルトの名無しさん
05/02/11 19:17:110912デフォルトの名無しさん
05/02/11 19:17:540913デフォルトの名無しさん
05/02/11 19:18:090914デフォルトの名無しさん
05/02/11 19:20:260915デフォルトの名無しさん
05/02/11 19:42:580916デフォルトの名無しさん
05/02/11 19:47:040917デフォルトの名無しさん
05/02/11 19:59:190918450
05/02/11 20:01:13>>462 さんの示したようなパターンでマルチスレッドにしてみました。
通信スレッド -> UI スレッド: PostThreadMessage
UI スレッド -> 通信スレッド: PostMessage
ワーカースレッド -> 通信スレッド: PostThreadmessage
通信スレッド -> ワーカースレッド: SetEvent (通信終了の指示用)
この時ワーカースレッドは基本的に通信スレッドにメッセージを飛ばして
送信をさせるのみ。通信が切断したことを示す SetEvent のみを監視。
という構成でやっているのですが、ワーカースレッドの速度が激減してしまいました。
数10byte〜数100byte 程度の小さなデータを大量に送っている為なのでしょうか?
それとも使用している同期・メッセージ手段がマズいのでしょうか?
ワーカースレッドのループの中で Sleep(1) を入れると極端に遅くなる。
ワーカースレッドのループの中で Sleep(0) を入れると Sleep(0) よりは速いがやはり遅い。
しかも、データがちゃんと飛ばずに漏れているっぽい。
0919450
05/02/11 20:03:59>UI スレッド -> 通信スレッド: PostMessage
これは逆でした。
通信スレッド -> UI スレッド: PostMessage
UI スレッド -> 通信スレッド: PostThreadMessage
0920デフォルトの名無しさん
05/02/11 20:10:24メッセージのやり取り必要なのか?
0921デフォルトの名無しさん
05/02/11 20:36:41ってさあ、メインループでpeekmessage()でメッセージが無いときに
framemove()に飛ばすとすると・・・
・・・それで何か足りないものってありますか?
0922デフォルトの名無しさん
05/02/11 20:46:100923デフォルトの名無しさん
05/02/11 20:49:510924デフォルトの名無しさん
05/02/11 20:52:11スレッドの意味無いじゃんw
0925921
05/02/11 20:52:13長時間処理がしたいとの事のようなので
framemoveで何が足りないのかと・・・
framemove1回ごとにforループを1000回ずつ回す事を考えると
それで長時間処理が出来てんじゃないという事を言いたかったのです。
0926デフォルトの名無しさん
05/02/11 20:55:590927450
05/02/11 21:05:35もしそうなら、DirectX を使っていないので私のプログラムには使えなさそうです。
>>924
シリアライズ・・・Java の Serialize とかですか?
でもあれはスレッドの話とは違ったような・・・。
そうじゃなくてスレッドとスレッド同期が多すぎるという事でしょうか?
どんな同期手段でも、同期の数が多すぎるといけないのか、
それとも Message 以外の適切な手段を選べばちょっとくらい多くても問題がないのか・・・。
0928デフォルトの名無しさん
05/02/11 21:08:49ところで、メインスレッドはどこいった?
ついでに、一つのアプリケーション内なら、わざわざメッセージで投げる必要はないと思うが・・・
0929デフォルトの名無しさん
05/02/11 21:22:10すまん、共有リソースがある場合、スレッドセーフじゃないリソースをアクセス
すると時は、時間はかかるがメッセージを使ってメインスレッドで安全に
シリアルに処理させるということ。
0930450
05/02/11 22:56:49メインスレッドが通信先と通信を開始すると _beginthread でスレッドを起動、
接続が完了すれば、メインスレッドに接続した旨をメッセージで伝えています。
その後は、UI 側がデータを送信したい時は PostThreadMessage で通信スレに指示、
通信先からデータが来た場合には、メインスレッドにデータ受信メッセージを送ります。
時々長時間処理が必要になって、その場合は新たにワーカースレッドが作成されて、
そのスレッドが一方的に通信スレッドに PostThreadMessage で送信データを指示しています。
ワーカースレッドは接続が途絶えた事のみを検知しています。
メッセージは遅いんですね。CriticalSection とかを使って処理したほうがいいのか。
でも、処理が楽だし、UI を記述するのと同様に出来るのが楽なんですが・・・。
UI スレッドが何らかのメッセージを受け取るのと同じような処理をする場合は
どうしていますか?WM_TIMER で CriticalSection の中を監視?
0931デフォルトの名無しさん
05/02/11 23:09:25hdc=GetDC(hwnd);
hmainwndsubdc=CreateCompatibleDC(hdc);
hmainwndsubbmp=CreateCompatibleBitmap(hdc,640,480);
ReleaseDC(hwnd,hdc);
SelectObject(hmainwndsubdc,hmainwndsubbmp);
TextOut(hmainwndsubdc,0,0,"ほげほげ",8);
として
WM_PAINTを
hdc=BeginPaint(hwnd,&pt);
BitBlt(hdc,0,0,640,480,hmainwndsubdc,0,0,SRCCOPY);
EndPaint(hwnd,&pt);
にするとウインドウが一面黒くなってしまうんだが、白くするにはどうすればいいのでしょうか?
0932デフォルトの名無しさん
05/02/11 23:11:020933デフォルトの名無しさん
05/02/11 23:15:420934デフォルトの名無しさん
05/02/11 23:21:42人間が使うプログラムならメッセージでもそんなに人間がかんじられるほど
遅くなることはありません。
いまいち処理が分からんので、回答できない。
0935450
05/02/11 23:37:24一部のデータは大量に送られてきます。
現時点では全部のデータが一度メッセージ経由で UI に送られています。
全部をメッセージ以外の軽い手段でやりとりするか、
通信スレッドがデータを確認してその大量のデータだけ軽い手段でやるかで悩んでいます。
前者の場合だと、>>930 の最後の行に書いた通り、UI スレッドが受け取る手段が問題になりますし、
後者は後者で面倒が多いなと思っている所です。
0936デフォルトの名無しさん
05/02/11 23:40:22TextOutの前に塗り潰しておく。
FillRectでもPatBltでもSetPixelでもお好きなように。
0937デフォルトの名無しさん
05/02/11 23:42:410938デフォルトの名無しさん
05/02/11 23:46:16ありが�d�d�d
0939800
05/02/12 11:23:100940デフォルトの名無しさん
05/02/12 13:35:42>>918
>>930
ちょっとそこまでくるとソース全部見ないと相談されてもなんともいえないね。
とりあえずデバッグ出力あたりに処理毎に現在時刻と処理場所とか出力して
どこで遅くなっているか調べるのをおすすめする。
まず原因調べないとね。
一応今までの説明で遅くなりそうな点を書いとくと。(全然関係ないかもしれんが)
1:メッセージをUIスレッドに送信、またはUIスレッドから受信する箇所で遅延?
メッセージは通常のUIのメッセージ(WM_PAINTその他全部)と同じルートを使う為、
メッセージ量が多めであるUIスレッドを経由するとそこで待ち時間がでる可能性がある。
といっても通常は問題にならない。
しかし、UIのつくりそのものがおかしくて重い可能性もあるので一応。(闇雲にInvalidateRectとか)
2:通信スレッド・ワーカースレッドで無茶な処理をしていないか?
Sleep(0),Sleep(1)って言葉が出てきたので気になったんだが、
特に処理がない状態の場合に無限ループ的にまわしてたりしてないかな?
スレッド慣れてない人がたまにやるんだけど、「無限ループ的な待ち」は
スレッド使おうが使うまいが最低最悪の処理なので注意。
0941デフォルトの名無しさん
05/02/12 15:04:240942デフォルトの名無しさん
05/02/12 15:24:510943デフォルトの名無しさん
05/02/12 15:33:330944デフォルトの名無しさん
05/02/12 17:14:15どうすればいいのですか?
0945450
05/02/12 17:20:29でも、UI のチューニングを特にしていないので
メッセージが多いとか、処理が重いとかはあるかもしれません。
2. ワーカースレッドは 100byte 未満の 10000 個のデータを送信しています。
始めにタイムアウト 0 の WaitForSingleObject で切断検知をして問題なければ、
データを PostThreadMessage で送信するというループです。
このループの末尾に、Sleep を入れてみたりしたのですが・・・。
通信スレッドは、タイムアウト 0 の WaitForSingleObject で
WSAEventSelect をチェックしてソケットからの読み出しを行い
データが揃えば UI スレッドにメッセージを送信し、
PeekMessage でメッセージを確認して、来ていたらソケットへ送信を行います。
これをループとして回していました。
とりあえず UI/ワーカーから通信スレへの送信要求をメッセージではなく
CriticalSection を使った物に変えてみました。
PeekMessage のところをクリティカルセクション経由で
バッファにデータが溜っていたら送信という風にしています。
この改変と通信処理の別の部分の見直しで多少改善したようです。
データのやりとりの速度が多少マシになって、>>918 で書いた
データが途中で詰まって、ちゃんと来ない現象はなくなりました。
0946デフォルトの名無しさん
05/02/12 17:26:50wsprintf(buf,"%d点",n);
0947デフォルトの名無しさん
05/02/12 17:29:54もっと具体的に。
それから、本当にこのスレ向けなのか?
http://pc5.2ch.net/test/read.cgi/tech/1104843249/
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
http://pc5.2ch.net/test/read.cgi/tech/1107926989/
http://pc5.2ch.net/test/read.cgi/tech/1031374980/
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
0948デフォルトの名無しさん
05/02/12 17:38:10メッセージでやってるDQNコードは見たことあるな。
0949デフォルトの名無しさん
05/02/12 18:02:24解放しなければなら無いらしいんですが
描画するたびに
GetDC();
//描画
ReleaseDC();
ってやら無ければダメなんでしょうか?
WM_DESTROYを受け取ったときにプロシージャでReleaseDC()とか無理でしょうか?
0950デフォルトの名無しさん
05/02/12 18:12:29http://pc5.2ch.net/test/read.cgi/tech/1108199304/
0951デフォルトの名無しさん
05/02/12 18:29:36やっぱり見ないとなんとも言えんけど所々気になるところが・・・
>2. ワーカースレッドは 100byte 未満の 10000 個のデータを送信しています。
>始めにタイムアウト 0 の WaitForSingleObject で切断検知をして問題なければ、
>データを PostThreadMessage で送信するというループです。
メッセージ連続10000往復以上は確実に遅くなると思われるのでとりあえずメッセージ回数軽減したほうがよさげ。ってこれはもう改善済みかな?
タイムアウト 0 の WaitForSingleObjectでの切断検知ってのはデータが既にある場合の事で
データがない場合はWaitFor...系でウエイトしてるって事でいいのかな?
データない場合もタイムアウト0のWaitForSingleObjectでループしてたら送信していない以上送信速度に影響ないだろうが設計的にかなりいかんよ。
>通信スレッドは、タイムアウト 0 の WaitForSingleObject で
>WSAEventSelect をチェックしてソケットからの読み出しを行い
これがいまいちよく理解出来ないんだけどWSAEventSelect使ってるのにタイムアウト0のWaitFor...?
>PeekMessage のところをクリティカルセクション経由で
>バッファにデータが溜っていたら送信という風にしています。
これもいまいちよくわからん。
もしかして
while(bConnect){
EnterCriticalSection
if(BufSize){
Send();
}
LeaveCriticalSection
}
こんな感じでやってる?
説明見てて感じるんだけどスレッドとかWaitFor..系とかイベントオブジェクト
あまり使った事ないように見えるけどそうかな?だとしたらまずその辺から使い方調べた方がいいかも。
0952デフォルトの名無しさん
05/02/12 18:38:50だめです
0953デフォルトの名無しさん
05/02/12 18:51:14大丈夫です
0955450
05/02/12 18:57:24送信側だけ CriticalSection とバッファを使っています。
>タイムアウト 0 の WaitForSingleObjectでの切断検知ってのはデータが既にある場合の事で
>データがない場合はWaitFor...系でウエイトしてるって事でいいのかな?
データがなくなればスレッドが終了しますので、
データが無い場合でもループが回っているという事はないです。
>説明見てて感じるんだけどスレッドとかWaitFor..系とかイベントオブジェクト
>あまり使った事ないように見えるけどそうかな?だとしたらまずその辺から使い方調べた方がいいかも。
API の仕様はなんとかわかってはいる(と思う)んですが、経験が少なくて・・・。
>こんな感じでやってる?
CriticalSection からの送信要求の読み出しはそうですね。
for(;;){
if(WaitForSingleObject==WAIT_OBJECT_0){
読み込み処理;必要なデータが揃えば UI スレッドにメッセージ送信;
※読み込み時に通信切断もチェック
}
EnterCriticalSection
if(BufSize){
Send();
}
LeaveCriticalSection
}
送信要求もイベントを立てるようにして WaitForMultipleObjects を使って、
かつタイムアウトを 0 以上の値にした方がいいって事でしょうか。
0956デフォルトの名無しさん
05/02/12 19:00:29それが嫌になったらC++にしな
0957951
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..等で待機しておくのが望ましいというか普通という事になる。
※厳密に言えば大嘘だらけになるが、概念をわかりやすく説明する為にあえて大嘘ついております。
0958デフォルトの名無しさん
05/02/12 19:24:49ワケワカラン
0959デフォルトの名無しさん
05/02/12 19:24:53説明をダウンサイジングして用語を標準化してくれる?
0960デフォルトの名無しさん
05/02/12 19:25:07日本語(text=hogeホゲ のような)データは扱えないんでしょうか?
文字化けしてしまうのですが…
0961デフォルトの名無しさん
05/02/12 19:26:45MFCってことでしょうか?
C++を使ったwinプログラムって他にもありますか?
0962デフォルトの名無しさん
05/02/12 19:34:02UTF-16にしてバイナリ扱いにすれば?
Get..Struct
0963951
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...とイベントその他を活用すれば資源を無駄にせずに有益に使用できる。※
0964デフォルトの名無しさん
05/02/12 19:49:17未チェック。
class MyDC{HDC hd_; HWND hw_;
public:MyDC(HWND hw):hw_(hw)
{hd_=GetDC(hw);}
~MyDC(){ReleaceDC(hw_,hd_);}
operator HDC(){return hd_;}
};
0965951
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は一つのスレッドしかアクセスしないように出来るという事になり、安全になる。
0966デフォルトの名無しさん
05/02/12 19:58:42そんなベタな説明するくらいなら自分のホムペに書け。マジで邪魔だ
0967951
05/02/12 20:00:180968951
05/02/12 20:06:49>>955のループの使い方だと結局無限ループ的動作になるって事が言いたかったのorz
クリティカルセクションがデータ保護だけではなくてイベント&WaitFor..待機的目的で使われてるように見えたので・・・
取りあえず教は寝ます。ごめんねorz
0969デフォルトの名無しさん
05/02/12 20:15:43Winsockの立場はどうなる?
0970951
05/02/12 20:17:451:送信回数を減らすことによって処理を早くする為に
100byte以下を10000回送信する部分を可能であれば一つにまとめて送信する。
大き目のバッファに溜め込んでおいて実際には送信せずそのバッファに入れるだけ。
バッファが満杯になったらイベントを立て、実際の送信処理を行わせる。
2:実際の送信部分の
if(BufSize){
Send();
}
を
Waitfor...(バッファ満杯イベント)
Send()
のようにうまいこと改造する。
こんだけでもかなり変わるはず。今度こそ最後です、orz ドゲザ
0971デフォルトの名無しさん
05/02/12 20:20:44WinSockの2.0はイベントでやりとりするっしょ。
メッセージでやり取りするのは、Win16の遺物であるWinSock1.1
0972デフォルトの名無しさん
05/02/12 20:24:28特定のリソースの排他制御に適する。
TryEnterCriticalSectionも見よ。
0973デフォルトの名無しさん
05/02/12 20:27:49>2. ワーカースレッドは 100byte 未満の 10000 個のデータを送信しています。
数が多すぎる問題は当然として、
こんだけ多いなら、ワーカースレッドからそのまま通信したほうがよくないか?
0974デフォルトの名無しさん
05/02/12 20:37:08耳学問?
実用のWinscokプログラムの経験ないのかな。
0975デフォルトの名無しさん
05/02/12 20:38:25メッセージでI/O完了ポートを使えるのか。初耳で砂。
0976デフォルトの名無しさん
05/02/12 20:41:50http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsaeventselect_2.asp
0978デフォルトの名無しさん
05/02/12 20:50:52と言うのはみっともないから我慢しようかと思ったが、我慢が体に悪いので言うことにしました。
厨丸出しだな。
0979デフォルトの名無しさん
05/02/12 20:52:170980デフォルトの名無しさん
05/02/12 20:55:37誰が、どういう立場にたって、知識をどういう方向で使おうとして発言してるのかわからない。
0981デフォルトの名無しさん
05/02/12 20:56:390982デフォルトの名無しさん
05/02/12 20:57:360983デフォルトの名無しさん
05/02/12 21:01:31WaitForで待つなら、Win4までだと64。
APCだと関係ないな。
0984デフォルトの名無しさん
05/02/12 21:26:590985デフォルトの名無しさん
05/02/12 21:34:44(945とは違う人だけど)
これから学ぼうかと思ってた自分にとっては、こういう解説は有難かったり。
とまぁ、埋めついでに
0986450
05/02/12 22:30:05ありがとうございました。
色々と見直してみます。
>>I/O 完了ポート
ところで I/O 完了ポートに関しての初心者向けの説明・資料ってありませんか?
Winsock FAQ とかに名前は出てくるのですが、詳細が不明で・・・。
オーバーラップド I/O とか言うのもあるんでしたっけ・・・。
098769式フリーPG ◆hND3Lufios
05/02/12 22:33:34http://www.amazon.co.jp/exec/obidos/ASIN/4756114040/qid=1108215142/sr=1-4/ref=sr_1_10_4/250-2853882-2300213
この本とか。。。マルチスレッドスレのほうで聞いてみるのも良いかも。
0988デフォルトの名無しさん
05/02/12 23:26:54wsprintf(str, "こんにちは");
TextOut(hdc,0,0,str,strlen(str));
と書いてビルドすると、
TextOut(hdc,0,0,str,strlen(str));
上に対して
warning C4267: '関数' : 'size_t' から 'int' に変換しました。データが失われているかもしれません。
という警告が出ます
なぜなのでしょうか?
0989デフォルトの名無しさん
05/02/12 23:27:02コントロールパネルの「プログラムの変更と削除」で表示されるプログラム一覧に
登録するためのAPI、もしくはそれを管理しているレジストリ等があれば教えてください。
どうぞよろしくお願いします。
0990デフォルトの名無しさん
05/02/12 23:59:36strlenの返り値型はsize_t、TextOutの引数型はint。
size_tからintに変換して、データが失われているかもしれないから。
0991デフォルトの名無しさん
05/02/13 00:01:09strlenの戻り値はsize_tで
size_tはunsigned intの変名。
TextOutの第5引数はintだから、
キャストしなきゃ警告が出る。
0992991
05/02/13 00:02:350993デフォルトの名無しさん
05/02/13 01:22:43返事ありがとうございます。
どういう風に直なおせばいいのですか??
0994デフォルトの名無しさん
05/02/13 01:34:040995デフォルトの名無しさん
05/02/13 01:35:58あ、警告でなくなりました!
どうもありがとうございました。
0996デフォルトの名無しさん
05/02/13 03:45:520997デフォルトの名無しさん
05/02/13 04:06:020998デフォルトの名無しさん
05/02/13 06:23:19PathCanonicalize
0999デフォルトの名無しさん
05/02/13 06:36:591000デフォルトの名無しさん
05/02/13 06:37:30http://pc5.2ch.net/test/read.cgi/tech/1108199304/l50
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。