1 名前:デフォルトの名無しさん mailto:sageteoff [2016/10/08(土) 12:33:02.29 ID:0jaJMPXG.net] Win32APIについての質問はこちらへどうぞ。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。 英語版( msdn.microsoft.com/en-us/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで ■過去スレ Win32API質問箱 Build122 echo.2ch.net/test/read.cgi/tech/1451988219/
207 名前:デフォルトの名無しさん [2016/11/30(水) 03:54:14.51 ID:tfyAgmME.net] おいおい 話逸れすぎていて草
208 名前:185 [2016/11/30(水) 16:27:00.78 ID:NmhabroG.net] >>200 の2回実行するケースについて 1回目と2回目に分けて測定しました。 すなわち、 timeGetTime(); GetThreadTimes(); 時間測定対象コード A timeGetTime(); GetThreadTimes(); 時間測定対象コード B timeGetTime(); GetThreadTimes(); とし、500回の平均で計測しました。 AとBは全く同じコードです。 下記結果となりました。 A timeGetTime()による時間:8msec カーネルモード時間:343usec ユーザモード時間:14664usec B timeGetTime()による時間:7msec カーネルモード時間:93usec ユーザモード時間:904usec スレッドCPU時間において、 AがBより圧倒的に長くなりました。 なぜこのようなことが起こるのか分かりません。 どのような可能性があるでしょうか。 なお、>>200 で触れましたが、 timeGetTime()は比較的正確です。
209 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 18:01:03.98 ID:3E8a/W4X.net] まあ当然の結果だな
210 名前:185 [2016/11/30(水) 18:01:22.28 ID:NmhabroG.net] ああ、もう時間がない。 今日までにCPU時間測定結果を報告しないといけないので。 GetThreadTimes()は信用できないという前提のもと、 timeGetTime()の結果も参考に、 推測されるおおよそのCPU時間ってことで報告するしかなさそうです。 皆さんありがとうございました。
211 名前:185 [2016/11/30(水) 18:02:13.44 ID:NmhabroG.net] >>207 おっと! なぜ当然の結果なのですか。 教えて下さい。
212 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 18:03:45.74 ID:3E8a/W4X.net] ゲームスレで聞いてみ
213 名前:185 [2016/11/30(水) 18:15:54.33 ID:NmhabroG.net] >>210 そうですか。教えてくれないなら結構です。
214 名前:185 [2016/11/30(水) 19:24:20.97 ID:NmhabroG.net] >>200 に示したように、1回だけ実行すると、 実時間7msec、スレッドCPU時間14msecという不整合が起きます。 ところが10回実行して計ると、 実時間78msec、スレッドCPU時間80msecとなります。 これでも不整合はあるものの、 実時間≒スレッドCPU時間であることから、 1回の場合でも実時間≒スレッドCPU時間であることが想定される。 また実時間の方がより信頼できることが分かっている。 したがって、1回実行時のスレッドCPU時間は7.8msec程度であろう。 このようなスレッドCPU時間の見積もり方で妥当でしょうか。
215 名前:デフォルトの名無しさん [2016/11/30(水) 20:49:07.15 ID:5wEUj1of.net] >>212 GetThreadTimesの精度は15.6msなので、ある程度時間のかかる処理でないと 意味が無い。7msの処理をはかると0か15になるかのどちらか。 数百回の平均をとるのではなく1回だけ測定してみると意味ないのがわかる。
216 名前:デフォルトの名無しさん [2016/11/30(水) 20:49:57.04 ID:o1dhiyLy.net] . . ■■人間性に批判殺到 あの悪質パクツイ垢 @copy__writing の管理人は東京都三鷹市の莉里子■■ i.imgur.com/5qAgsHG.png i.imgur.com/kldi84l.png i.imgur.com/8vCymiC.jpg ■今までのプライベート垢 @riricoco0 @bibliophilia333 @muzimuzi333 @nekomatagensou @hanasoraumimori @mirainosekai3 @zibanyan666 @parlorchild @liliririko @EriotN @mike_peko @riricoco0 @ririko_neko @nyanpas ※1 @telegraphyneko ・ ・ @riricatputi (新アカ) imgur.com/a/X1vQA 100垢以上作ってるキチガイ出会い厨 (粘着やめろ詐欺師!はやく捕まれホラ吹きネットストーカー犯罪者!!)
217 名前:185 [2016/11/30(水) 22:05:18.43 ID:b9TNuS14.net] >>212 の方法でスレッドCPU時間を見積もって報告し、帰宅しました。 ID変わります。 >>213 クロック更新粒度に基づく精度のことは認識しています(>>185 、>>187 )。 500回の平均を取ることでその問題を回避し、 その上で>>200 、>>206 の結果になります。 >>206 のデータは、 1回目で実時間を大きく上回るCPU時間が記録されており、 2回目で殆どCPU時間が経過していないことを表しています。 GetThreadTimes()で取得したクロックは、どうしてこのようになってしまうのか。 それが分からないんです。 どういう場合にこうなり得るのか、御存
218 名前:知の方は教えて下さい。 [] [ここ壊れてます]
219 名前:デフォルトの名無しさん [2016/11/30(水) 23:20:53.03 ID:EvMIugyq.net] 1回目はいろいろオーバーヘッドあるよね
220 名前:185 [2016/11/30(水) 23:52:18.25 ID:b9TNuS14.net] >>216 ですと、実時間を超えるCPU時間になり得ると? プロセスCPU時間ではなくスレッドCPU時間で。 同じ処理なのに2回目が1回目の6%のCPU時間で妥当だと? メモリアクセスのキャッシュヒット率に違いがあるとか そういうことであれば分かります。 でも、CPU時間ですよ。 CPU時間で圧倒的に2回目が有利でしょうか? だとしても、 実時間の2倍近いスレッドCPU時間って何なのでしょうか? 不思議だらけで、困惑しております。
221 名前:デフォルトの名無しさん mailto:sage [2016/11/30(水) 23:54:22.80 ID:R/TXkRDp.net] >>217 先ずその測定方法では誤差が偏り問題を回避できなかったという事実を認めろ 500回繰り替えして全体の時間を500で割るなら誤差を縮小出来るが 一回分の時間を積み上げたところで誤差も同じように積み上がったということだろ 一回分の時間を積算して精度の問題を解消するには測定開始時刻が tick周期に対して完全に自由でなければならないのでは? どんな測定方法をしたのか分からないけどプログラムの起動やスレッド生成や スケジューリングのスイッチなどがtickと相関関係にあれば破綻する方法だったんだろ
222 名前:デフォルトの名無しさん [2016/11/30(水) 23:55:15.34 ID:nOqMl3Nb.net] >>215 GetThreadTimesが切り捨てなのか切り上げなのか、平均をとればうまい具合になるのか あなたの環境で要確認。 206-Aは精度的にあり得るが、Bは異様に少なすぎるので、測定ミスを疑われるレベルですね。 コードを見ないとなんとも言えないですが、対象部分を適当な計算をするループに 変えても起こるんでしょうか?
223 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 00:37:40.42 ID:cvCPUZP4.net] みんな憶測で偉そうに話すしかできないんだから、再現コード上げたらいいだけやん
224 名前:デフォルトの名無しさん [2016/12/01(木) 00:49:48.35 ID:O5qZU2qd.net] GetThreadTimes,つまりスレッドを作っているんだろ 1回目と2回目以降で違って当然じゃねぇ?
225 名前:デフォルトの名無しさん [2016/12/01(木) 00:54:41.76 ID:O5qZU2qd.net] クロックカウンタ使えよ
226 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 02:56:36.59 ID:wMlr02vN.net] CPUがいくら速くても切り替えは60Hzくらい
227 名前:デフォルトの名無しさん [2016/12/01(木) 04:56:48.70 ID:O5qZU2qd.net] スタック生成だけ考えても1回目と2回目以降で違ってくると思う
228 名前:185 [2016/12/01(木) 11:21:31.25 ID:SFr2s2fw.net] >>218 第一段落はやり方が悪いというご批判だと思いますが、 ティックが粗いことによる誤差は平均で軽減しました。 その上で誤差が起こっています。 ティックが粗いこと以外の理由で誤差が起こっています。 その理由を知りたく、知恵を拝借したいのです。 間違っていないと思います。 第二段落第一文は、おっしゃる通りです。 第二段落第二文は、思いつきのご発言でしょうか、 それとも知識や経験に基づく助言でしょうか。 後者であれば、もうちょっと詳しくお願いします。 >>206 のようなコードで起こりうるでしょうか。
229 名前:185 [2016/12/01(木) 11:39:04.09 ID:SFr2s2fw.net] >>220 職業プログラマなので実際のコードを公開することはできませんが、大よそ以下のようなものです。 ========ここから======== tRealA=0; tRealB=0; tUserA=0; tUserB=0; for (int i=0; i<500; ++i){ いろいろ tReal1=timeGetTime(); GetThreadTimes(...,&tUser1); func(...); //A tReal2=timeGetTime(); GetThreadTimes(...,&tUser2); func(...); //B tReal3=timeGetTime(); GetThreadTimes(...,&tUser3); いろいろ tRealA += tReal2-tReal1; tRealB += tReal3-tReal2; tUserA += tUser2-tUser1; tUserB += tUser3-tUser2; } tRealA/=500; tRealB/=500; tUserA/=500; tUserB/=500; ========ここまで======== >>219 func()がvolatile intをひたすらインクリメントするコードの場合は、期待通りの結果>>192 がでます。しかし、func()を目的のコード(他者製ライブラリの関数)にすると、不自然な結果>>206 になります。 >>216 、>>224 AとBで何がそんなに変わるでしょうか。
230 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 11:55:52.25 ID:lOA8D/0g.net] 最適化切ったら
231 名前:デフォルトの名無しさん [2016/12/01(木) 12:02:28.97 ID:5zfWITAP.net] 木屋さん元気かな 事故ったのは知ってるけど どのくらいご回復されたかな
232 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 12:14:25.23 ID:i7gsdi/t.net] >>225 > 第二段落第一文は、おっしゃる通りです。 > 第二段落第二文は、思いつきのご発言でしょうか、 思いつきと言われればその通りだが、確からしい事(あなたの測定結果) から推測された事(第二段落第一文の条件が満たされていない)です >>226 > func()がvolatile intをひたすらインクリメントするコードの場合は、期待通りの結果>>192 がでます。しかし、func()を目的のコード(他者製ライブラリの関数)にすると、不自然な結果>>206 になります。 それはfunc()の一回の時間が桁違いだから誤差に埋もれるか埋もれないかが変わっただけだろ
233 名前:185 [2016/12/01(木) 13:04:50.94 ID:SFr2s2fw.net] >>227 コンパイラの最適化のことですよね。 コンパイラの最適化を無効にして、やってみました。 A timeGetTime()による時間:7msec カーネルモード時間:499usec ユーザモード時間:14882usec B timeGetTime()による時間:7msec カーネルモード時間:31usec ユーザモード時間:124usec 同じ傾向になりました。
234 名前:デフォルトの名無しさん [2016/12/01(木) 13:30:33.53 ID:O5qZU2qd.net] >>226 > >>216 、>>224 > AとBで何がそんなに変わるでしょうか。 スタックは初期化されてアプリに引き渡すだろ スタックの中で使われずに解放されたページは論理アドレスでは解放状態でも OSがリザーブしておけば新たなスレッド生成で使い回しできるじゃないかな 他にもスタック以外でページの最初に書き込み時点でページをコピーするとかあるよね
235 名前:デフォルトの名無しさん [2016/12/01(木) 13:34:44.58 ID:RgG4Eqmg.net] >>226 いろいろ のところでライブラリの初期化とかやってない? 1回目はデータ構築処理があるのでCPUタイムを食うが、2回目は不要なのでCPUタイムを食わないとか。 で、DBとかサーバーへの問い合わせがあるので、7msくらいはかかってしまうなんてことは無いのか。 あるいは、2回目はfuncの中で別スレッドを起動して計算しているので、元スレッドのCPUタイムは食わないとか。 A B だけでなく A B C D と4回くらいやっても同じ傾向か、平均でなくすべてのタイムを見て 極端にばらつく値がないか調べるとかも必要では?
236 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 22:49:24.47 ID:/t7qmsTu.net] >>226 後だし感すごいな。 他者製ライブラリとやらの中身も分からず議論になるかってーの。
237 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 08:27:00.87 ID:GvPbDV6s.net] どこがWin32APIの話なんだよ、ってことになるよなあ。 長々と議論に付き合ってた方々、お疲れ様。
238 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 09:07:26.76 ID:0vMtCyDD.net] 粒度の平均化してるとか言って全く出来てないし 精度の悪い数字を正しいと断定してるし しかも間違ってる 何度も指摘してるのに正そうとしない 全部ダメでしょ。
239 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 09:21:55.13 ID:+ocxhyeH.net] >>211 みたいな事言ってるからお察し
240 名前:185 [2016/12/02(金) 10:43:58.72 ID:H1x5ETqP.net] 報告書は突っ返されたので、まだまだ続きそうです。 まず、大大大前提を確認したいのですが、 GetThreadTimes()で取得するCPU時間は スレッドがCPUをとっている時間で、 一つのスレッドが同時に複数のコアを占有することはないので、 (精度云々ではなく定義上は)スレッドのCPU時間は実時間以下である(以下のペースで進む)。 これは、大前提としてあってますよね?
241 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 10:47:04.34 ID:rEQGNTwO.net] なんだ学校の課題だったのか
242 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 11:24:10.48 ID:EDk65fqO.net] 質問者より賢い人はいないのか? これでは、質問箱が成り立たないなw
243 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 11:27:08.99 ID:+ocxhyeH.net] >>239 そうだな じゃあ頼んだ
244 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 11:48:56.99 ID:2Jj/uLxs.net] だから再現できるサンプルをサクッと上げろよ。 だれも実物や社外ライブラリまで上げろといってないんだわ。 コーディングやデバッグ能力以外の能力が大きく欠如してるだろ。
245 名前:185 [2016/12/02(金) 11:58:27.27 ID:H1x5ETqP.net] 10回やってみました。 つまり、>>226 のコードでAとBだけでなく、AからJまでやってみました。 A timeGetTime()による時間:7msec カーネルモード時間:1092usec ユーザモード時間:14133usec B timeGetTime()による時間:7msec カーネルモード時間:249usec ユーザモード時間:343usec C timeGetTime()による時間:7msec カーネルモード時間:936usec ユーザモード時間:9141usec D timeGetTime()による時間:7msec カーネルモード時間:1372usec ユーザモード時間:4180usec E timeGetTime()による時間:7msec カーネルモード時間:561usec ユーザモード時間:6583usec F timeGetTime()による時間:7msec カーネルモード時間:717usec ユーザモード時間:7737usec G timeGetTime()による時間:7msec カーネルモード時間:468usec ユーザモード時間:4773usec
246 名前:185 [2016/12/02(金) 11:58:51.26 ID:H1x5ETqP.net] H timeGetTime()による時間:7msec カーネルモード時間:655usec ユーザモード時間:9672usec I timeGetTime()による時間:7msec カーネルモード時間:218usec ユーザモード時間:4149usec J timeGetTime()による時間:7msec カーネルモード時間:405usec ユーザモード時間:10795usec 全体(A〜J) timeGetTime()による時間:74msec カーネルモード時間:6645usec ユーザモード時間:71510usec
247 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 12:10:39.48 ID:fHtgnGrJ.net] 仕事が出来ないから、タダで手取り足取り協力してくれってか
248 名前:185 [2016/12/02(金) 13:02:57.14 ID:H1x5ETqP.net] 本件、私としては以下の結論に至りました。 ○timeGetTime()は信頼できる。 ○GetThreadTime()は信用できない (ティック間切り上げ的な傾向あり。理由不明。)。 ○timeGetTime()を基準に>>212 のような方法をとるほかない。 もう一度GetThreadTime()はどうしても信用ならず、 他に有用な代替手段もないため、 >>212 の方法が限界である旨を報告することにします。 何人かの真剣に助言して下さった方々、 本当にありがとうございました。
249 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 13:27:24.15 ID:bjzW9gj9.net] >>228 ドラスレの木屋さんも、timeGetTimeのこと調べてたな
250 名前:デフォルトの名無しさん [2016/12/02(金) 14:04:58.11 ID:ELslSS33.net] timeGetTimeやめてQueryPerformanceCounterを使ったら?
251 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 14:15:28.80 ID:ocojT6FV.net] 内容のアホさからして オバケじゃないことは確実
252 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 14:17:49.26 ID:6Vgvdyao.net] あらかじめtimeBeginPeriodも呼んでおかないと精度変わる
253 名前:デフォルトの名無しさん [2016/12/02(金) 14:21:54.01 ID:ELslSS33.net] 静的領域に書き込みすると、コピーオンライトが発生し、 動的領域を確保すると、最初とおよび足りない時はOSで確保と初期化があると思う それが1回目が遅い理由な気がする
254 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 14:30:05.73 ID:LG3SGwVv.net] 質問者はアレだが それはそうと、どうでも良いことをいうのはやめたほうが良いだろう 実時間とスレッド時間が食い違うって話だから 1回目が遅いとかそういう話ではない
255 名前:デフォルトの名無しさん [2016/12/02(金) 17:49:56.46 ID:EDk65fqO.net] 結局>>237 すら教えてあげなかったんだな。
256 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 18:15:57.54 ID:2Jj/uLxs.net] 質問者のアプローチや解釈が正しいのかが分からないのに、憶測で質問者回答者とも上から目線で やりあってる状況にまず疑問を抱いた方がいい。 そしてそれら以下の書き込みしかできないID:EDk65fqOはクソ中のクソだと認識した方がいい。
257 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 22:19:54.42 ID:rH7Be8WN.net] 最初からGetThreadTimesは約1/64秒の精度しか無いって分かっていたはずなのにね。 平均とっても意味がないってことが改めて分かったことだけが成果か。
258 名前:デフォルトの名無しさん mailto:sage [2016/12/02(金) 23:51:36.19 ID:DveiiCO5.net] >>247 とか>>249 とか、全然関係ないことじゃん。
259 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 10:51:33.05 ID:YdYTZThj.net] OSがどうやってカーネルモードやユーザーモードの時間を計測しているのか想像できないのかねえ オーバーヘッドが高いやり方は採用できないと分かりそうなもんだが
260 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 11:08:29.93 ID:JHScEEfz.net] 触発されてGetThreadTimes=NtQueryInformationThread調べたんだけど”スレッド”の中身が興味深かった 質問者糞だから詳細は書かないがw
261 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 20:00:37.46 ID:6jC0i+kE.net] 俺もほんとはGetThreadTimesの特性知ってるけど、 質問者が土下座しないと教えてやらねぇw
262 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 20:35:28.76 ID:xp0AwakX.net] GO
263 名前:デフォルトの名無しさん mailto:sage [2016/12/03(土) 20:36:25.77 ID:xp0AwakX.net] the old new thing
264 名前:デフォルトの名無しさん mailto:sage [2016/12/04(日) 11:31:12.68 ID:8oIVw/6i.net] Windows10ってCOMポート番号は最大何番までなんでしょうか?
265 名前:デフォルトの名無しさん mailto:sage [2016/12/04(日) 11:37:47.55 ID:NE4G8kum.net] com1〜com256まで
266 名前:デフォルトの名無しさん mailto:sage [2016/12/04(日) 12:08:20.93 ID:HYzaL+1F.net] 昔、レジストリから認識してるポート名を取得するサンプルあったな。 MSDNだったかな
267 名前:デフォルトの名無しさん mailto:sage [2016/12/04(日) 12:22:02.41 ID:SxgHpTya.net] select欲しい
268 名前:261 mailto:sage [2016/12/04(日) 16:50:15.73 ID:8oIVw/6i.net] >>262 >>263 ありがとうございました!
269 名前:デフォルトの名無しさん [2016/12/09(金) 00:46:48.41 ID:WzSsU1Dc.net] WM_CHARでWPARAMに入ってくるコード一覧どっかない? 普通のキーならそのままだが、Back SpaceとかCtrl+Vとかのコードが知りたい。
270 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/12/09(金) 01:04:26.73 ID:IirsZJ4E.net] >>266 キーが押されてるかどうかの確認は、WM_KEYDOWNを使う。 「仮想キーコード一覧」で検索。 ただし、Ctrl,Shift,Altはmodifiersと呼ばれ、特別扱い。CtrlとShiftは GetKeyState(VK_SHIFT) < 0 GetKeyState(VK_CONTROL) < 0 で確認でき、AltはWM_NCKEYDOWNで確認できる。
271 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/12/09(金) 01:07:15.74 ID:IirsZJ4E.net] 訂正。 × AltはWM_NCKEYDOWNで確認できる。 ○ AltはWM_SYSKEYDOWNで確認できる。
272 名前:デフォルトの名無しさん mailto:sage [2016/12/12(月) 20:09:14.26 ID:UWkfYPy/.net] プログラム実行中のログテキストをエディットコントロールに出力しようと思ったのですが、 32KB制限があり実用できないことが分かりました。 リッチエディットではそのような制限はないようなので、 特に問題なければこれでいこうかと考えているのですが、 他に良い方法があればご教示ください。
273 名前:デフォルトの名無しさん mailto:sage [2016/12/12(月) 20:14:54.27 ID:cpVlzpwx.net] >>269 つ AllocConsole
274 名前:デフォルトの名無しさん mailto:sage [2016/12/12(月) 20:17:01.65 ID:dREO/TsY.net] EM_SETLIMITTEXT
275 名前:269 mailto:sage [2016/12/12(月) 20:41:35.46 ID:UWkfYPy/.net] >>270 ありがとうございます。 今回は検索機能とかも付けたいので、エディット系コントロールを利用することにします。 >>271 ありがとうございます。 これで通常のエディットコントロールで32KB以上を扱えます。 助かりました!
276 名前:デフォルトの名無しさん mailto:sage [2016/12/13(火) 09:08:32.63 ID:GC6m09wL.net] >>272 検索が必要ならリッチエディット
277 名前:269 mailto:sage [2016/12/13(火) 21:50:24.46 ID:EhPW3kvE.net] >>273 リッチエディットで実装を進めていて、あとは検索機能だけ、というところまで作れたんですが、 まさかリッチエディット自体に検索機能があったとは・・・! ここでお聞きしてよかったです。 ありがとうございました!
278 名前:デフォルトの名無しさん [2016/12/19(月) 05:43:50.59 ID:qsdLnaaR.net] paint.netのツールウィンドウみたいなやつってどうやって表示するの? ウィンドウスタイルを色々試してみたけどあれと同じようなウィンドウが出ない。
279 名前:デフォルトの名無しさん mailto:sage [2016/12/19(月) 07:17:38.33 ID:jpBVYjvn.net] 拡張ウィンドウスタイル使え。
280 名前:デフォルトの名無しさん mailto:sage [2016/12/19(月) 23:46:04.62 ID:qsdLnaaR.net] >>276 ありがとう。 拡張スタイル使ってもやっぱり無理だ。 思い通りに動かない。 数年前からずっと謎なんだよなこれ。 動作上問題が少ないから我慢してたんだけども。 それっぽいウインドウは出るものの、paint.netのように全ウインドウがアクティブ状態にならない。 【参考画像】news.softpedia.com/images/extra/WINDOWS3/large/paint.net/paint.net%20interface.jpg paint.netを実際に使ってるとよく分かるんだが、 参考画像のようにメインのウインドウもツール用のウインドウも常にアクティブな状態が維持される。 しかし、拡張スタイルでWS_EX_TOOLWINDOWを指定してもアクティブなウインドウは常に1つ。 メインのウインドウをクリックすればツール用ウインドウは非アクティブになり、 ツール用ウインドウをクリックすればメインウインドウは非アクティブになる。 非常に気持ちが悪い。 確かにWS_EX_TOOLWINDOWを利用すればメインウインドウより常に前面になり、 タスクバーにも表示されず、非常にpaint.netのツールウインドウと似たような挙動になるが、 このアクティブ/非アクティブに関しては挙動が全く違う。 ちなみにアクティブ/非アクティブの判断はタイトルバーの色で判断している。 さらに参考画像のツールウインドウのような右上の正方形の閉じるボタンの表示のさせかたも分からない。 ・・・と思ったら出てきたわ。 www.catch22.net/tuts/docking-toolbars-part-1 やっと出てきた。 WS_EX_TOOLWINDOWで検索してもノイズが多くてなかなか出てこなかった。 (ノイズ = MSDNのウインドウスタイルの一覧をコピペしただけのゴミサイト) ノイズゴミサイトマジで迷惑。 嫌がらせでしかない。
281 名前:デフォルトの名無しさん mailto:sage [2016/12/19(月) 23:50:28.70 ID:qsdLnaaR.net] 結局今回のカギはGoogle画像検索。 ふと「サンプル載せてるサイトの半数くらいはスクショも載せてるのではないか」と思い、 例の拡張スタイルで画像検索。 俺がやりたいのと同じ状況になってる画像を見つけて開いたらビンゴ。 画像検索なんて今まで思いもよらなかったよ。 文字検索するとノイズゴミサイトばかり出てきてどうにもならなかった。
282 名前:デフォルトの名無しさん mailto:sage [2016/12/19(月) 23:52:55.75 ID:qsdLnaaR.net] MSDNのコピペサイト作ってるゴミ共は早く死ねばいいのにな。 役に立たないどころか大迷惑。 最近流行りの質の低いキュレーションサイト()と同レベル。
283 名前:デフォルトの名無しさん mailto:sage [2016/12/20(火) 00:02:24.24 ID:tFkwVopE.net] >>275 の意味がまったくわからなkったわww
284 名前:デフォルトの名無しさん mailto:sage [2016/12/20(火) 06:12:08.47 ID:ADGhogoA.net] google personal blocklistでかたっぱしからブロックしてる xxxユーザー会もノイズ源だね
285 名前:デフォルトの名無しさん mailto:sage [2016/12/20(火) 09:20:12.73 ID:F0IdvAwo.net] 顔写真ブロックは必須 おまえらキモ面なのに何故あんな目立つ場所に配置すんだ
286 名前:デフォルトの名無しさん [2016/12/20(火) 12:55:43.49 ID:lAXr92yw.net] >>278 おめ 興奮は伝わったが もちつけ
287 名前:デフォルトの名無しさん [2016/12/20(火) 13:00:10.44 ID:lAXr92yw.net] >>279 はてぶのことですねわかります
288 名前:デフォルトの名無しさん mailto:sage [2016/12/20(火) 16:58:42.80 ID:WXAyO/1W.net] >>277 そういうときはいっそそのソフト解析したら? Paint.NETなら簡単に逆コンパイルできるし、Spy++とか使うだけでもある程度わかる
289 名前:デフォルトの名無しさん mailto:sage [2016/12/20(火) 17:33:10.55 ID:Sq2CbWR0.net] OSSのソフトを逆コンパイルするの?
290 名前:デフォルトの名無しさん mailto:sage [2016/12/20(火) 17:44:58.45 ID:F0IdvAwo.net] 今はちがうだろ
291 名前:デフォルトの名無しさん mailto:sage [2016/12/20(火) 18:45:47.25 ID:lAXr92yw.net] 新手のアフィか
292 名前:デフォルトの名無しさん mailto:sage [2016/12/20(火) 19:12:59.79 ID:F0IdvAwo.net] アフィだったのかよ。新手すぎてアフィの影すら俺には見えん
293 名前:デフォルトの名無しさん [2016/12/20(火) 22:05:37.09 ID:JPbALvOm.net] MSDNのコピペサイト全般のことだろう>アフィ
294 名前:デフォルトの名無しさん mailto:sage [2016/12/21(水) 01:04:08.51 ID:HCdO29Rc.net] 質問 writefile関数を使用してint型で、データ保存ができません。同じ悩み持ったことある人いらっしゃいませんか。
295 名前:デフォルトの名無しさん mailto:sage [2016/12/21(水) 01:09:18.76 ID:GvkBvmPc.net] int Data = 123456;; DWORD writeLen; WriteFile(hFile,&Data,sizeof(Data),&writeLen,NULL); こういうことだろ?
296 名前:デフォルトの名無しさん mailto:sage [2016/12/21(水) 01:10:40.03 ID:kLgQ2k1v.net] 変数のアドレスをwritefileにわたさないとだめ。数値そのままわたしてるんでしょ
297 名前:デフォルトの名無しさん mailto:sage [2016/12/21(水) 21:06:02.77 ID:HCdO29Rc.net] >>292 >>293 ありがとうございます。引数としてアドレスを渡さないといけないのですね。試してみます!
298 名前:デフォルトの名無しさん mailto:sage [2016/12/22(木) 08:34:56.43 ID:tk15BRot.net] msdn 関数名 でググる癖をつけよう
299 名前:デフォルトの名無しさん [2016/12/22(木) 12:50:31.88 ID:y+mdv7YD.net] -jp もお忘れなく
300 名前:デフォルトの名無しさん mailto:sage [2016/12/22(木) 13:04:48.47 ID:hYDEOt1H.net] どうしてこういう訳そのままずっと放置してんだろうな > 関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。 > If the function fails, the return value is zero. To get extended error information, call GetLastError.
301 名前:デフォルトの名無しさん [2016/12/22(木) 18:24:16.26 ID:zHNnrJEM.net] >>296 なんで付けるの? 誤訳トラップにハマりたいの? 俺は誤訳トラップどころか英語版と日本語版で引数違うトラップにハマったことがあるけども。 日本語版を穴が空くほど見て確認したけど何日経ってもコンパイルが通らず、 何の気なしに英語版開いたら引数の数が違って、 英語版見ながら修正したら一発でコンパイル通ったわ。
302 名前:デフォルトの名無しさん mailto:sage [2016/12/22(木) 18:39:46.34 ID:hYDEOt1H.net] >>298 +jp じゃなくて -jp
303 名前:デフォルトの名無しさん mailto:sage [2016/12/22(木) 18:47:30.93 ID:YVr1LIe6.net] >>298 今時どんな開発環境使ってるんだよ w VisualStudio なら関数名 + '(' を入力した時点でプロトタイプが表示されるだろ
304 名前:デフォルトの名無しさん [2016/12/22(木) 18:55:29.30 ID:zHNnrJEM.net] >>299 ごめんなさいwww >>300 その当時はVector辺りで見つけてきた適当なテキストエディタとBCCだったよ。
305 名前:デフォルトの名無しさん mailto:sage [2016/12/22(木) 19:02:14.56 ID:tk15BRot.net] >>301 C言語を始めよう!
306 名前:デフォルトの名無しさん mailto:sage [2016/12/22(木) 22:46:25.55 ID:+nnZ9oR0.net] レポートタイプのリストビューをクリックしたら、その行のデータに対応する内容を 別の窓に詳細表示するというような動作をしているのですが、クリック時は NM_CLICK を処理してクリックされた行を nmLv->iItem メンバを参照して知ることができます。 オペレーションとしてはマウスだけではなくキーボード操作でリストビューの選択行を 次々と移動させることも多いので、LVN_KEYDOWN も処理して上記と同様の動作を させたいのですが、LVN_KEYDOWN 処理時は nmLv->iItem の中身が不定です。 LVN_KEYDOWN 処理時に ListView_GetNextItem で LVNI_ALL | LVNI_SELECTED を 指定して選択行を調べると、キーボードを押して選択行を変更する前の選択行が 得られてしまいます。 この辺は、一旦メッセージループを回すなどしてから現在の選択行を得ること自体は 可能と言
307 名前:ヲば可能なのですが、ここまでしないとダメなのかという疑問があります。 LVN_KEYDOWN 処理時、もしくはキーボード操作で選択行を変更した際、簡潔に 現在の選択行を得る方法はありますでしょうか? [] [ここ壊れてます]