18/06/22 20:00:29.48 HpQmxb21.net
DirectWriteだとカスタム描画用にIDWriteTextRenderer::DrawUnderlineというコールバックがあるで
437:デフォルトの名無しさん
18/06/22 20:21:26.56 vo7No3CM.net
もしかして GetTextMetrics で取得した TEXTMETRIC の tmAscent, tmDescent
で分かるんじゃないの?
438:415
18/06/23 09:44:08.76 UVw2sBCh.net
>>416-419
原因が分かりました
↓のGetSystemMenuをTRUEで呼ぶ箇所をなくしたら、実行後でもプロパティが表示されました
MSDNに「TRUE を指定すると、この関数は、ウィンドウメニュー
439:をリセットして Windows の既定の状態へ戻します。」と 書いてあったので、cmdなら起動直後の状態に戻るものだとばかり・・・orz HMENU hmenu; /* ボタンの状態を変更する前に、コンソールのカスタマイズを取り消す */ GetSystemMenu(GetConsoleWindow(), TRUE); /* コンソールメニューハンドルのコピーを取得する */ hmenu = GetSystemMenu(GetConsoleWindow(), FALSE); /* 引数に応じて "閉じる"、"最小化"、"最大化" 各ボタンを無効化する */ if (!(button_stat & 0x01)) RemoveMenu(hwnd, SC_CLOSE, MF_BYCOMMAND); /* 以下省略 */
440:さまよえる蟻人間
18/06/24 08:52:07.32 jlx8CiNF.net
来たよ!!!
URLリンク(twitter.com)
URLリンク(twitter.com)
441:デフォルトの名無しさん
18/06/24 09:12:16.31 7l22t7T7.net
また片山の宣伝かよ
442:放置された蟻人間
18/06/24 10:11:04.49 Ki1yi8uD.net
一応、Win32APIで書いたんですけど。
443:デフォルトの名無しさん
18/06/24 10:53:22.32 7l22t7T7.net
そういう考えで今まで何度も宣伝してたのかw
ここはwin32api質問用のスレ。言い換えるとAPIの使い方に関するスレであって、
API使ってるアプリ紹介スレじゃないんだよ
444:デフォルトの名無しさん
18/06/24 10:54:03.26 QdNeiEeM.net
あ? なんだよ「C++11に準拠してarray::operator[]で範囲チェックしろ」とかラリってる糞コテは片山かよ
445:放置された蟻人間
18/06/24 11:09:06.07 Ki1yi8uD.net
>>436
リソースエディタがWin32APIに関係ないって?
>>437
誤解です。関係ない話を勝手に結び付けないで下さい。
446:放置された蟻人間
18/06/24 11:19:47.20 Ki1yi8uD.net
5ちゃんねるは、広告料と浪人の収益によって成り立っています。
447:デフォルトの名無しさん
18/06/24 11:21:10.11 7l22t7T7.net
関係ないよ
質問内容によってはリソース編集が関係してくることはあるが、そんなソフトが関係することはまずない
448:放置された蟻人間
18/06/24 11:23:27.52 Ki1yi8uD.net
コマーシャルの仕組みについて皆さまのご理解をお願い致します。
449:放置された蟻人間
18/06/24 11:24:22.52 Ki1yi8uD.net
>>440
お前の中ではな。
450:放置された蟻人間
18/06/24 11:39:26.10 Ki1yi8uD.net
お前ら、Win32を知り尽くしているんだろ?
だれかReactOSで日本語入力できるようにしてくれよ。
451:41
18/06/24 11:48:47.83 iIAhljkC.net
Win32Apiで何ができるかをを知り尽くしているが
Win32Apiが何をしているのかは何も知らない
452:デフォルトの名無しさん
18/06/25 01:12:02.96 R9m7k+sg.net
if(sa::sendkey[cnt]!=NULL){
if(sa::sendcontrol[cnt]) SendNotifyMessage(sa::hWndSa, WM_KEYDOWN, VK_CONTROL, 0 );
if(sa::sendalt[cnt]) SendNotifyMessage(sa::hWndSa, WM_KEYDOWN, VK_MENU, 0 );
if(sa::sendshift[cnt]) SendNotifyMessage(sa::hWndSa, WM_KEYDOWN, VK_SHIFT, 0 );
SendNotifyMessage(sa::hWndSa, WM_KEYDOWN, sa::sendkey[cnt], 0 );
SendNotifyMessage(sa::hWndSa, WM_KEYUP, sa::sendkey[cnt], 1);
if(sa::sendshift[cnt]) SendNotifyMessage(sa::hWndSa, WM_KEYUP, VK_SHIFT, 1);
if(sa::sendalt[cnt]) SendNotifyMessage(sa::hWndSa, WM_KEYUP, VK_MENU, 1);
if(sa::sendcontrol[cnt]) SendNotifyMessage(sa::hWndSa, WM_KEYUP, VK_CONTROL, 1);
}
sa::sendkeyにデータキーが有る時、sa::sendcontrol、sa::sendalt、sa::sendshiftがtrueならば、
「Ctrl+Alt+Shift+データキー」といったふうに送信したいのですが、
データキーしか送信されません。
何がいけないのでしょうか?
453:デフォルトの名無しさん
18/06/25 07:03:38.33 euNVlzH4.net
keybd_eventもしくはsendinput使う
454:デフォルトの名無しさん
18/06/25 18:46:39.01 oo6U7F08.net
�非アクティブウィンドウのままがいいならこれでどうでしょう
ShiftとEndの同時押しが出来ることを確認しました
void send_shift_and_end()
{
HWND hWnd = FindWindow(L"Notep
455:ad", NULL); if (hWnd == NULL) { return; } HWND hEdit = FindWindowEx(hWnd, NULL, L"Edit", L"" ); if (hEdit == NULL) { return; } BYTE kstats[256], shiftstat; DWORD srctid, dsttid; srctid = GetCurrentThreadId(); dsttid = GetWindowThreadProcessId(hEdit, NULL); AttachThreadInput(srctid, dsttid, TRUE); GetKeyboardState(kstats); // 実行前の状態を保存 shiftstat = kstats[VK_SHIFT]; kstats[VK_SHIFT] |= 0x80; // shift を押下状態に SetKeyboardState(kstats); // 状態を更新 SendMessage(hEdit, WM_KEYDOWN, VK_END, 0); // SendMessage は OK, PostMessageは NG kstats[VK_SHIFT] = shiftstat; SetKeyboardState(kstats); // 実行前の状態に復帰 }
456:デフォルトの名無しさん
18/06/25 20:01:44.94 R9m7k+sg.net
レスありがとうございます。
このようにしてみたのですが、送りたいウィンドウがもともとアクティブな時は送信されるのですが、
アクティブ出ない場合、アクティブに出来ずに居ます。
if(sa::sendkey[cnt]!=NULL){
//ターゲットををアクティブに
HWND hWndTemp = SetActiveWindow(sa::hWndSa);
char t0[256 + MAX_PATH];
sprintf(t0, "sa::hWndSa:%d(%x), hWndTemp:%d(%x)", sa::hWndSa, sa::hWndSa, hWndTemp, hWndTemp);
strscr_set(t0);
//Key Event送信
if(sa::sendcontrol[cnt]) keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
if(sa::sendalt[cnt]) keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
if(sa::sendshift[cnt]) keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event(sa::sendkey[cnt], 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event(sa::sendkey[cnt], 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
if(sa::sendshift[cnt]) keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP | 0, 0);
if(sa::sendalt[cnt]) keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
if(sa::sendcontrol[cnt]) keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
//元のウィンドウをアクティブに
SetActiveWindow(hWndTemp);
}
デバッグ情報を見る限り、ウィンドウハンドルは取得できてます。何がまずいのでしょうか?
457:デフォルトの名無しさん
18/06/25 20:03:32.63 R9m7k+sg.net
ちょっと>>447さんの方法も試してみます。
有り難うございます。
458:放置された蟻人間
18/06/25 20:32:07.52 RnBLs+IR.net
Ctrl+Alt+Delは、セキュリティで保護されているんじゃ中田家?
459:デフォルトの名無しさん
18/06/25 21:13:56.50 R9m7k+sg.net
>>447さんの方法で無事うごきました。
ありがとうございましたm(_ _)m
460:デフォルトの名無しさん
18/06/25 21:31:41.84 f6L/NlJ0.net
SetActiveWindow の代わりに SetForegroundWindow を試してみたら?
461:デフォルトの名無しさん
18/06/25 21:35:50.33 I2eYxQBJ.net
blinkWindowtop
462:デフォルトの名無しさん
18/06/30 18:06:34.48 RTJdtcUh.net
言いたかないがCOMでマジで糞だなと思うのは
アパートメントか何だか知らないが
勝手に内部でメッセージループ回すな!!!
たまにそうなって通常ではあり得ない順番で関数が呼ばれてデッドロックするんだよ糞野郎
そういう糞メソッド見つけるたびにメインスレッドとは別のスレッドで実行するように書き直すんだが
実に馬鹿らしい
どのオブジェクトのどのメソッドでそうなる可能性が有るかMSDNのどこにも書かれてないしな
どうしろと
463:デフォルトの名無しさん
18/06/30 18:25:36.41 SPR6zsx0.net
別スレッドにしたら余計危ないだろw
464:デフォルトの名無しさん
18/06/30 19:40:38.36 RTJdtcUh.net
いやまじでさ
しかも今まで大丈夫だったのに最近のWindows10のアップデートを当てたら
なぜかメッセージループ回すようになったやつとかあるし
いつ何のタイミングでメッセージループが回るか分からねぇ
アパートメントモデルはマジで糞過ぎ
全部マルチスレッド対応でいいだろ意味不明
465:デフォルトの名無しさん
18/06/30 19:45:02.11 RTJdtcUh.net
ただスレッドモデルのせいでメッセージループが回ってるのかどうかは良くわからないんだがな
原因は分からんが勝手にメッセージループ回すのはマジで迷惑だからやめてほしい
何がどの順で実行されるか分からなくなるから
466:デフォルトの名無しさん
18/07/04 22:09:52.47 gFgZc5FG.net
548
467:デフォルトの名無しさん
18/07/05 06:45:33.22 uNMy++3S.net
Direct2D いいね。
4K画像もヌルヌルに縮小拡大表示できる。回転や鏡像反転も大丈夫だった。
468:デフォルトの名無しさん
18/07/06 20:02:27.82 xJt/yCDq.net
1台のPCにマウスAとBを接続し、
マウスAは普通のマウスとしてWindowsで、マウスBを特定のプログラムのみで使いたいのですが
どのようにすればよいでしょうか?
469:デフォルトの名無しさん
18/07/06 20:26:18.50 uwYbJKCZ.net
特定のプログラムのみで使うってのをどういう意味にするかだな
フィルタードライバ作ってBを潰すと同時に操作をアプリに送って、アプリから特定のプログラムへマウスメッセージでも送るとか
470:デフォルトの名無しさん
18/07/08 20:51:40.89 O/180cHX.net
Low-Level Mouse HookでデバイスIDは取れなかったと思うし
ソフトでやる場合ドライバまで降りるしかないね
471:デフォルトの名無しさん
18/07/08 23:36:33.06 aNDdpi7h.net
GetGlyphOutlineでサロゲートペアの文字のビットマップを取得するには
どうすればいいでしょうか
普通の2バイトの文字はできます
調べると、グリフインデックスを取得して~みないな内容は
ぽつぽつ見つかったのですがよくわかりません
コピペして適当に真似てみたのですが、GGO_GLYPH_INDEXを指定すると
謎の小さいデータ(abc間隔とかいうやつでしょうか)が返ってくるだけです
これまた試しにGGO_GRAY8_BITMAP | GGO_GLYPH_INDEX とやってもサイズは0でした
472:デフォルトの名無しさん
18/07/09 17:38:45.00 1p1eFn95.net
INDEXをもらったら本体を取りに行く
473:デフォルトの名無しさん
18/07/09 21:03:04.88 xF/N3z+3.net
>>464
それはINDEXから直接アウトラインデータを持ってきて自前で処理するという意味でしょうか
本体を取りに行くというのがわからないです
474:デフォルトの名無しさん
18/07/10 19:32:28.56 Q7aC7GqH.net
カーネルモードからユーザーモードアプリにデータを渡すいい方法ないかな?
イメージとしてはマウスのボタンを押したらその情報をアプリが受け取るとか、ネットワークメッセージを受信したらそれをアプリに渡すというもの
CreateEventの通知と共有メモリ使えばできるけど、もっといい方法ないかな
475:デフォルトの名無しさん
18/07/15 04:33:45.21 Fuh1W0mR.net
>>463
これですがインデックス取得後、GGO_GRAY8_BITMAP | GGO_GLYPH_INDEXで
普通にサロゲートペアのビットマップを取得することが出来ました
原因は単にテストに使用していたフォントがサロゲートペアに対応してなかっただけでした…
もしそういうフォントの場合は
自分で取得前に代替フォントに切り替えるという認識であってますか
それともどこかで指定する方法はあるんでしょうか
476:デフォルトの名無しさん
18/07/15 07:18:20.84 F1eG7opL.net
>>466
> もっといい方法ないかな
「いい」はあなたの脳内でのみ定義された概念なので他人には答えようがない。
477:デフォルトの名無しさん
18/07/15 07:30:49.51 8618Mha6.net
>>468
あなたが考える「いい」方法を教えてって意味でしょwww
478:デフォルトの名無しさん
18/07/15 07:36:07.14 iXIp3nZ5.net
カーネルモードでFDDに保存
ユーザーモードはFDDの中身を定期的に読む
これで良い
479:デフォルトの名無しさん
18/07/15 08:27:47.61 GnA/ld69.net
>>469
答えたらそれは俺の「いい」と違うって言われるだけだろ
480:デフォルトの名無しさん
18/07/15 08:54:59.84 JD67P8Kl.net
プログラマなんてアスペキチばっかだから質問を読み取ってくれないのはよくあることよ
それにDDKスレ見りゃ分かるが質問は海外ですべき。国内じゃ回答つかん
共有メモリだとデータ欠落がありえるから(受け渡し済みデータをメモリ内から消す仕組みを作るのが大変だから)
FIFOにためて通知後にdeviceiocontrolで読み出させる
481:デフォルトの名無しさん
18/07/15 09:02:55.50 TNInTYOo.net
いい方法はわからないが正しい方法はあるだろう
システムはある方法が正解になる前提で全体ができている
それに逆らうと別の局面で何か問題が発生する
482:デフォルトの名無しさん
18/07/15 14:57:39.97 F1eG7opL.net
煽りぬきで、まず「いい」の定義から。
信頼性を優先するのか、速度を優先するのか、ソースコードの使いやすさを優先するのか、メモリ消費を抑えることを優先するのか、等。
483:デフォルトの名無しさん
18/07/15 15:00:46.43 JD67P8Kl.net
用途が挙げられてるからそこから読み取れってことよ
その用途で実装するならこういう処理の方が「いい」となる
484:デフォルトの名無しさん
18/07/15 15:19:18.62 F1eG7opL.net
質問者や発注者は、何を優先し、何を犠牲にする覚悟があるかを明確にすることが必要。
それは金であったり時間であったりする。お前らの工数と人件費を犠牲にしたい場合が多い。
485:デフォルトの名無しさん
18/07/15 15:24:35.14 blM5pGUx.net
まあ、「いい」は人それぞれな部分はあるかもしれないけど、そこやこだわりが書かれて無いならテキトーで良いんじゃね?
「お手軽な」という程度の解釈で。
486:デフォルトの名無しさん
18/07/15 15:38:50.77 F1eG7opL.net
発注側が受注側にわざと曖昧な要件を出して、受注側が提案したアイデアを無償で手に入れるのも重要な技術。
いかにしてコストを相手に押し付けるかが重要になる。
487:デフォルトの名無しさん
18/07/15 16:39:00.88 F1eG7opL.net
相手の自尊心を刺激しつつ、情報をタダで引き出す技術は極めて重要。省資源の基本。
488:デフォルトの名無しさん
18/07/15 18:54:11.43 z9dis41F.net
>>471
だよな
489:デフォルトの名無しさん
18/07/15 19:02:18.64 /PIdnGOp.net
逆に言えば「CreateEventの通知と共有メモリ」ではダメな理由は何なのか?
当人(>>466)が思うダメな理由が判れば、それを改善するものが「いい方法」なんじゃね?
490:デフォルトの名無しさん
18/07/15 19:29:32.13 JD67P8Kl.net
ネットワークモニターを共有メモリで実装すること考えたらダメと感じる理由分かるだろうよ
491:デフォルトの名無しさん
18/07/15 19:54:05.79 JjtknQT5.net
・・・・・この感覚・・・・・・感じるぞ・・・・・・
492:デフォルトの名無しさん
18/07/16 09:41:18.75 Tl1DHPio.net
memory mapped file
493:デフォルトの名無しさん
18/07/16 11:29:16.36 fjsGqhw7.net
共有メモリは誰が最後に開放するか問題があった気がする
代表プロセス(サービスとか)が全部やることにすればいいんだろうけど
494:デフォルトの名無しさん
18/07/17 09:35:44.28 3FwnZhxD.net
Win32APIでHDCに描画していくルーチンでPDFを作成できて、
プリンタドライバではなくDLLなどで提供されているものはありませんか?
ユーザーが印刷でAcrobatなどを選択するのではなく、専用のコマンドを用意して、
DLLのAPIからHDCを作成してそこに描画していく、という方法を探しています。
495:さまよえる蟻人間
18/07/17 11:31:49.15 iiy4NiaP.net
pdfium
496:さまよえる蟻人間
18/07/17 11:36:41.73 iiy4NiaP.net
ごめん、pdfiumは表示ができるけどPDF作成はできないんだった。
497:デフォルトの名無しさん
18/07/17 14:53:09.38 +kxKOOfA.net
HDC って描いてるからダメなんだろうけど
win32api じゃなくて良ければ
matplotlib の dll
498:デフォルトの名無しさん
18/07/17 15:02:10.66 Zb0J/52v.net
>>486
いっそpdfを自分でゴリゴリ作るライブラリを作って公開しよう
499:デフォルトの名無しさん
18/07/17 19:29:45.08 8vhfTmzU.net
PDFつくるの割と簡単だからな。読むのは難しいが
500:さまよえる蟻人間
18/07/17 21:32:24.00 o/CsZXJt.net
PDFは、Win32APIの範疇じゃないから、HDCにこだわる必要はないと思う。
どうしてもHDCで描くなら、ビットマップを使うことになる。
501:デフォルトの名無しさん
18/07/17 21:46:38.93 zCwWixNA.net
>>486
libharu
手書きPDF (URLリンク(www.kobu.com))
502:デフォルトの名無しさん
18/07/17 23:12:07.09 Zb0J/52v.net
どうしてもHDCからデータを取る必要があるのなら、pdfじゃなくてemfはダメなの
503:486
18/07/18 09:13:26.55 b6TTATjh.net
やっぱりこういうライブラリは無いものなんですかね。
プリンタのHDCに対する印刷処理は実装済みで、
普通にAcrobatなどを選んで印刷すればPDFは作成できるので、
PDF作成用のHDCさえ作れれば、Acrobatなどに依存せずに、
今の処理でPDFを作成できるんじゃないかと思った次第です。
もちろん、プリンタのHDCに描画する処理とは別に、
PDFを作成する処理を新たに作れば可能なんでしょうけど、
今の印刷結果と一致させるもの大変そうだと思いました。
504:デフォルトの名無しさん
18/07/18 09:30:56.80 XytxFrpz.net
HDC→bmp→手書きPDFの調子で画像埋め込みpdf生成
これで終わり。1日あればできるでしょw
505:デフォルトの名無しさん
18/07/18 09:32:44.92 b6TTATjh.net
>>496
説明不足ですいません。
それだと文字がコピーできなくなってしまいます。
506:デフォルトの名無しさん
18/07/18 10:32:30.08 w8OpeSfX.net
>>469
じゃぁそう書けばいいじゃん
507:デフォルトの名無しさん
18/07/18 10:35:38.58 w8OpeSfX.net
>>497
まさにここに>>471の実例がw
508:デフォルトの名無しさん
18/07/18 10:49:35.82 XytxFrpz.net
HDCをDLLから作れないと思う。プリンタドライバ入れないと無理じゃないかな
それでもプリンタドライバを入れたくない&HDC使いたいってなら、手書きPDFしかないと思う
HDC使う処理を全てフックして手書きPDF処理に渡して生成
フォントは埋め込めるし、当然座標指定もできるから見た目を合わせるのは難しいことじゃない
509:さまよえる蟻人間
18/07/18 11:39:33.38 2uaoDzyj.net
URLリンク(www.colorpilot.com)
510:デフォルトの名無しさん
18/07/18 17:17:05.71 r2tNZQmN.net
EMFがPDFになってもうれしくないんだよな
511:デフォルトの名無しさん
18/07/18 19:00:09.03 1yGq4zZr.net
嬉しいとか悲しいという感情はしまい込め
512:さまよえる蟻人間
18/07/18 19:44:08.79 IL3iPWys.net
EM_DOCUMENT_AddPageFromMetaHandleというメソッドがあるみたいだから試してみては。
$4995-が高いかどうかは自分で考えな。
URLリンク(github.com)
というものもある。
513:さまよえる蟻人間
18/07/18 21:34:56.01 2uaoDzyj.net
プロプロイエタリっぽいな。日本人にはまだ未踏の分野みたいだ。
514:デフォルトの名無しさん
18/07/21 18:28:47.97 TBQGTmI1.net
IE(11)のタブってspy++で見ると、タブコントロールじゃないように見えるけど
これ自前かな?
タブの入れ替えの時も、タブがするすると動いて入れ替わる動作だし
これってタブコントロールだと無理だよね?
基本的に、IE,Edge,Chrome,Firefox,Opera,Vivaldi等のブラウザのタブって
タブコントロールじゃなくて、自前で描画しているのかな?
515:デフォルトの名無しさん
18/07/21 22:53:51.14 diLgD0pr.net
基本的に自前だよ
516:デフォルトの名無しさん
18/07/22 17:11:05.29 0LoJ4eZK.net
char *p = "hello";
を書くと、「型 const char * の値を使用して型 char * のエンティティを初期化することはできません 」
と表示されるんだが、どうすればいいんだ?
CQ出版社の『Win32 API完璧マスタ』189ページにも書いてある構文なのに・・・
517:デフォルトの名無しさん
18/07/22 17:13:16.23 Xbb1Ck+x.net
スレタイ
518:デフォルトの名無しさん
18/07/22 17:14:28.87 LiIRy0eu.net
char q[] = "hello";
char *p = q;
519:デフォルトの名無しさん
18/07/22 17:14:46.72 V5NblbDe.net
そんなのはCスレで聞けよ
char p[] = "hello";
520:デフォルトの名無しさん
18/07/22 17:15:10.69 LiIRy0eu.net
こうか
char q[] = "hello";
char *p = (char *)q;
521:デフォルトの名無しさん
18/07/22 17:20:17.81 0LoJ4eZK.net
これをTextOutしたいんだが・・・
TextOut(hdc,10,10, p, strlen(p) );
と書いてもエラーになってしまうし、
pをqに変えてもエラーが出る
522:デフォルトの名無しさん
18/07/22 17:26:49.45 0LoJ4eZK.net
>>513
「型 char * の引数は型 LPCWSFR のパラーメータと互換性がありません
BOOL TextOutW(HDC,int,intLPCWSTR,)int: 引数 4 を char[6] から LPCWSTR へ変換できません。」
って出てしまう。
CQ出版社の本には、
「TextOut(ps.hdc,10,10, p, strlen(p) ); 」って書いてあるのに。
523:デフォルトの名無しさん
18/07/22 17:27:01.83 +kDBWEhy.net
>>513
>508のエラーなのか TextOut のエラーなのか
524:デフォルトの名無しさん
18/07/22 17:29:03.13 +kDBWEhy.net
あー、面倒なので正確には調べないが、文字コードセットかソースファイルのコードを調べて
全部マルチバイト文字にでも統一すれ
525:デフォルトの名無しさん
18/07/22 17:30:27.51 V5NblbDe.net
コンパイラのオプションでユニコードを使うを無効化しろ
もしくはTCHARとかTextOutWとかTextOutAとかその辺でぐぐれ
526:デフォルトの名無しさん
18/07/22 17:33:51.95 0LoJ4eZK.net
>>515
TextOutの際に、いちいち
TextOut(hdc, 10, 10, TEXT("hello"), 5);
と文字列と字数を毎回入力したくないし、
表示文字を"good morning"とか "good bye" とか違う字数の文字列にも置き換えたいんだ。
だから、変数を使って文字列をpとかqとかに置き換えたいんだけど、そこで
型 char * の引数は型 LPCWSFR のパラーメータと互換性がありません 」
とかのエラーが出てしまう。
527:デフォルトの名無しさん
18/07/22 17:36:00.67 V5NblbDe.net
charは1バイト文字の型
LPCWSTRは2バイト文字の型
ものが違うんだよ
ってかwin32の本ならそのくらい書いてあるだろ。もし書いてないならゴミだから捨てろw
528:デフォルトの名無しさん
18/07/22 17:38:56.62 2bRdLxLs.net
TCHAR p[] = TEXT("hello");
TextOut(hdc, 10, 10, p ,lstrlen(p));
529:デフォルトの名無しさん
18/07/22 17:45:11.99 2bRdLxLs.net
>>518
後から文字列を変更するのであれば、初期化の時に配列の要素数に注意
#define MAX_LENGTH 256; // 要素数に注意
TCHAR p[MAX_LENGTH] = TEXT("hello");
530:デフォルトの名無しさん
18/07/22 17:55:50.38 SZ8yn981.net
>>516-517
今から覚える人に非推奨のMBCS版を勧めるのはどうかと。
VSでも2015辺りからMBCS版のバグを治さず放置してたりするのだし。
531:デフォルトの名無しさん
18/07/22 18:02:40.99 0LoJ4eZK.net
「TCHAR p[MAX_LENGTH] = TEXT("hello");」
で「式が必要です」ってエラーが出てしまうし。
「TCHAR p[256] = TEXT("hello");」って直接に数値指定するとエラーメッセージが消えるから、
なんかdefineが働いてないっぽい
532:デフォルトの名無しさん
18/07/22 18:09:58.01 lnBo9wWY.net
>>521
「256」の後の「;」は不要
533:デフォルトの名無しさん
18/07/22 18:17:18.42 2bRdLxLs.net
>>523
すまんね
流石に気付くだろうと思って黙ってたけど、define文の末尾にうっかり余計なセミコロン付けてしまっているので注意してね
とりあえずいまどきの環境なら、charはTCHAR、char *はLPTSTR、const char *はLPCTSTRを使い、リテラルはTEXTマクロで囲って
文字列操作関数はl付きの関数strlenならlstrlen、strcpyならlstrcmpなどに置き換えればほとんど問題はないよ
534:デフォルトの名無しさん
18/07/22 18:18:05.39 2bRdLxLs.net
被った、
指摘ありがとう>>524
535:デフォルトの名無しさん
18/07/22 18:19:49.25 0LoJ4eZK.net
いろいろと教えてもらい、スレの皆様、ありがとうございます。
自分、最終的にゲームっぽいのを作りたくって、
それで会話メッセージが何百個もあるから、どうしても文字列を変数にする必要があるんです。
エラーコード↓です。
「
TCHAR p[256] = TEXT("hello");
TextOut(hdc, 10, 10, p, lstrlen(p));
p = TEXT("good morning");
TextOut(hdc, 30, 30, p, lstrlen(p));
」
こんな感じで、1つのpを使いまわしたいんです。
strcpyかとも思ったんですけど、「strcpy(p, TEXT("good morning") );」でも
「char*のパラメーターと互換性がありません」ってエラーが出て、なんか違いそうだし・・・
ググッても、Win32APIで1つの文字列変数を複数の文字列に何度も書き換える事例が見つからなくて、困ってます。
536:デフォルトの名無しさん
18/07/22 18:20:26.15 2bRdLxLs.net
>>525でstrcpyとstrcmpがごっちゃになってた、訂正
537:デフォルトの名無しさん
18/07/22 18:20:35.42 V5NblbDe.net
>>522
でもなこのレベルだとstrcpyすらできずに詰むぞw
538:デフォルトの名無しさん
18/07/22 18:24:33.44 2bRdLxLs.net
>>527
多分 lstrcpy でいける
539:
18/07/22 18:26:03.58 +jM3tBOE.net
>>527
私なら(char *) にキャストしてしまいますね…これは悪手ですが
540:デフォルトの名無しさん
18/07/22 18:26:33.56 0LoJ4eZK.net
解決しました!こうですね
「
TCHAR p[MAX_LENGTH] = TEXT("hello");
TextOut(hdc, 10, 10, p, lstrlen(p));
lstrcpy(p, TEXT("good morning") );
TextOut(hdc, 30, 30, p, lstrlen(p));
」
じぶん "lstrcpy" の存在を知りませんでした。
買ってたCQ出版社の本が2001年の本で古くって、
それで、ここら辺の話題が見当たらなくって、地元書店にWin32APIの本が無くって、
困ってました。月曜日に、銀行からカネを引き出して、都会の本屋に買い物に行こうかと思ってたところです。
質問に回答してくださった皆様、ありがとうございます。
541:デフォルトの名無しさん
18/07/22 18:26:39.79 lnBo9wWY.net
>>527
中身を直接書き換えないならLPCTSTRで十分
LPCTSTR p = TEXT("hello");
p = TEXT("good morning");
542:デフォルトの名無しさん
18/07/22 18:36:11.82 2bRdLxLs.net
>>533
LPTSTRなら可能だけどLPCTSTRだと無理じゃないかな
543:デフォルトの名無しさん
18/07/22 18:57:59.75 Xbb1Ck+x.net
なぜ?
544:デフォルトの名無しさん
18/07/22 19:17:54.18 LiIRy0eu.net
>>513
TextOutA使え
お前にTextOut/TextOutWはまだ早い
545:デフォルトの名無しさん
18/07/22 19:47:40.34 lnBo9wWY.net
>>534
無理と決め付ける前に、まずは試してみるべきじゃないかな。
546:デフォルトの名無しさん
18/07/22 19:49:56.11 Rc8bc+T5.net
>>507
やっぱり自前ですか。
ベースにコモンコントロールのタブコントロール使ってるかと思ったら
どのブラウザも完全にオリジナルのタブコントロールを作ってる
みたいなんですよね。
これだけで一仕事だ、せめて手を抜く方法が無いものか。
547:デフォルトの名無しさん
18/07/22 20:07:22.02 V5NblbDe.net
コモンコントロールでつくりゃいい
何も真似することないでしょ
548:デフォルトの名無しさん
18/07/25 12:14:32.39 ObNghvXR.net
>>508
レスをつけてたここの住人はある意味、意地悪だなw
508よ、VS2017とか使ってるなら、プロジェクトのプロパティから、
構成プロパティ -> C/C++ -> 言語 の画面に、準拠モードという項目があるので、準拠モードをオフにしてみろ。
コンパイラが悪さしているだけだw
たとえば、準拠モードONだとこのコードは、こんなエラーになる。オフなら無事コンパイルできる。
#include <stdio.h>
int main(){
char *p = "hoge\n";
printf(p);
return 0;
}
1>------ ビルド開始: プロジェクト: test0001, 構成: Debug Win32 ------
1>test0001.cpp
1>d:\test0001\test0001\test0001.cpp(3): error C2440: '初期化中': 'const char [6]' から 'char *' に変換できません。
1>d:\test0001\test0001\test0001.cpp(3): note: 文字列リテラルからの変換では const 修飾子が失われます (/Zc:strictStrings を参照)
1>プロジェクト "test0001.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
549:デフォルトの名無しさん
18/07/25 12:16:39.87 SfO6vmHU.net
>コンパイラが悪さ
最低だなこいつ
550:540
18/07/25 12:19:48.04 ObNghvXR.net
マルチバイト文字の設定しろって書き忘れた。
構成プロパティ -> 全般 -> 文字セット
マルチバイト文字セットを使用する
の項目をセットしておけ。
古い本ベースで作るならそっちで十分だ。
慣れて来たらunicode文字セットにしてwchar_tとか使えばいいよ。
551:デフォルトの名無しさん
18/07/25 12:21:31.72 ObNghvXR.net
>>541
本読んでる初心者相手に、難しいこと言って混乱させるよりはいいだろう。
まずは動くようにするのが先じゃね?w
552:デフォルトの名無しさん
18/07/25 12:42:55.89 BhmZZaV3.net
コンパイラとか言う野郎最悪だな
そんなもんに頼むなよ
553:デフォルトの名無しさん
18/07/25 13:07:44.22 yh3zla7+.net
だな
ハンドアセンブルとかハンドコンパイルしろ
554:デフォルトの名無しさん
18/07/25 13:11:46.60 ufwVuEFI.net
URLリンク(www.suruga-ya.jp)
555:デフォルトの名無しさん
18/07/25 13:15:34.98 bHme1j3N.net
>>542
意地悪も何も、そのレスをとっくにしとるんだが
556:
18/07/25 19:02:54.19 2d5RfbzO.net
cygwin/mingw-gcc で文句がでなければ、ほぼ問題ない、としています
557:デフォルトの名無しさん
18/08/06 21:23:32.62 CcPxoO2Y.net
成功した時に返り値が0になることがあるのに、失敗したら0を返しますとか言ってるAPIって何なんだよクソ野郎め
558:デフォルトの名無しさん
18/08/06 21:32:35.68 1U9qnNco.net
getlasterror
559:デフォルトの名無しさん
18/08/06 21:52:26.61 ID4O2Vgr.net
もちろんそんなの知ってるけど、GoがWindows API用に生成してくれるコードが返り値をチェックしちゃっててしばらくハマった
560:デフォルトの名無しさん
18/08/06 23:33:15.82 rktgM2el.net
>成功した時に返り値が0になることがあるのに、失敗したら0を返しますとか言ってるAPI
ちなみにどのAPI?
561:デフォルトの名無しさん
18/08/06 23:58:21.60 ID4O2Vgr.net
GetClassLongPtrとか
562:デフォルトの名無しさん
18/08/07 00:48:58.54 QZJ4WUVF.net
Goがクソなだけじゃん
リファレンス読んでコード生成しろよバーカ
563:デフォルトの名無しさん
18/08/07 05:00:55.97 OlmXtX1U.net
>>549-550
「失敗が返って来たときは関数を呼びます」
だっけ
564:デフォルトの名無しさん
18/08/07 13:27:12.44 ldpX++7o.net
>>549
「失敗したら0を返します」の対偶は「非ゼロが返ったら成功している」だ。
「成功したら非ゼロを返す」ではない
これが分からない人には if文は書けない
565:デフォルトの名無しさん
18/08/07 14:31:10.43 AJOeK/rw.net
>関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。
これな
566:デフォルトの名無しさん
18/08/07 21:06:57.68 BoePinTI.net
>>557
>>拡張エラー情報を取得するには、 関数を使います。
これがわからない人には、プログラムは書けない
567:デフォルトの名無しさん
18/08/07 21:15:30.99 vzugDPjm.net
>>554-555
>リファレンス読んでコード生成しろよバーカ
>失敗が返って来たときは関数を呼びます
しばしば、動詞の主語がないせいで誰が対象なのか、わからないことが多い。
バカなのは誰なのか。
関数を呼ぶのは誰なのか、関数が関数を勝手に呼んでくれるのか。
的な。
568:デフォルトの名無しさん
18/08/07 21:19:02.18 +HmVRhEr.net
馬鹿なのは読み手に決まってるだろww
569:デフォルトの名無しさん
18/08/07 23:23:50.41 ca/GX3OS.net
まさかと思うけど英語読めないとか?
戻り値
関数が成功すると、要求した値が返ります。
関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。
URLリンク(msdn.microsoft.com)
Return value
Type: ULONG_PTR
If the function succeeds, the return value is the requested value.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
URLリンク(msdn.microsoft.com)(v=vs.85).aspx
570:デフォルトの名無しさん
18/08/07 23:39:40.91 95G7jtf/.net
訳が全然ちげぇ、ってネタだろ。
571:デフォルトの名無しさん
18/08/07 23:44:38.95 JmB8aria.net
う~ん
実に使いにくい
572:さまよえる蟻人間
18/08/07 23:55:05.37 p+v0mQmH.net
ダークサイドの貧乏マは、インターネットのどこかにWin*2 Pr*gramm*rs' Refer*nceというヘルプファイルがあるから、別に。。。まあ、できる奴はサプスクリプションをイッチャッテ。
573:デフォルトの名無しさん
18/08/08 04:44:16.55 XhOfYtOw.net
>>561
このひどい訳文はテンプレのようになってて
このGetClassLongPtr()の例だけじゃなく
Win32APIのいたるところで見るんだが
ほんとうにやめてほしい
574:デフォルトの名無しさん
18/08/08 05:30:57.38 pP5XdYnX.net
>>562, >>565
訳が酷いと言うよりなぜかわからんが関数名(GetLastError)が無くなってるって話だろ
575:デフォルトの名無しさん
18/08/08 07:00:27.96 EhLv0UZk.net
もう慣れたわ
576:デフォルトの名無しさん
18/08/08 08:05:04.95 ApshsMT9.net
GetClassLongPtrのように値だけ返すやつは、失敗時ややこしいってのはAPIに限ったことじゃなく関数作ったことあればだれでも知ってること
MSDNの日本語ページはの罠は無数にあるから少しでもWindowsプログラミングしたことあれば英語ペ�
577:[ジ見ることになる どっちも超初心者じゃないとひっかからない罠 昨日のニュース 日本国内でのプログラミング言語別の年収ランキング、中央値1位は「Go」 http://www.itmedia.co.jp/news/articles/1808/07/news087.html
578:デフォルトの名無しさん
18/08/08 16:43:15.25 QemCzjVB.net
>>566
それを訳がひどいって言うんだよ
579:デフォルトの名無しさん
18/08/08 16:56:08.84 T8cc5IXv.net
みんな間抜けなんでマジレスするけど、SetLastError(0)でクリアしてから呼ばないと、成功したのか失敗したのかわからん仕様です。
580:デフォルトの名無しさん
18/08/08 17:43:49.45 jbuaovom.net
>>569
周回遅れ乙
>>570
みんなそんなことは分かってるだろ
普通に考えたら失敗/成功をBOOLで返して取得した値はポインタ経由で返せばいいのに
って思ってる人は多いと思う
581:デフォルトの名無しさん
18/08/08 19:26:41.46 9aI0uHWQ.net
ぬるぽ
582:デフォルトの名無しさん
18/08/11 00:27:06.52 MXmSxQHh.net
>>566
これを見るたびに何でどうしたらこんなことになるのかと考え込んで作業が中断してしまうのだ
583:デフォルトの名無しさん
18/08/11 07:49:06.09 J6jQGTXX.net
開発が遅れるわけだw
584:デフォルトの名無しさん
18/08/11 13:45:31.92 VJAxUjoq.net
悟ってお仕事
585:デフォルトの名無しさん
18/08/23 22:27:48.51 hCHxCnaA.net
スナップできるのはどういうウィンドウかあるいはどういう条件なのか、具体的な要件の一覧ってどこかで見られますか。
自作デスクトップアプリケーションのウィンドウがスナップ機能の対象になってないことに気づいて、少しプログラムをいじってみたところ
すぐにウィンドウスタイルによってスナップ機能が働かないことがあるのはわかりました。
具体的にはWS_MAXIMIZEBOXが無いとスナップできません。
で、他のスタイルやスタイル以外の条件もあるかもしれないと思い、
まずはウィンドウスタイルとスナップの関係性から調べてみましたがスナップ機能の条件についての情報は見つけられませんでした。
よろしくお願いします。
586:デフォルトの名無しさん
18/08/23 23:19:58.10 yNz2G80b.net
スナップなんてOSの設定で最初に切る項目だぞ
気にするな
587:デフォルトの名無しさん
18/08/24 12:24:54.13 ZVlysGry.net
ダイアログにすればいい
588:デフォルトの名無しさん
18/08/24 12:28:22.65 NFTQhSIK.net
ついでに質問だけど
win10あたりからウィンドウの枠のちょっと外まで(影なしにしてても)
ウィンドウのリサイズとかマウスアイコン⇔の判定に使われてるみたいで
ウィンドウの下のウィンドウを上にもって来たくてクリックしたつもりが
違うウィンドウが上に来てしまうことが多くて困ってる
これなんとかする設定どこにある?
589:デフォルトの名無しさん
18/08/24 12:54:56.78 9pgk/rrF.net
このスレ的な解決だとFrameRectをフックして少し大きめの枠に変えちゃえばいいのかな
590:デフォルトの名無しさん
18/08/24 13:35:47.85 C22mUEBr.net
> 具体的にはWS_MAXIMIZEBOXが無いとスナップできません。
win7 WS_MAXIMIZEBOXなしのタイトルバーをマウスでつまんで
desktopの上辺に移動してマウスを放すと、
タイトルバーが完全に表示されるように再移動される
これもsnapではないのか
591:デフォルトの名無しさん
18/08/24 16:58:34.94 71ZOGqZF.net
>>581
そうですね。即席で調べただけなので見落としてました。
いずれにせよ、スナップ操作時にどういったウィンドウならばどういう作用が起こるのか、
逆に特定のスナップの効果が欲しい場合にどういうウィンドウをセットアップすればよいのか
みたいなことがわかる情報を探しています。
592:デフォルトの名無しさん
18/08/27 20:05:43.05 vbuO7hMr.net
片山の取り巻きは帰れ
593:デフォルトの名無しさん
18/08/28 18:50:20.34 K0zx4BAG.net
実行中のGUIアプリケーションのコントロールを取得して表示させたいのですが良い方法はありますか?
594:デフォルトの名無しさん
18/08/28 22:31:26.44 CqD+kceR.net
spyのソースを読むべし
595:デフォルトの名無しさん
18/08/29 06:13:37.68 bvggge1h.net
hwnd検索するだけの質問だったのか
てっきりインジェクトして中身奪い取るとかそんなのかと思ったわww
596:デフォルトの名無しさん
18/08/29 06:56:51.37 /uFmfA/d.net
そっちならAppInit_DLLsの勉強しなされ
ってのが回答かな
597:デフォルトの名無しさん
18/08/29 07:15:50.54 bvggge1h.net
難しいのはインジェクトの先だから・・・
598:デフォルトの名無しさん
18/08/29 08:38:47.27 SgdWV5FD.net
悪用出来るからこの先は自分でお勉強
599:デフォルトの名無しさん
18/08/29 09:10:27.86 eKXrV34J.net
>>589
素直にわからないって言えよ
>>588の「先」は、「自分のプロセスに貼ったコントロールを、そのまま残しつつさらに別プロセスのウインドウに貼り付けて表示する」ということだからな
600:デフォルトの名無しさん
18/08/29 09:13:57.66 /ngMaME6.net
>>590
なんでそんなことするのか全然わからん。
>そのまま残しつつ
>貼り付けて
601:デフォルトの名無しさん
18/08/29 09:29:45.16 eKXrV34J.net
>>591
>>584がもしも>>586ならそうなるでしょ
602:デフォルトの名無しさん
18/08/29 10:17:28.09 X/yLq4q6.net
そのまま残してんなら奪ってないやん
603:デフォルトの名無しさん
18/08/29 10:41:34.94 eKXrV34J.net
>>593
飽きれるほどくだらない揚げ足取りだな
「パスワードを奪い取る」の考えてみろ。残さないとは限らないんだよ
604:デフォルトの名無しさん
18/08/29 11:02:53.78 X/yLq4q6.net
>>594
飽きれるほど下手な例えだな
パスワードは残さないと使えないだろ
605:デフォルトの名無しさん
18/08/29 11:13:44.40 7geB3Ftq.net
パスワードはいただいた
返して欲しければ1BC用意しろ
606:デフォルトの名無しさん
18/08/29 12:00:14.20 X/yLq4q6.net
いただいた(変更した)
607:デフォルトの名無しさん
18/08/29 12:09:36.88 /ngMaME6.net
入力するパスワードを勝手に変えたら駄目じゃん
608:デフォルトの名無しさん
18/08/29 14:19:35.46 X/yLq4q6.net
パスワード変えずに「パスワードはいただいた」って?
それ何の脅しにもならんやん
元の持ち主が別のに変更して終わり
609:
610:デフォルトの名無しさん
18/08/29 14:37:13.57 7geB3Ftq.net
せっかくギャグを入れてやったのにしょうもねえ奴ら
611:デフォルトの名無しさん
18/08/29 22:37:19.40 /ngMaME6.net
え?おもしろいとでも思ってたの?
もしかして渾身のギャグなの?
恥ずかしくないの?
612:デフォルトの名無しさん
18/08/30 10:17:52.45 Z5Fjo3b4.net
程度が同じじゃないとジョークは通じないらしい
ただ今回はガキとバカだからどちらも等しく低いように見えるな
613:デフォルトの名無しさん
18/08/30 10:23:06.98 53NSE4xw.net
謎の上から目線
614:デフォルトの名無しさん
18/08/31 04:18:44.69 kx4Z958G.net
昔のゲームのコードを弄ってて困った事があります。
ウィンドウの大きさを変えると一緒に表示中の画面も引き延ばされるのですが
引き延ばされた時に粗くなって美しくないです。内部のバッファをウィンドウを最大化された時の大きさで確保しておき
ゲームの処理の方でフィルタ処理を施せば上手く行きますが出来れば小さいバッファのままで
ウィンドウのリサイズ時にAPI側でフィルタ処理できないでしょうか?
あと気になるのが環境によっては上記の処理を勝手にやってくれている環境もあります(ディスプレイドライバによるのかもしれません)。
出来れば確実にこちらで処理できるようになれば嬉しいです。
615:デフォルトの名無しさん
18/08/31 06:25:35.68 u3E//DdP.net
>>604
普通、WM_SIZEの都度ゲームのフレームバッファを再作成するもんじゃねえの?
616:デフォルトの名無しさん
18/08/31 06:50:31.93 kx4Z958G.net
>>605
出来ればバッファの大きさは固定で行きたいんです。
最大化された時にいかにも拡大してフィルタリングされた感じを出したいので。
環境によってはウィンドウがリサイズされると勝手にフィルタリングしてくれて
ぼやっとした画面になるので出来ればそれを確実にやりたい感じです。
何か設定でもあるんでしょうか。OSの設定としてあるならそれを知りたいです。
617:デフォルトの名無しさん
18/08/31 07:13:40.06 wCA0c3fj.net
SetStretchBltMode
618:デフォルトの名無しさん
18/08/31 18:32:30.98 kx4Z958G.net
>>607
良さげですね!試してみます。ありがとうございます。
619:608
18/08/31 20:11:53.40 kx4Z958G.net
どのタイミングでStreachBltを呼び出してるのかわからない…
ウィンドウを制御するクラスの中のWM_PAINTは空だし。
初期化時にDirectXのAPIにhWndを渡してるので勝手にDirectX内部で呼び出してるのかな?
リサイズされた時にhWndを元にHDC作ってそこでStreachBltとか。その後HDC破棄みたいな。
そうなると手出しできないってこと?
620:デフォルトの名無しさん
18/08/31 20:17:23.84 kx4Z958G.net
それともウィンドウ作成時のスタイル設定などで
リサイズに合わせてスケーリングをどうするのかみたいな設定があるのかな。
それだとそこの設定でどうにかなりそうな気もするけどよく分からない。
ちなみにウィンドウ制御クラスの中のWM_PAINTでは動画などのスケーリングは自前でやってた。
なので少なくともWM_PAINTの中では自分でウィンドウ内部の他の表示のスケーリングはやってない。
621:デフォルトの名無しさん
18/08/31 20:46:55.45 kx4Z958G.net
ここ見たらたぶん同じような症状で困ってた人がいて
URLリンク(dxlib.o.oo7.jp)
基本的に手出しができず綺麗に拡大されるかはドライバによるという事らしい…
え~やだやだ~ 納得できない。やっすいPCでも綺麗に拡大されてるのに
家の高いPC(ドライバも新しい)で汚いなんて納得できないよ~!
622:デフォルトの名無しさん
18/08/31 21:07:44.36 pOoITzWx.net
> 現状ではコーラさんがお書き込みになられた方法しかありません
あるって書いてあるじゃn
623:デフォルトの名無しさん
18/08/31 21:22:40.36 kx4Z958G.net
>>612
うん。そうだけど、たっかいグラボ積んでる家のマシンで汚く表示されて
やっすい3万くらいのPCで綺麗に表示されるのが納得いかないの。
624:デフォルトの名無しさん
18/08/31 21:23:46.62 kx4Z958G.net
>>612
あ、ごめん見間違った。
方法はあるんだけどバッファの大きさは固定でやりたいの。
625:デフォルトの名無しさん
18/08/31 21:31:04.55 pOoITzWx.net
だからバッファ固定でできるって
626:デフォルトの名無しさん
18/08/31 21:32:44.33 LcHwdHfr.net
なんか意味不明な質問だなと思ったら、それWin32じゃなくてDXライブラリとかいう
よくわからんライブラリの話やん。
627:デフォルトの名無しさん
18/08/31 21:33:51.55 kx4Z958G.net
拡大した時に粗くなる→最初から内部のバッファの解像度を上げておけばよくね?
ってのはナシで。
あくまでも内部のバッファの大きさは今のままでウィンドウが拡大された時に
勝手にドライバがやる部分をどうにかしたい。けど無理そうだね…
納得いかないのは、やっすいPCでは綺麗に表示されてるのに
たっかいPCで汚く表示されてしまうこと… 逆なら納得したのにこれはないよな~
628:デフォルトの名無しさん
18/08/31 21:35:25.97 kx4Z958G.net
>>616
いやDXライブラリでも制御できない部分なので
Win32APIの方でなんとかならないのかなと思って。でも無理なのかな。
ここの人ならなんか解決法わかるかなと思ってたけど。
629:デフォルトの名無しさん
18/08/31 21:44:49.09 pOoITzWx.net
win32でやるならSetStretchBltMode
おまえがやるべきなのは小さい画面サイズのでいいからそのDCを取り出すこと
それしたらあとは表示するだけ
630:デフォルトの名無しさん
18/08/31 21:50:44.31 kx4Z958G.net
>>619
要するにそれは内部バッファのHDCを取り出して
SetStretchBltModeを設定し、その後ウィンドウのクライアント領域に自前で
StretchBltで描画しろってことになるかな?まあそれしかないのかやっぱ。
631:デフォルトの名無しさん
18/08/31 22:41:05.39 kx4Z958G.net
さすがに自前でやったらGDI+使っても速度が全然でなかった(毎フレーム描画しないといけないので)。
諦めます~
632:デフォルトの名無しさん
18/08/31 22:47:15.40 u3E//DdP.net
なんか基本的な部分から盛大に勘違いしてそうだな
Direct3D使ってるならドライバ依存になるのはスワップチェインのバックバッファが
ターゲットウィンドウのサイズとかみ合わない場合に
Presentの呼び出しでウィンドウにフィットするように自動でスケーリングされる部分だ
ドライバ依存の挙動を回避したいならバックバッファをウィンドウに合わせてリサイズするのは必須なの
逆に、バックバッファの解像度をゲームの解像度と考える必要も無い
バックバッファがどんなサイズであれゲーム自体は固定サイズのレンダーターゲット用テクスチャにレンダリングし
バックバッファへはそのテクスチャをスプライトとして張り付けるだけ
拡縮フィルタリングをニアレストにするのもバイリニアにするのもアプリでしっかり管理できる
なんならシェーダでLanczosにしても良い
633:デフォルトの名無しさん
18/08/31 23:02:05.30 GkpBxwA9.net
せっかく諦めたのに
634:デフォルトの名無しさん
18/08/31 23:19:59.47 kx4Z958G.net
>>622
なるほど~バッファをリサイズしないと必ずドライバ依存のスケーリングになってしまうってことね。
その辺りをもうちょい考えてどう対処するか検討してみるよ。ありがとう。
>>623
まだまだ諦めんぜえ~ww
635:デフォルトの名無しさん
18/08/31 23:25:09.45 N52+Kto5.net
野菜の日
636:デフォルトの名無しさん
18/09/04 23:00:53.53 g1EQF691.net
CreateFile()で取得したハンドルをGetMailslotInfo()に渡していいものでしょうか?
CreateFile()の第1引数には、別プロセスでCreateMailslot()したときの第1引数と同じ
です。
637:デフォルトの名無しさん
18/09/05 08:35:25.55 w5sEnOXo.net
流石にmsdn見ろとしか
638:デフォルトの名無しさん
18/10/03 18:23:25.15 BIMPuBeq.net
リストビューでマウスドラッグで範囲選択をしているとき、
その選択範囲の矩形座標を取得する仕組みは無いのでしょうか。
範囲選択開始時のLVN_MARQUEEBEGINしか見つからないのですが。
639:デフォルトの名無しさん
18/10/05 23:00:23.19 OkuzM4NB.net
メインウィンドウのメッセージループからマウス系イベント拾ってくるのが楽で良い
640:デフォルトの名無しさん
18/10/18 16:38:48.09 rfYW9BA4.net
AVIStreamGetFrameOpenというAPIで「MPEG-4 Visual (XviD)」で
圧縮されたaviファイルを開きたいのですが可能でしょうか?
また上記が無理なら無圧縮以外の何かでエンコードされたものを
開きたいのですが何だったら可能なのかも教えてもらえないでしょうか?
AVIStreamGetFrameOpenは、2番目の引数にAVIGETFRAMEF_BESTDISPLAYFMTを指定すれば
完全な無圧縮以外でYUY2だけはいけました。
641:630
18/10/18 17:40:26.75 rfYW9BA4.net
調べていたらコーデックというのはAVIStreamGetFrameOpenで使用されたような古い形式と
メディアプレイヤーで使用されてるような新しい形式があるようですね…
つまりこの古いAPIだとそれように提供されているコーデックを探してインストールしないといけないという事になるでしょうか?
新しい形式を利用するプログラムを作った方がいいような気がしてきました。
642:630
18/10/18 18:23:13.79 rfYW9BA4.net
確かにVideo for Windows用のコーデックを探してきてインストールすれば動くようになりました。
解決はしたのですが他のPCでもその都度これをインストールしないといけないってのがどうも…
643:デフォルトの名無しさん
18/10/18 18:34:46.06 LsEafRqd.net
そりゃコーデックのインストールは必須だよ
自前実装するとかなら別だけど
644:デフォルトの名無しさん
18/10/18 18:57:16.36 rfYW9BA4.net
>>633
ただ新しいタイプの方(DirectShow)の方はメディアプレイヤーとかも入ってるので
デフォルトでも結構動きそうなのでそこがいいなと。
初回のプログラム起動時にコーデック用dllだけシステムフォルダに突っ込んでもいいのかな…
645:デフォルトの名無しさん
18/10/19 12:08:49.41 jQ8EJjtV.net
>>632
ffmpeg
646:デフォルトの名無しさん
18/10/19 17:30:46.21 HIw2KJmH.net
ところでMacとかだと64bit化で32bit打ち切りの方向みたいだけど、Winはまだまだ32bitもサポートしてくれるよね?
647:デフォルトの名無しさん
18/10/19 19:13:40.82 HIw2KJmH.net
今のって64bit環境でエミュレーションしてるんだっけ?だから基本的にはずっと維持されるのかな?
648:デフォルトの名無しさん
18/10/20 11:06:47.52 6LBMAo3K.net
WOW64だけ終了させるのは考えにくいね。
32bit過去資産を切り捨てるメリットが当面無い。
32bitって、一般的なアプリだけなら切る方向に動くのもあり得る話だけど、
工業系で周辺ハードウェアを制御するのに32bitドライバとか組み込んでて
不思議じゃないので簡単に切れるレベルじゃないかと。
ARM系なんか採用してたらムリじゃね。
128bitOSが出てきたときにようやく切るようになるんじゃないかな。
Macはそんな環境で動いているケースはほとんどないから問題ない気がする。
649:
18/10/20 11:46:35.45 9jkSTDWo.net
>>638
>128bitOS
128ビットアーキテクチャーとか 128ビットOS とかは、ここ30年くらいは現れないのではないでしょうか…
650:デフォルトの名無しさん
18/10/20 11:57:36.98 6LBMAo3K.net
8/16bit全盛時代、64bitを現実的に捉えてた人は居なかったしなあ。
128bitなんて遠い先だと今は思ってても、どうなるか分からんもんよ。
651:デフォルトの名無しさん
18/10/20 12:18:25.97 u8BRF3D8.net
WOW64←32bit用のフォルダ
SYSTEM32←64bit用のフォルダ
では128bit化したときはどうなる?
WOW64←32bit用のフォルダ
WOW128←64bit用のフォルダ
SYSTEM32←128bit用のフォルダ
こうか?
652:デフォルトの名無しさん
18/10/20 12:22:46.95 QqxqMvRx.net
WOW128←32bit用のフォルダ
WOW64←64bit用のフォルダ
SYSTEM32←128bit用のフォルダ
こうなる可能性も悪夢
653:デフォルトの名無しさん
18/10/20 13:36:52.57 fOofNO0j.net
>>640
8/16bit全盛時代は32bitデスクトップコンピューターが
スーパーパソコンと言われることもあったなあ
32bit機なんて夢だった、64bit機なんて遠い未来に
実現するのかなあという感覚
654:デフォルトの名無しさん
18/10/20 19:16:09.86 ZcZ7Cx83.net
>>638
そういうところがOSだけ最新なの使っているものなのか?
古いアプリケーションをずっと使っているようなところだとOSも昔のままな気がするけど
>>641
その時にはSYSTEM32って名称はやめていると思う
んで、64bit以前のアプリケーション互換云々は単純に仮想マシン環境下で動作させればいい
仮想マシン上でも十分な性能を得られるだろうし
655:デフォルトの名無しさん
18/10/20 19:42:10.64 LsRLW+LD.net
128bitは多分こないんじゃないかなw
32bitとか64bitってメモリマッピングの領域の問題なんで
64bitなら4GByte×4GByteまでマッピング出来てしまうので
超絶高速SSDとかできてONメモリのように管理できるように
なっても64bit超えないような
656:デフォルトの名無しさん
18/10/20 20:09:53.22 zBQrNBwm.net
ドリームキャストは128bitって連呼してたなぁ
657:デフォルトの名無しさん
18/10/20 20:18:05.59 wecQHzx8.net
既にWindowsフォルダ配下はカオスだろ
M$よくこんなん管理できんなーと思ってたらやっぱり管理できてなかったみたいだな
658:デフォルトの名無しさん
18/10/20 21:00:21.96 A+7VUlnR.net
アプリケーション的には
16bits → 64KB 死ぬほど不便
32bits → 4GB 快適
64bits → 16EB 贅沢できる
659:デフォルトの名無しさん
18/10/21 02:36:06.52 fpcnU4T3.net
32bitアプリ使ってる人多いだろうから動かなくなったら苦情がめちゃくちゃ来そう。
660:デフォルトの名無しさん
18/10/21 03:23:03.53 C+Apg5Hi.net
>>643
でもその頃、汎用機は32bit機械だったよ?
アドレッシングは24bitだったけど。
>>645
AS400は128bitと言ってもいいのでは。
むしろIoTとか言ってコンピュータ側のリーチが伸びてるから
単一レベル記憶で世界を管理しようとしたら、既にある技術で言えば
IPv6は128bitだし、既に128bitの世界はきてる気がするよ。
661:デフォルトの名無しさん
18/10/21 05:03:20.85 5lMyjKAV.net
既存プロセスのウィンドウhwndに対するファイルのドラッグ&ドロップをマウスエミュレートを使わず実現するにはどうしたらよいですか?
過渡的な視覚効果であるドラッグは必要ないので、実質ドロップだけできればいいとは思うのですが。
662:デフォルトの名無しさん
18/10/21 08:15:24.58 S2kctYlU.net
>>649
そもそもVisual Studioが32bitだから32bit打ち切ったら開発できなくなるし w
663:デフォルトの名無しさん
18/10/21 14:33:56.37 jYu3kmgI.net
>>650
個人が買えるPCの話だよ、その頃はPCで
32Bitアドレッシング24Bitなんて夢だった
664:デフォルトの名無しさん
18/10/21 16:15:03.17 /+3u54Rp.net
>>653
XL2でも100万だったけど?
665:デフォルトの名無しさん
18/10/21 18:55:34.10 PdeVN0B9.net
> アプリケーション的には
> 16bits → 64KB 死ぬほど不便
> 32bits → 4GB 快適
> 64bits → 16EB 贅沢できる
8bitは ?
666:
18/10/21 18:59:32.77 gNVlu9Yw.net
>>655
>8bitは ?
ほとんどの 8 ビットCPU のアドレス空間はすでに 16 ビットだったからなあ…
667:デフォルトの名無しさん
18/10/21 19:06:52.55 9MgCOCRf.net
マウントの取り合いになってきたゾ~
668:デフォルトの名無しさん
18/10/21 20:51:33.47 3rYBWp0g.net
>>651
アプリケーション毎にドラッグをどう処理しているか不明だからマウスエミュが確実だと思うけど
669:デフォルトの名無しさん
18/10/21 21:19:33.66 MYahSoZu.net
>>651
URLリンク(docs.microsoft.com)
670:デフォルトの名無しさん
18/10/21 21:43:12.45 CMVET5pn.net
>>655
アドレスが8bitの汎用CPUなんてないんじゃない?
4004でさえアドレスは12bitだそうだ
671:651
18/10/22 01:10:30.37 zMz+R4iM.net
>>659
WM_DROPFILEはすでに試して失敗を確認済みです。
ドラッグ&ドロップの具体例をあげるとVisual Studio 2017 にファイルをドロップして開く処理をやりたいのだけど、
GlobalAlloc()、GlobalLock()、GlobalUnlock() などで作ったhDropをPostMessage(WM_DROPFILE)しているのだけど、まったく変化なし。
メモ帳notepad.exeの場合はPostMessage(WM_DROPFILE)で開けたのですが、VS2017と何が違うのやら。
672:デフォルトの名無しさん
18/10/22 02:10:39.32 T6zy7H5q.net
WM_DROPFILEの他に、OLE Drag&Dropもあるでよ
673:デフォルトの名無しさん
18/10/22 12:32:01.71 uugU0jx6.net
PIC のアドレスって何bitだっけ
68xx の memory mapped register とかは 8bit か
そもそもどうでもいい
674:デフォルトの名無しさん
18/10/22 14:14:29.65 2rAhHCnw.net
>>648がネタだったらどうでもいいのだが
16bitのWindows3.1でも 1Mを越えるメモリーは使えたし、
32bitのWindowsのアプリケーションのメモリー空間は32bitではないし
64bitのWindowsのアプリケーションのメモリー空間は64bitではない
675:デフォルトの名無しさん
18/10/22 15:48:26.25 H1W4+XYR.net
アセンブラで書いてるのかω
676:デフォルトの名無しさん
18/10/22 18:19:05.88 x0pcGzlw.net
8bit→16bit 前世代の256倍
16bit→32bit 前世代の65536倍
32bit→64bit 前世代の4294967296倍
64bit→128bit 前世代の18446744073709551616倍
で各時代のジャンプしてる倍数が全然リニアじゃない
128bitは俺らが生きてる間に実現しない
677:デフォルトの名無しさん
18/10/22 18:27:51.91 x0pcGzlw.net
つまりは
8bit倍→16bit倍→32bit倍→64bit倍 とくるから
だんだん間隔が長くなって正常
64bit(前世代の32bit倍)ですら途方もなくて持て余す(実際48bit)のに
64bit倍なんてのは途方もないものはどうしようもない
永遠に到達しないと思っても問題ないくらいに天文学的数値
678:デフォルトの名無しさん
18/10/22 18:38:09.95 N4Dlk9u9.net
そうでもない
進化は指数関数的に変化するから
679:デフォルトの名無しさん
18/10/22 18:44:02.73 VafFZz5P.net
CPU取り扱いビット数は、なにもメモリー空間だけの問題じゃないと思うが。
なんにしても、ないもの語るのは不毛な話だわ。
680:デフォルトの名無しさん
18/10/22 19:04:08.99 +9ubm+fa.net
64bit増毛
681:デフォルトの名無しさん
18/10/22 19:06:40.33 x0pcGzlw.net
CPUのビット数と言ったらやっぱりメモリ空間だろ
俺らに関係する互換性の意味でもさ
>>668
bit数が一つ増えると2倍になるが、そのbit数も2倍で増やしていくから
指数関数の指数関数でとんでもない速度で増加する
一方でムーアの法則はただの指数関数だから
割り算すると指数関数が残る
というのが>>666-667の説明
682:デフォルトの名無しさん
18/10/22 22:15:29.36 iXt7ySqh.net
さすがに64bitアドレスを使い切ることは無いべ?
下手すると64bit個の原子は目で見えるサイズじゃないか?
2^64=1.8446744e+19
アボガドロ数=6.0221409e+23/1mol
砂粒くらいはありそうだよな?
683:デフォルトの名無しさん
18/10/22 22:22:39.79 haEJCmq/.net
みんながそう思ったら、IPv6は128bitにしなかっただろうね :-p
684:デフォルトの名無しさん
18/10/22 23:05:44.67 CgLRMpn3.net
過去からbit数が上がる際にはメモリー空間に限定した話ではなくて
「パフォーマンスが上がる」というまずは大ざっぱな喧伝がなされてた
メモリー空間はもちろん広がるが、そんな限定的な事じゃない様々な性能アップ要素で
話がされたもので、今になってメモリー空間だけに絞った話にしかならないのは
その話している人の経験や視野が狭すぎるのが原因ではなかろうか
685:デフォルトの名無しさん
18/10/22 23:08:02.77 1Kkbm3du.net
>>664
アプリケーションの話をしてんだから
8086 死ぬほど不便 あってるじゃん
32bitのWindowsのアプリケーションのメモリー空間は32bitじゃん?
36bit使える?32bitアプリが。
686:デフォルトの名無しさん
18/10/23 01:54:45.89 WBybiFHu.net
>>674
80286とi386だと、クロックが同じだと80286の方が速いこともあったよ?
687:デフォルトの名無しさん
18/10/23 02:55:48.42 sn2WQhnj.net
アーキテクチャや最適化とかあらゆる要素を全く無視して
一部だけ切り取って主題の否定に終始しておけば勝つから頑張れ
688:664
18/10/23 10:09:02.12 GIVzaW28.net
>>675
Windows3.1は8086では動かない
多くの32bit Windowsアプリケーションのメモリー空間は 2G (31bits)
689:デフォルトの名無しさん
18/10/23 11:47:28.84 hJha4BQY.net
何でCPUのbit数の話がメモリのサイズ限定になるってそりゃ当たり前ここはプログラム板だから
ポインタのサイズがいくらになるかが互換性の面で最大限問題なんだよ
互換性の面でな
690:デフォルトの名無しさん
18/10/23 11:49:19.92 hJha4BQY.net
しかもここはWin32APIのスレで
128bitのWinAPIはいつ出るかって話だから
ポインタのサイズ=メモリ空間のサイズの
話になっていくのは当たり前
691:デフォルトの名無しさん
18/10/23 12:48:48.94 joSIbJ7d.net
>>675
128bitマシンがあっても
FDDだったら死ぬほど不便だな
692:デフォルトの名無しさん
18/10/23 15:26:03.23 WBybiFHu.net
>>681
オンラインストレージもすべてアドレッシングされてるような美来を考えると、
そんなに不便でもないような気も少し。
693:デフォルトの名無しさん
18/10/23 15:28:44.02 sn2WQhnj.net
>>679-680
> 何でCPUのbit数の話がメモリのサイズ限定になるってそりゃ当たり前ここはプログラム板だから
プログラムの話でCPUの基本であるアセンブラ・命令セット・レジストリやアーキテクチャなどをすっぱり抜く意味はなんですか。
> 128bitのWinAPIはいつ出るかって話だから
>>636-640
「Win32APIのサポートはいつまでか」~
から、
「128bit CPU・OSが出たら」~
の話であって、128bitのWinAPIはいつ出るかって話ではありません。
しかし、「128bit CPU・OSが出たら」に対してメモリマップの問題だと言い出したのは>>645です。
この主張に対して、メモリ限定の話になっているのがおかしいというのが本反論です。
あくまでも「128bit CPU・OSが出たら」が基本の話で、あなたの言う「128bitのWinAPI」は
話の本筋ではありませんし、そもそも話が出ていません。
アドレッシングの話題は話題でやればいいですが、これを論拠に「だから次はない」
なんてのはナンセンスというだけの話です。
694:デフォルトの名無しさん
18/10/23 16:08:56.16 hJha4BQY.net
レジスタ長やら命令セットの話なら既にAVX512とかがあるでしょ
ただこれとWin32APIは関係ないでしょ?
x64が続く限りWin32APIのサポートがずっとあるのは明白だし
(あえて命令セットを変える意味がないでしょ・・・何の意味が?)
もし変えるとしたら128bit化の時だろうけど
まず生きてる間には来ないよねって話でしょ
695:デフォルトの名無しさん
18/10/23 16:18:21.83 hJha4BQY.net
ちなみに128bit化に伴って32bitプロセスがサポートされなくなる可能性は有る
何故なら128bitは100年後か1000年後かあるいは永遠に来ないか
そのぐらいの未来になったら32bitプロセスはすっかりレガシーになってて
サポートする意味が無いかもしれん、わからんがな
ただそんな未来は生きてる間に来そうにない、という事で
Win32APIのサポートが無くなることはないだろうという事を述べておる
696:デフォルトの名無しさん
18/10/23 17:00:05.35 yFsvvFWj.net
>生きてる間には来ない
来たらどうするか(どうなるか)って話をしてるんだろ
空気読めないアスペか?
697:デフォルトの名無しさん
18/10/23 17:40:29.64 GIVzaW28.net
I/Oがすべてマッピングされている世界はたぶんたのしい
698:デフォルトの名無しさん
18/10/23 17:47:11.62 POYrFqPG.net
PCIとかはメモリ空間にマッピングされているよね
699:デフォルトの名無しさん
18/10/23 17:55:28.41 hJha4BQY.net
計算したら来ないし
遠い未来すぎて今と状況が違いすぎるからなんとも
結局は32bitをサポートするかは技術的というより時間的要因とうか周りからの要求で決まるわけで
例えばもし10年後に128bitになるなら32bitをサポートするようにCPUを作るだろうし
100年後だったらもはやレガシーすぎてサポートしないかもだし
(その場合はソフトエミュレーションかな)
結局は問題ないだろうということ
俺らが困らないようにしてくれるさ
IntelがItaniumを作って広げようとしても、AMDがx86作ってそっちが選ばれたしな
互換が無くなって一番困るのは俺らよりマイクロソフトだから何とかしてくれるのだわ
700:デフォルトの名無しさん
18/10/23 17:58:27.40 hJha4BQY.net
ただ、Windowsが無くなればWin32APIも無くなるが。。。
701:デフォルトの名無しさん
18/10/23 18:15:44.57 d491RiZs.net
> レジスタ長やら命令セットの話なら既にAVX512とかがあるでしょ
AVXのときにAVX512なんて絶対来ないとか言ってたか?
次がどうなるとお前が決める事ではない
> ただこれとWin32APIは関係ないでしょ?
関係ないからこそWin32APIだけの話題で次があるないを確定づける論拠にするのに意味がない
702:デフォルトの名無しさん
18/10/23 19:35:50.85 bNdv7B9n.net
ポインタのサイズが互換性において何の問題が?
703:デフォルトの名無しさん
18/10/23 20:21:56.29 tecJ1BiK.net
32/64だとポインタをDWORDに放り込んで処理してるのとかあるからな
704:デフォルトの名無しさん
18/10/23 23:44:40.09 volyHHZE.net
window handleとかはx64だと64bit幅だけど、wow64でもそのまま扱えるように32bit内の値しか設定されないとかあるね。
705:687
18/10/24 06:38:30.05 UmzQGEnh.net
>>682が書いているように
I/Oの中身がすべてアドレスでとれるようなマッピングのこと
他のPCもまるごとアドレシングされているような世界
706:デフォルトの名無しさん
18/10/24 11:37:09.95 XOgiiIOy.net
>>692-693
rubyは困りそうω
707:デフォルトの名無しさん
18/10/24 13:36:44.56 42dinMX8.net
>>696
perl もだよ。
perlでライブラリWin32APIで構造体をマッピングする場合、
構造体のメンバー変数のアラインメントを自力で解決しなければならず、
32bit版と64bit版でオフセットを適切に切り替えるコードが必要。
708:
18/10/25 00:37:44.65 yGYVJ0zR.net
http://wisdom.sakura.ne.jp/system/
709:デフォルトの名無しさん
18/10/25 11:37:51.73 5Cy/pQlU.net
えらい古いな
っていうか 赤坂玲音 って糞筆者の筆頭じゃねーか
QZ って 赤坂玲音 だったのか?
710:デフォルトの名無しさん
18/10/27 13:09:18.62 NcyVMn+k.net
今や当たり前のようになった入力補完候補の動的羅列を従来のコンボボックスのドロップダウンリストでやってみた。
作成済みコンボボックスは途中でオーナードローにスタイル変更できないので、毎回リストを再構築することにした。
ドロップダウンリストの再構築に時間がかかっているように見えたので、
試しにリストをSetRedraw(FALSE)で描画せずに再構築したところ、まったく時間がかからなくなった。
リストアイテムに追加していく処理のたびに描画で重くなっていただけだった。
結論:
ドロップダウンリストの動的変更はSetRedraw(FALSE)で見かけ上は高速に実行可能。
リスト再構築が終わったらSetRedraw(TRUE)で再び描画できるようにして RedrawWindow() などを呼べばOK。
711:デフォルトの名無しさん
18/10/27 13:29:57.46 R2aCZi1a.net
おめ子
712:デフォルトの名無しさん
18/10/28 03:50:14.50 2tbaDxKB.net
>> 700 SetRedraw スレチ
713:700
18/10/28 04:05:03.07 y4CTIPMK.net
>>702
別にMFCの話したかったわけじゃないんだが。
リスト破棄とアイテム追加のたびに描画処理が行われるとどうしてもアイテム更新完了が遅くなる。
オーナードローできない汎用のリストコントロールのアイテム更新はSetRedraw()つまりSendMessage(WM_SETREDRAW)で描画抑止すれば高速実行できる、というのが主旨。
714:デフォルトの名無しさん
18/10/28 15:00:14.25 MGLPoTB/.net
>>702
Win32API的には SetWindowRedraw (WM_SETREDRAW) でOK
715:デフォルトの名無しさん
18/10/28 22:57:05.89 G0OjLYsX.net
>>691
違うって
AVXだろうがAVX512だろうがAVX1024だろうが
ただの拡張命令だから何がこようがどうでもよいけど
ポインタのサイズだけは命令セット全体に影響して互換性の面で問題が出るから
プログラマとしてそこが真っ先に気になるのは当たり前だろうよ
そんでポインタのサイズが64bitで足りなくなる事は生きてる間には無さそうということと
今現在64bit版のWin32APIのサポートがあることを合わせて考えて
Win32APIのサポートの心配するより自分の寿命の心配したほうが良いってことに
ただし、将来Windowsが無くなったら知らんが
716:デフォルトの名無しさん
18/10/28 23:18:58.18 VktvRbK2.net
AVXとか持ち出した人自身がどうでもいいとか言い出したよ
717:デフォルトの名無しさん
18/10/28 23:34:05.53 X0Sl4ey0.net
すみません
アナルに今電極を差してみているのですが
どのくらいの電圧が人間の限界なのかがよく分かっていません
参考までにお教え願えませんでしょうか?
718:デフォルトの名無しさん
18/10/28 23:46:07.82 sr3fygGC.net
>>707 今差しているんだろ? 限界になるまで電圧上げてみればいい
720:デフォルトの名無しさん
18/10/29 03:39:30.92 syL/ZpQ2.net
電流か
721:デフォルトの名無しさん
18/10/29 11:33:26.98 VxCr7qKV.net
>Win32APIのサポートの心配するより自分の寿命の心配したほうが良い
どっちも心配
722:
18/10/29 19:36:35.79 MQrExvvX.net
>>699
>赤坂玲音 って糞筆者の筆頭
kwsk
723:デフォルトの名無しさん
18/10/29 23:04:33.26 /SfeOL5O.net
何かプリキュアとか好きそうなイメージ
724:デフォルトの名無しさん
18/10/30 14:43:24.71 p4LrBCE7.net
橋本 和明
山本 洋介山
こいつらよりまし
725:デフォルトの名無しさん
18/10/31 00:30:08.49 bv97uCMI.net
東京ミュウミュウ舐めんなよ
726:デフォルトの名無しさん
18/10/31 00:34:00.99 pqSFU9GW.net
サンプルコードにキモさを織り込める偉人だぞ
727:デフォルトの名無しさん
18/10/31 01:20:17.24 OyhA4eFa.net
>>713
1冊じゃないのが許せないよな
赤坂玲音って会社員経験がないんだっけ
確かにそんな感じはする
728:651,661
18/11/04 09:16:05.57 muyEcRRg.net
SendInput() にINPUT配列を渡してドラッグ&ドロップをエミュレートすることで対応できました。配列の要素は以下2つ。
ドラッグ開始位置で MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN
ドロップ位置で MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTUP
mouse_event()と違ってSendInput()はユーザーのマウス操作の影響を受けづらいはずですが、
マウス移動とマウスボタン操作を別のINPUT要素に入れるとユーザーのマウス操作が入り込んでしまうので、要注意でした。
729:
18/11/04 10:52:13.06 4sZQO68Y.net
>>716
>赤坂玲音って会社員経験がないんだっけ
書籍を執筆するのに会社員経験は必要ですか?
730:デフォルトの名無しさん
18/11/04 11:18:54.43 kSTg14OV.net
いるわけねーだろ。バカかよw
って馬鹿だからいつまでもくだらない話題ひっぱってんだろうな
731:デフォルトの名無しさん
18/11/04 13:01:34.19 cd0AZv6K.net
GetMessageの戻り値をちゃんと調べる良識人やぞ
732:デフォルトの名無しさん
18/11/04 13:46:25.24 izn20/on.net
GetMessage…
懐かしの踏み絵ですね
733:デフォルトの名無しさん
18/11/04 14:04:57.01 5RY1Lh2I.net
エラーを調べるには関数を呼びます
734:デフォルトの名無しさん
18/11/04 15:45:01.93 I4L5mfdv.net
せめてヒントを書いとけよ
ヒント:最後のエラーを取得する関数です
とか
735:デフォルトの名無しさん
18/11/04 16:16:20.98 K9FptJr2.net
>>722で通じるからw
736:デフォルトの名無しさん
18/11/04 18:11:10.68 rLQVzKFu.net
MSが保守投げだしたくなる気持ちは判る
737:デフォルトの名無しさん
18/11/04 18:32:10.13 eJWttrBP.net
>>724
w
738:デフォルトの名無しさん
18/11/04 19:09:01.33 I4L5mfdv.net
>>724
www
まいりました
739:
18/11/04 19:41:55.05 4sZQO68Y.net
>>720
>GetMessageの戻り値をちゃんと調べる
当然なのでは?
while(GetMessage(&msg , NULL , 0 , 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
メッセージループを抜けるかどうかは、GetMessage() を調べでもしないかぎり分かりようがないのでは?
740:デフォルトの名無しさん
18/11/04 19:56:38.13 K9FptJr2.net
それバグコードだからw
741:デフォルトの名無しさん
18/11/04 20:20:15.94 izn20/on.net
踏み絵がまだ機能しててワロタ
742:デフォルトの名無しさん
18/11/04 20:46:13.51 cd0AZv6K.net
>>728
ちゃんと調べてないぞ
743:デフォルトの名無しさん
18/11/04 20:50:35.10 h5bAAdgj.net
>>729
釣られんなよ…
744:デフォルトの名無しさん
18/11/04 22:51:52.16 I4L5mfdv.net
-1・・・
745:デフォルトの名無しさん
18/11/05 13:33:52.85 o5QGnfIr.net
while(GetMessage(&msg , NULL , 0 , 0) < 0) {
boolじゃないからな
746:デフォルトの名無しさん
18/11/05 14:30:24.29 frT8bC/+.net
そんなコードばっか書いてるからいつまでも使えないんだよw
747:デフォルトの名無しさん
18/11/05 17:36:34.14 cQ3f3cLB.net
>>734
エラーの時だけループするのが正しいんですね
勉強になります
748:デフォルトの名無しさん
18/11/05 19:35:45.35 7LsLMyD5.net
>>734
ネタなのかマジなのか判断できねー w
749:さまよえる蟻人間
18/11/05 19:41:49.06 l7k9Isvb.net
while(BOOL bRet = GetMessage(&msg , NULL , 0 , 0)) {
if (bRet < 0) {
MessageBox(NULL, TEXT("異常終了してやんのw ぷぷぷ"), NULL, 0);
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
750:デフォルトの名無しさん
18/11/05 20:01:12.60 44ykk/Ua.net
無効ポインタを渡してしまった以外にエラーを起こす事あるか?
751:さまよえる蟻人間
18/11/05 20:02:50.18 6+yTtRut.net
Windows互換を目指すReactOS、
いよいよ明日の夜、リリースです。よろしくね。
752:さまよえる蟻人間
18/11/05 20:09:34.41 l7k9Isvb.net
C/C++では、メッセージループの異常終了に加えてC++の例外と、構造化例外による異常終了があるよ。
753:
18/11/05 21:19:04.73 E6RwMSoz.net
>>740
期待しています!
754:デフォルトの名無しさん
18/11/06 05:22:40.71 ARgE5xEK.net
>>739
そんなもんMSの中の人にしかわからんだろ
755:デフォルトの名無しさん
18/11/06 05:47:46.71 sIfl11dh.net
ざっと見て2つ目の引数で-返るな
756:デフォルトの名無しさん
18/11/06 12:09:16.46 vyXuaWzf.net
while(TRUE){
try{
while(BOOL bRet = GetMessage(&msg , NULL , 0 , 0)) {
if (bRet < 0) {
MessageBox(NULL, TEXT("異常終了してやんのw ぷぷぷ"), NULL, 0);
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}catch(std::exception &e){
MessageBox(NULL, TEXT("例外補足してやんぜw ぷぷぷ"), NULL, 0);
}
}
757:デフォルトの名無しさん
18/11/06 12:43:49.56 sIfl11dh.net
また頭悪いコードw
758:デフォルトの名無しさん
18/11/06 12:56:40.18 N7p2WNxF.net
メッセージループを終了しても永久ループから脱出できない罠
759:デフォルトの名無しさん
18/11/06 13:14:59.49 qdniag2/.net
goto最強
760:デフォルトの名無しさん
18/11/06 15:07:52.54 W/feU5S7.net
std::exception はスレチだし、WndProcから送出してよい例外はWindowsの構造化例外のみだし、送出された構造化例外をWinMainで処理してはいけない
761:デフォルトの名無しさん
18/11/06 17:40:05.44 2Imqjq5w.net
ボケなのマジなのかわからんコードを貼ってるやつはなんなの
762:デフォルトの名無しさん
18/11/06 17:48:14.42 NYh1+GRl.net
真面目に書いてるつもりなんだよ
763:さまよえる蟻人間
18/11/06 17:54:13.46 koMt5OtT.net
異常終了の際にバックアップを作ってくれるのは、親切なんだろうか。
764:デフォルトの名無しさん
18/11/06 19:49:18.62 W/feU5S7.net
半分 中の人
The Old New Thing
When will GetMessage return -1?
URLリンク(blogs.msdn.microsoft.com)
765:デフォルトの名無しさん
18/11/18 16:47:49.39 0OJqhmsU.net
リストボックスのリストアイテムに、游ゴシックの文字列をイタリック(斜体)で右詰めでDrawText()描画すると見切れてしまうのはどうしたらいいですか?
766:デフォルトの名無しさん
18/11/18 17:05:18.33 5HKlow/5.net
owner draw
767:デフォルトの名無しさん
18/11/18 17:16:58.01 0OJqhmsU.net
>>755
CDDS_SUBITEM | CDDS_ITEMPREPAINTで owner drawした結果としてのDrawText()なのですが…
768:754
18/11/18 17:24:06.74 0OJqhmsU.net
描画直前に文字列末尾に半角スペースを追加して見切れないようにする対症療法がまず思いつきます。
DrawText()で斜体フォントを右詰め表示するときに最右文字(日本語や欧州語だと末尾文字)が切れてしまうことがあるのは、既知の現象でしょうか?
769:デフォルトの名無しさん
18/11/18 17:43:56.83 iB0TPElw.net
斜体は必要サイズうまく取得できないからな。別口で取得してそれ使うか、取得値より多少大きくすればいいでしょ
770:さまよえる蟻人間
18/11/18 17:47:51.97 TJFJUOYd.net
斜体のずれの寸法は、tmOverhangだったかな。
771:デフォルトの名無しさん
18/11/18 18:13:41.25 0OJqhmsU.net
>>759
悲報。GetTextMetrics() で得られたtmOverhangはzeroでした。tmItalicはnonzeroが戻ってきているのに。
そんなわけで模範的な解決方法が特にないようなので、文字列末尾に半角スペース追加で対応しようと思います。
772:デフォルトの名無しさん
18/11/18 20:31:51.66 iB0TPElw.net
原因が斜体の必要サイズ取得なんだから、模範的な方がよければそれぐぐれば一発で出るよw
773:デフォルトの名無しさん
18/11/18 23:09:34.60 5HKlow/5.net
取れないって回答になると思うけどね
新APIとか隠し情報がないと無理かと
774:デフォルトの名無しさん
18/11/19 05:02:23.92 vKX2BinB.net
リストボックスに限らず、スタティックコントロールも右詰め・游ゴシック・斜体で末尾文字が見切れてしまう。
他のフォントだと見切れが発生しないフォントも多い。描画APIじゃなくてフォント固有の問題に思える。
あと、「見切れる」という北斗の拳っぽい表現、あまり好きじゃないが適切な表現って他にある?
見切れる(ミキレル)とは - コトバンク
URLリンク(kotobank.jp)
1 テレビ放送や演劇で、本来見えてはいけないものが見えてしまう。「裏方スタッフが―・れる」
2 写真や映像で、フレームに人物などの全体が収まらず、一部が切れている。「集合写真で端の人が―・れる」
775:デフォルトの名無しさん
18/11/19 05:48:21.80 q6cfzVbs.net
URLリンク(www.google.co.jp)斜体+サイズ+取得+windows+api&oq=斜体%E3%80%80サイズ%E3%80%80取得+windows+api
776:デフォルトの名無しさん
18/11/19 13:07:49.59 poEgfl9j.net
>>760
半角スペースで大丈夫かな?
俺はフォントサイズ×0.5くらいを幅に足したわ
777:デフォルトの名無しさん
18/11/19 13:10:21.39 poEgfl9j.net
>>763
「見切れる」で十分通じると思うけどな
778:デフォルトの名無しさん
18/11/19 14:52:36.11 3MOWhUti.net
フォント側データ書き換えないと無理
779:デフォルトの名無しさん
18/11/19 15:36:43.44 yv29DTgI.net
えーそれふぉんと?
780:デフォルトの名無しさん
18/11/19 15:49:16.38 Vi0v2wfh.net
>>768
781:デフォルトの名無しさん
18/11/19 16:01:26.62 vKX2BinB.net
「Palatino Linotype」フォントでHDCにテキスト描画すると星印「★(U+2605)」などの記号が文字化け扱いされて四角になるんだけどどうしたらいい?
Windows 10 October 2018 Update から起きるようになったような気がする。
782:デフォルトの名無しさん
18/11/19 16:55:11.57 DcxQo4X/.net
MBCとかUNICODEとか?
783:デフォルトの名無しさん
18/11/19 17:13:53.40 RxTglLMs.net
そもそもそのフォントのそのコードが定義されてるのか?
昔は定義されてたけど今はされてないとかじゃないの
784:770
18/11/20 07:34:02.29 FIdfDS6L.net
以下に再現プログラムのC++ソースをアップロードしました。
URLリンク(ideone.com)
各フォントで「★test☆テスト」という文字列を表示するWinMainエントリのプログラムです。
「テスト」を表示できるのに「★」や「☆」を表示できないフォントがたくさんあるように思います。
評価やご助言のほどお願いいたします。 m(_ _)m
785:デフォルトの名無しさん
18/11/20 07:45:01.17 XdMfHhgY.net
定義されてるかどうか確かめたのか?
単にその文字が定義されてないだけだろ
786:デフォルトの名無しさん
18/11/20 07:49:45.64 FIdfDS6L.net
>>774
文字が定義されているか確かめるにはどうしたらよいですか?
787:デフォルトの名無しさん
18/11/20 09:26:40.38 c9mHPamo.net
英字フォントでは★などはないんじゃないの
windowsに最初から入ってる文字コード表アプリで見てみ
Palatino Linotypeには登録されてない
788:デフォルトの名無しさん
18/11/20 09:36:43.33 FIdfDS6L.net
>>776
なるほど。回答ありがとうございます。
記号である★や☆を表示できないのにカタカナや漢字を表示できるのですが、
ご紹介いただいた文字コード表との整合性についてはどうなっているのでしょうか。
789:デフォルトの名無しさん
18/11/20 09:52:35.34 XdMfHhgY.net
代替フォントが使われるけど、デフォルトはかなり適当だからきちんと^やりたいなら一文字ずつチェックして描画
790:デフォルトの名無しさん
18/11/20 10:07:40.17 FIdfDS6L.net
>>778
プログラム内でチェックするAPIはなんでしょうか?
検索のヒントになるキーワードが分からずこんなこと聞いてすみません。
791:デフォルトの名無しさん
18/11/20 10:11:32.06 XdMfHhgY.net
GetGlyphIndex
792:デフォルトの名無しさん
18/11/20 10:20:12.32 FIdfDS6L.net
>>780
回答ありがとうございます。
GetGlyphIndexは、Win32APIには該当の関数が見当たらないようです。
何かサードパーティーのライブラリでしょうか?
793:デフォルトの名無しさん
18/11/20 10:24:32.94 jmuJusIM.net
freetype
794:デフォルトの名無しさん
18/11/20 10:26:38.56 FIdfDS6L.net
失礼しました。以下関数ですね。
GetGlyphIndices()
URLリンク(msdn.microsoft.com)
795:さまよえる蟻人間
18/11/25 16:05:13.88 1GlBO1DK.net
64-bitの環境でCreateRemoteThreadでAPIフックを試みた。フックは成功したのだが、フックの解除がかなり難しい。
LoadLibraryの戻り値を使う→だめ。
Module32First/NextのhModuleの値を使う→だめ。
DLLの内部からFreeLibraryを呼ぶ→だめ。
796:さまよえる蟻人間
18/11/25 16:09:53.05 1GlBO1DK.net
自分のプロセスの内部ではフックの解除は成功した。
しかし、他のプロセスになるとフックの解除が難しい。
797:デフォルトの名無しさん
18/11/25 16:48:41.81 ItHAeG65.net
どう駄目なのかを書かないのは単なる独り言なのでやめてくれませんかね。
クラッシュしてるんなら以下。
URLリンク(blogs.msdn.microsoft.com)
798:さまよえる蟻人間
18/11/26 21:54:54.87 owLNC83c.net
URLリンク(github.com)
1. CMakeでビルド。
2. Targetプログラムを起動して、出てきたPIDをコピーする。
3. 「Test!」ボタンを押すと、「Unhooked」のメッセージが表示される。
4. Injectorプログラムを起動して、さっきコピーしたPIDを貼り付けて、
「Do Inject!」ボタンをクリックする。「Injected!」のメッセージが表示される。
5. Targetプログラムの「Test!」ボタンを押すと、「Hooked」の
メッセージが表示される。注入成功。
6. Injectorプログラムの「Do Un-Inject!」ボタンをクリックする。
「Un-Injected!」のメッセージが表示される。
7. Targetプログラムの「Test!」ボタンを押すと、「Hooked」の
メッセージが表示される。これを「Unhooked」にしたい。
799:さまよえる蟻人間
18/11/26 22:11:22.95 vT7JWcSC.net
今回はTargetというプログラムを対象に注入しているが、任意のプログラムに対して同じように(MessageBoxA APIをフックして)動作しないといけない。
800:さまよえる蟻人間
18/11/26 22:14:42.78 vT7JWcSC.net
InjectorプログラムからFreeLibraryの呼び出しに成功すれば、フックが元に戻るはずだが、FreeLibraryが失敗しているように見える。
よろしくお願いいたします。
801:さまよえる蟻人間
18/11/26 23:16:21.86 owLNC83c.net
URLリンク(msmania.wordpress.com)
シェルコード書きくけこ?
802:さまよえる蟻人間
18/11/26 23:27:16.40 owLNC83c.net
reflectiveはブルースウィリス判定される恐れあり。他に方法はないのか。
803:デフォルトの名無しさん
18/11/27 10:52:25.21 krSRsG9l.net
なぜインジェクションするためにloadlibraryを皆したがるのか直接メモリにコード書き込めばfreelibraryする必要がないじゃないか。
804:デフォルトの名無しさん
18/11/27 11:06:20.88 cSPHWeDO.net
dllの方が圧倒的に楽だからな
805:さまよえる蟻人間
18/11/27 12:27:02.62 mpDKeVau.net
終了待ちのイベントオブジェクトと、DLLスレッドと、FreeLibraryAndExitThreadで解決した。
ありがとうございました。
806:デフォルトの名無しさん
18/12/05 11:51:42.13 BbScykOp.net
LVM_SUBITEMHITTESTの戻り値の説明に書かれている
「Returns the index of the item or subitem tested」
の意味がよくわからないんですが、
戻り値とLVHITTESTINFOのiItemが異なる値になる可能性はあるのでしょうか。
807:さまよえる蟻人間
18/12/05 13:13:14.97 6bKah/Y1.net
リストビューのサブ項目は、詳細表示のときの最初の列以外の列のテキストで使われる。
808:デフォルトの名無しさん
18/12/05 13:31:27.57 BbScykOp.net
>>796
それ自体は理解しているのですが、
戻り値がアイテムの番号ではなくサブ項目の番号になることがあるのでしょうか。
809:デフォルトの名無しさん
18/12/05 15:00:20.42 Gi6GtpHL.net
iSubItemメンバに値が入る
戻り値およびiItemは今まで通り
810:デフォルトの名無しさん
18/12/05 15:22:34.72 XTelINnE.net
カエル
811:デフォルトの名無しさん
18/12/08 08:51:15.20 lNQUDg2h.net
ReactOSはどうなった?
812:デフォルトの名無しさん
18/12/08 10:18:34.02 uWIwAxnc.net
Reactなし
813:さまよえる蟻人間
18/12/10 14:41:18.82 ILcXe1rk.net
Windows互換を目指すReactOS Part12
スレリンク(os板)
こっちのスレで活動してるよ。暇なら見てね。るんぱっぱ。
814:デフォルトの名無しさん
18/12/27 19:29:05.60 3mpeBFkx.net
wineに頼らないと動かない産廃
815:さまよえる蟻人間
18/12/27 19:45:16.53 xEoyai35.net
>>803
微軟おつ。
816:デフォルトの名無しさん
18/12/27 20:15:23.13 8bFD2Xmo.net
ほんと産廃だよな
なんでwindowsに頼らないとwin32アプリは動かないんだ
817:さまよえる蟻人間
18/12/27 20:32:52.08 xEoyai35.net
ジャバザハット
818:さまよえる蟻人間
18/12/27 21:04:33.87 e6FVPdkR.net
らんらんるー
819:デフォルトの名無しさん
19/01/01 23:36:15.57 ML8jFpoW.net
念のため聞
820:くけどさ、金毘羅とコンパイラどっちが御利益あるかわかってるよね?
821:デフォルトの名無しさん
19/01/01 23:48:35.00 okGaeCMA.net
念のために聞くけどさ、ネタとしてもここに書くつもりじゃなかったよね?
822:デフォルトの名無しさん
19/01/02 12:04:23.94 fpC2xUq7.net
キンピラごぼうの方が御利益ある
823:デフォルトの名無しさん
19/01/06 11:52:07.26 RBr8Qah/.net
ktkr
【Win】 WindowsUpdateで入れなくても良いKBリスト。2018年12月12日まで分
URLリンク(blog.livedoor.jp)
824:デフォルトの名無しさん
19/01/08 21:00:32.75 V1Q/vFq5.net
Windows(上で動作しているアプリ)が鳴らしている音の「生データへのポインタ」
を取得するWin32APIを教えてください。
825:デフォルトの名無しさん
19/01/08 21:03:39.61 V1Q/vFq5.net
812
音データが入っているバッファへのポインタです。
826:デフォルトの名無しさん
19/01/08 21:13:43.96 BVjQZPEf.net
ない
827:デフォルトの名無しさん
19/01/08 21:14:52.46 jpAVboCM.net
dllインジェクションするしかない
828:デフォルトの名無しさん
19/01/08 21:20:13.54 V1Q/vFq5.net
>>814
ありがとうございます。APIとしては用意されていないのですね。
>>815
DLLインジェクション。注射ですか。初めて聞く言葉なので少し調べてみます。
分からなくなったらまた来ます。
目的は、現在発音中の音声のスペクトラムアナライザーを作ることです。
FFT自体はできており、自アプリで鳴らしているWAVデータを処理する
ことまではできていますが、上記のことを実現したいので。