Win32API質問箱 Build124

■ このスレッドは過去ログ倉庫に格納されています
2017/11/11(土) 19:23:00.69ID:TpLoCFAx
Win32APIについての質問はこちらへどうぞ。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

■過去スレ
Win32API質問箱 Build123
http://mevius.2ch.net/test/read.cgi/tech/1475897582/
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
Win32API質問箱 Build121
http://echo.2ch.net/test/read.cgi/tech/1438695290/
Win32API質問箱 Build120
http://echo.2ch.net/test/read.cgi/tech/1428570962/

■関連スレ
Visual Studio 2017 Part4
http://mevius.2ch.net/test/read.cgi/tech/1509244956/
【C++】 DirectX初心者質問スレ Part40 【C】
http://mevius.2ch.net/test/read.cgi/tech/1474782237/
2018/01/14(日) 00:26:50.32ID:TQ+v9n4/
厳密にはWM_CREATEの前にもいくつかメッセージ飛んでくるけどね
2018/01/14(日) 00:44:30.50ID:ekN/OeXo
>>132
了解!そういうのは全部まとめて ::DefWindowProc() に流しちゃっているのでダイジョブです!
134デフォルトの名無しさん
垢版 |
2018/01/14(日) 02:25:37.15ID:yVTJx4nd
この行いらね
HWND hwnd // member instance variable
2018/01/14(日) 08:36:59.72ID:ekN/OeXo
>>134
ごめんなさい >>131 ははおって書いたので、内容が今一つはっきりしなかったこと謝罪いたします。
その行は、自作 Window クラスのメンバとして書いたつもり、Window クラスに hwnd を持たせたいと考えているのです
2018/01/14(日) 16:42:02.47ID:hYyI16IJ
片山先生の MZC4 みたいなのを作ってるわけね
2018/01/14(日) 17:06:39.99ID:ekN/OeXo
>>136
はい
https://github.com/katahiromz/MZC4/blob/master/include/MWindowBase.hpp をみました
私の趣向としては、hwnd は完全に隠蔽したい、そのため WNDCLASS.cbWndExtra をあえて使うことになります
2018/01/15(月) 01:09:31.49ID:rJu9VjYT
cbWndExtra == 0なウィンドウには使えないから、結局、設計思想が間違っている。
2018/01/15(月) 03:14:12.16ID:dcGpNZle
GWLP_USERDATAをライブラリ側で潰してる時点で同レベルだな
2018/01/15(月) 03:19:04.90ID:rJu9VjYT
しかし、ハンドルマップにしたら、コストがかかるんだよな。
2018/01/15(月) 03:40:01.33ID:dcGpNZle
他人に設計思想が間違ってると宣いつつ自分は即座に言い訳
さすがカス山
2018/01/15(月) 08:03:32.90ID:ss1wTrUG
MFCはハンドルマップ
2018/01/15(月) 08:53:13.95ID:SI03IcDF
ATL方式もあるよ
2018/01/18(木) 23:24:20.23ID:hzc1DIOG
ATLは機械語直接いじってジャンプかぁ
2018/01/19(金) 12:47:35.39ID:xkA2S8go
ジャンプmemo
http://blog.trendmicro.co.jp/archives/16735
2018/01/19(金) 16:44:05.34ID:2zY1R7Mw
MSゴシックやMS明朝のフォントで描画するとき、
小さいときはビットマップフォントが使われることは知っているのですが、
常にビットマップフォントを使わないように
CreateFontなどで指定することはできませんか?
2018/01/19(金) 17:25:15.15ID:bZ1P4CsQ
使われることも知らなかったが、小さいとドットが出てくるからビットマップをやめるメリットがなく逆に処理が多くなるデメリットが大きくなるんじゃないか?
2018/01/19(金) 17:43:48.94ID:SC+4wpaQ
DirectWriteだと強制的にヒンティング切れるからそれでイケる
GDIはGetGlyphOutlineでAA付きで書き出すくらいしか知らん
149デフォルトの名無しさん
垢版 |
2018/01/19(金) 17:50:56.78ID:0WIN7azb
24dot x 24dot とかで truetype 描画とかしたいの?
2018/01/19(金) 17:51:10.40ID:H+lB59KU
ワイは大きめのビットマップメモリ領域に一度描画してから、縮小表示という無駄オブ無駄処理しとるやで
2018/01/19(金) 19:13:16.59ID:2v31ru1f
MZC4、ハンドルマップに切り替えできるようになったよ。
https://github.com/katahiromz/MZC4

#define MZC4_HANDLE_MAP
2018/01/19(金) 20:16:32.63ID:2v31ru1f
IPアドレスコントロールのEDIT子ウィンドウがGWLP_USERDATAを使っているみたい。。。
2018/01/19(金) 23:33:33.01ID:SC+4wpaQ
結局、設計思想が間違っていたなカス山
2018/01/19(金) 23:42:37.51ID:2v31ru1f
GWLP_USERDATAを使うのは低コストな選択肢としてアリ。ただし、IPアドレスコントロール内部やユーザー側のコントロールに触れる場合は、
問題が生じる可能性がある、という結論でファイナルアンサー。
155デフォルトの名無しさん
垢版 |
2018/01/20(土) 04:45:27.61ID:kn1Qti/r
extradataはチェインにして使うもんじゃね?
2018/01/20(土) 10:42:21.43ID:eYoKNwxu
>>154
問題が生じる可能性があるけど選択肢としてアリなら
なぜ他人の実装には間違ってるなんてケチつけたんだ?
2018/01/22(月) 11:37:19.82ID:BYAVkCTU
>>147-150
ありがとうございます。
やっぱり簡単にはいかないんですかね。
印刷の処理は今のままでよく、画面上をその印刷イメージに近づけたいので、
DirectWriteの勉強をしてみたいと思います。
2018/01/22(月) 12:42:48.77ID:kH4wUtRw
印刷物をモニターに等倍表示したいんだ!ってわけじゃないだろ?
モニター上に拡大表示すりゃいいじゃん
2018/01/22(月) 20:49:32.77ID:ZoyisMRe
わざわざ小さいときはビットマップフォントを使うのは、
その方が綺麗だからなんだけど
2018/01/22(月) 22:24:40.60ID:CymiFGuu
>>157
>印刷の処理は今のままでよく、画面上をその印刷イメージに近づけたいので
やったことないけど・・・
CreateDC(プリンタドライバ名・・・)
CreateCompatibleDC()
CreateCompatibleBitmap()
でプリンタ互換のメモリデバイスコンテキストを作成し、これに印刷と同じ描画を行った後、
BitBltで画面にコピーするなり、DIBセクションにコピーするなりすれば良いんじゃね?
2018/01/22(月) 22:31:46.76ID:XoG7D2n/
それするとデバイスコンテキストに書き込んだ時に、フォントがビットマップ描画になるから嫌ってんでしょ
そもそもプリンタ自体の解像度とかあるから、ビットマップやめたとこでそれ意味あんのって感じだけどw
2018/01/22(月) 23:19:36.00ID:CymiFGuu
>>161
解像度の高いプリンタではTrueType中のVectorデータ、解像度の低い画面ではTrueType
中のビットマップデータが使われることで、文字幅(→結果的に文字位置)が微妙に違って
しまうのを嫌っているんじゃないかとエスパーした
2018/01/23(火) 00:43:10.75ID:aEarH6Fp
せやからワイが>>150で書いたんや
164デフォルトの名無しさん
垢版 |
2018/01/23(火) 03:11:18.71ID:vxISVnp8
TeX使え
2018/01/23(火) 09:23:53.86ID:8Xy2PdTe
Acrobat Readerは、MSゴシックやMS明朝で画面上の表示が小さいときも
ビットマップフォントは使われないようですし、
やはりビットマップフォントよりも綺麗に見えるので、
これと同じような描画ができないかと思った次第です。
もちろん、AdobeがGDIだけで描いているとは思ってませんが。
2018/01/23(火) 11:56:46.96ID:YgQfJm1f
Instructs the font mapper to choose from only TrueType fonts.
2018/01/23(火) 12:41:24.18ID:Q06yU05c
AdobeはBGRに対応してなくて糞
2018/01/24(水) 16:35:20.95ID:yxm2qYfd
文字コード総合スレ Part11
http://mevius.2ch.net/test/read.cgi/tech/1516629503/
2018/01/30(火) 17:55:13.46ID:SJob4Z7Y
win32api直接叩いてるんですけど、タブオーダーってどうやって設定されるんですか?
多分 CreateWindow 呼んでコントロールを作った順番そのままだと思うんですが、
なんかTABキー押してもフォーカスが移動しないんです
2018/01/30(火) 18:02:35.67ID:h2qX+tcO
モーダルダイアログじゃないと動かないよ
2018/01/30(火) 18:09:59.30ID:XXEBAVhR
モードレスの場合は、メッセージループにIsDialogMessage呼び出しが必要。
2018/01/30(火) 18:19:21.99ID:FAoT3aWr
タブキー押されたらsetfocus
2018/01/30(火) 18:29:42.34ID:SJob4Z7Y
ああー
助かりました
IsDialogMessage でうまくいきました。
余談ですが CreateWindow の呼び出し順とは逆に移動するんですね。
Z手前から奥に向かって移動する感じですかね。
とりあえず後はどうにかなりそうです
2018/01/30(火) 21:54:44.90ID:fLRARGcM
プリプロセッサマクロ値 "_MSC_VER" を知る方法はありませんか?
cuda 9.1 提供のヘッダの #error が反応してしまいます
2018/01/30(火) 22:09:19.27ID:Z73Qxpjd
は?
printfでもしてみればいいだろ
2018/01/30(火) 22:36:28.87ID:5Yx/uuQb
VS2008でも使ってるのか?
2018/01/30(火) 23:33:34.49ID:fLRARGcM
>>175
ありがとうございます、なるほど!
現時点の最新は _MSC_VER = 1912 でまだ cuda が追従できていないようです
https://devtalk.nvidia.com/default/topic/1022648/cuda-9-unsupported-visual-studio-version-error/
2018/01/31(水) 01:14:49.25ID:IFJhRfmg
ズコー
2018/02/02(金) 22:47:25.95ID:0FY9q5SB
dll間でデータを共有するのはdata_segでできるけど
dllAで動的確保したデータ(クラスでメンバ関数有り)をdllBでも使えるようにするには
マッピング以外に何がある?
2018/02/02(金) 23:33:47.71ID:3zbIMbyp
ふつうにポインタ渡せばいいんじゃね?もちろんクラスの定義は一致している前提だけど。
2018/02/03(土) 09:27:06.89ID:KnnmFvy8
ごめんdllA, dllBって書いたけど間違い

正しくはexeAとexeBが同じdllを使ってる状況で
exeAで動的確保して初期化もしたクラス(メンバ関数有り)をexeBのdllでも使いたいんだ
2018/02/03(土) 09:40:28.84ID:qWVkS+Es
ふつうにポインタをdata_segに置くが
2018/02/03(土) 10:55:22.08ID:FhluCmMv
プロセス間で共有したいんだろ?
共有メモリでもなんでも使ってデータ本体を保管
データ本体にアクセスするクラスを作ってそれはプロセス内でのみ利用すりゃいい
要はクラスそのものはプロセス間で利用しようと考えない
2018/02/03(土) 15:00:03.34ID:KnnmFvy8
>>182
それだとメンバ関数実行でexeBのdllが異常終了する

>>183
やっぱそういうのしかないんかな
ありがとう
2018/02/03(土) 15:12:28.48ID:Pk3rL+mD
クラスにnew と new[] 定義すればエラーにならないでしょ?
186デフォルトの名無しさん
垢版 |
2018/02/08(木) 23:07:42.59ID:C1oz7nNF
Windowsがシャットダウンした時刻を記録したいんだけど、
1秒おきにファイルに時刻を書き込み続けるしかないかね?
2018/02/08(木) 23:27:36.93ID:UuuqIveG
カーネルエラーで落ちたのでなければイベントログにシャットダウン時刻が書いてあるはずだが
2018/02/08(木) 23:53:21.80ID:PXTihGAK
VS2015とVS2017のsplitpathがMBCS対応してないんだけどどういうこと?
2018/02/09(金) 02:23:09.51ID:E+KPBbPo
>>186
イベントログの他には
WM_QUERYENDSESSION
WM_ENDSESSION
WM_POWERBROADCAST
2018/02/09(金) 03:30:07.89ID:dI/VZTKe
初歩的な内容で申し訳ないのですが、、、

親ウィンドウと子ウィンドウがあります。
子ウィンドウは自分でCreateWindow()を使い、親のウィンドウハンドルを指定して作っています。

そこで質問ですが、親ウィンドウでWM_DESTROYを処理する際に、子ウィンドウに対して
明示的にDestroyWindow()を一々実行する必要はありますか?
自分としては子ウィンドウは親の破棄に伴って暗黙のうちに破棄されると勝手に解釈しているのですが、
間違いがあればご指摘ください。
2018/02/09(金) 04:33:00.77ID:dI/VZTKe
確認不足でした。
DestroyWindowをしなくてもちゃんと破棄されていましたね。
WM_DESTROYが来ていました。
すみませんでした。
192デフォルトの名無しさん
垢版 |
2018/02/09(金) 07:08:12.16ID:h2mjWzgv
わかればよろしい
2018/02/13(火) 21:23:21.68ID:KbLCHvlc
ウィンドウサイズが変更禁止されているウィンドウを強制的にサイズ変更する方法を教えてください
2018/02/13(火) 21:29:53.35ID:RAq02Plv
聞く前にとりあえずあっちのスレの>>134をやったらどうだ?
2018/02/14(水) 14:48:35.52ID:634XtcmA
http://katahiromz.web.fc2.com/re/ja
https://github.com/katahiromz/RisohEditor
リソーエディタ、一応完成したから、使ってやってな。無料。
2018/02/14(水) 15:06:14.81ID:634XtcmA
>>195
電子署名付けろよ、ばーか
2018/02/14(水) 15:07:22.57ID:634XtcmA
>>195
電子産廃を作らないで下さい
2018/02/14(水) 15:14:32.79ID:634XtcmA
>>195
チョコもらわないで、何作ってんだよ、ヒマジン。

ネトウヨ超きも。
2018/02/14(水) 15:15:29.03ID:634XtcmA
Wwwwwwwwww

受けるw
2018/02/14(水) 15:29:58.12ID:634XtcmA
>>196-199
おまいら全員、逝ってよし。
2018/02/20(火) 18:27:56.31ID:zJihYzXI
ツリービューに対してTVS_DISABLEDRAGDROPを設定してるのに、
右ドラッグをするとTVN_BEGINRDRAGが発生するのは仕様なのでしょうか。

しかもそのまま右ドラッグ操作をすると、
TVS_DISABLEDRAGDROPを設定していないときの左ドラッグと同じように、
選択位置が元に戻ってしまい、とても格好悪い動きになります。

左右どちらもドラッグ操作を無効にしたい場合、
左はTVS_DISABLEDRAGDROPで、右は自力でという変な方法しかないのでしょうか。
それとも、なにか他にスタイルがあるのでしょうか。
2018/02/22(木) 08:18:20.63ID:VsrLFn20
モーダルダイアログの子ウィンドウとしてモードレスダイアログを使用している場合
モードレスダイアログをキー操作するにはどうすればいいですか?
IsDialogMessageでメッセージを捕捉できません
そもそもメッセージが発生しません
2018/02/22(木) 09:20:57.85ID:iVztdi8j
親に全部メッセージ来てないか
2018/02/22(木) 09:55:46.39ID:VsrLFn20
試しに
モーダルダイアログ(親)のPushButtonAと
モードレスダイアログ(子)のPushButtonBを同じコントロールIDにしてみましたが
ボタンBのメッセージは子にしか来ていませんでした
2018/02/22(木) 10:21:48.34ID:iVztdi8j
ああ、キー操作ね・・・・

親もモードレスにしてメッセージループ回せばいいんじゃないかな
なお、Enterは(略
2018/02/22(木) 10:44:51.48ID:cQEFrnWP
キー操作ならDS_CONTROLをつければすべて自動でやってくれる。
2018/02/22(木) 12:18:08.54ID:VsrLFn20
ありがとうございます
親はモーダルダイアログ固定でお願いします

子にDS_CONTROLスタイルを追加で操作はできるようになりましたが
ボタン1 ボタン2
この状態でボタン2で方向キー右を押したらボタン1がアクティブに
ボタン1で方向キー左を押したらボタン2がアクティブになるようにできませんか?

今の状態だとボタン1で左やボタン2で右を押すと親ダイアログのコントロールにフォーカスがうつってしまいます
2018/02/22(木) 12:31:01.78ID:VsrLFn20
補足です
ボタン1にWS_GROUPは追加してあります
209206
垢版 |
2018/02/22(木) 13:12:13.54ID:cQEFrnWP
WS_EX_CONTROLPARENT もつけてみてください。
2018/02/22(木) 13:52:52.23ID:VsrLFn20
ありがとうございます
親に追加したら親のコントロールから子のコントロールへ移動ができるようにはなりましたが
>>207の状況は変化無しでした

ボタン1 -> ボタン2 -> 親のコントロール ではなく
ボタン1 -> ボタン2 -> ボタン1 -> ボタン2 のようにフォーカス移動させられませんか?
211206
垢版 |
2018/02/22(木) 14:00:44.86ID:cQEFrnWP
親だけでなく子ダイアログにもつけてください。
2018/02/22(木) 14:40:26.34ID:VsrLFn20
ありがとうございます
やっぱりダメでした
2018/02/22(木) 15:28:49.61ID:McDcHlyx
>>210
ボタン2の次にフォーカスが来るコントロール(親ダイアログ側)にも
WS_GROUPを付ければよいのでは
2018/02/22(木) 16:27:58.24ID:VsrLFn20
ありがとうございます

WS_GROUPを追加するとグループ開始で次のWS_GROUPが見つかるとそれ以降は別グループの繰り返しですよね
同ダイアログ内では問題無いですが
今回の条件では親コントロールに追加していてもフォーカスが親コントロールにうつってしまいます
2018/02/23(金) 15:46:28.17ID:0tA6Y4q1
wsh 使って Environ("Volatile") とかの環境変数書き換えたあと
WM_SETTINGCHANGE 呼べば親プロセスの環境変数書き換え出来ますか?
2018/02/23(金) 16:12:30.32ID:YZ7AwSGF
別プロセスならできないだろ
やるならレジストリいじってだろうが、変更適用されるかはアプリ次第
2018/02/23(金) 17:02:23.92ID:0tA6Y4q1
WM_SETTINGCHANGE は別プロセスには届かないのですね
2018/02/23(金) 17:17:45.85ID:0tA6Y4q1
こんなのもありました
http://www.garbagecollect.jp/~usa/d/200803a.html
2018/02/24(土) 21:02:04.05ID:fc+Pe6yo
IMEによる日本語入力の際、今時よくある予測変換ウィンドウを自アプリでは
表示しないようにしたいのですが、なにかいい方法はないでしょうか。

ImmSetCandidateWindow()を試してみましたが、どのような値を入れても
通常の変換候補ウィンドウすら制御できず(何も変化無し)でした。

OSはWindows8.1です。
よろしくお願いします。
2018/02/25(日) 03:02:30.21ID:eoTI2sxe
Win32APIの範疇ではない
2018/02/25(日) 03:26:29.95ID:ghAeZDtA
そうではない根拠と該当範疇をどうぞ
2018/02/25(日) 08:57:28.39ID:FvDCdjOy
MSIMEとGoogleIMEとかで違ったと思う(だからやるならターゲットIMEごとにウインドウ捕まえて消すことになるんじゃないかな)
そういう意味じゃ範疇じゃないな
でも使うのはwin32だから範疇だろ
2018/02/25(日) 09:03:25.97ID:eoTI2sxe
なにその俺様が使うからなんでもここでOK論理
2018/02/25(日) 09:52:19.82ID:FvDCdjOy
>>221に答えろよw
225デフォルトの名無しさん
垢版 |
2018/02/25(日) 15:11:39.99ID:DMbXpP0c
おまいらキーロガーほんと好きだな
2018/02/25(日) 16:41:54.90ID:eoTI2sxe
>>224
そのくらい自分で調べなよ
2018/02/25(日) 17:18:38.57ID:ghAeZDtA
IMM系列はWin32APIだろ
小学生は黙ってろよ
228219
垢版 |
2018/02/25(日) 19:33:33.45ID:WLgWOXVj
今やっていることは、仮想キーボードを使って文字入力する画面があるのですが、
入力中に予測変換候補ウィンドウが仮想キーボードに被ってしまって仮想キーボードの
キーが押せなくなる(もちろん移動すればいいですが)問題の回避を検討しています。

文字入力中に EnumWindow()等を使って調べてみましたが、関係しそうなのは
クラス名 CiceroUIWndFrame, MSCTFIME Composition, mscandui40.* あたりで、
mscandui40.candidate を DestroyWindow()すれば予測変換・変換候補ウィンドウともに
非表示にはできました。

しかし mscandui40.candidate は MS-IME 使用時のみしか捕まえられませんし、
MS-IME のバージョンでクラス名が変わってしまう可能性もあるのでやり方を変えました。

というか、正攻法では Imm系の処理で行けそうです。
229219
垢版 |
2018/02/25(日) 19:35:36.97ID:WLgWOXVj
WM_IME_NOTIFY メッセージで IMN_OPENCANDIDATE を処理すれば何とかなりそうではあります。
ググってC#のサンプルは見つけましたが、それは上記のメッセージを捕まえてその後処理せずに
(ように見える)いるだけみたいです。

しかし、こちらはC/C++なのでそのメッセージを捕まえて、処理せずリターンしている
(CallWindowProc()を処理しない)ものの変換候補ウィンドウが表示されてしまいます。

解決は近そうなのですが、ご助言お願いいたします。
230219
垢版 |
2018/02/25(日) 19:37:31.33ID:WLgWOXVj
見つけたサイトの短縮URLを貼ると書き込めなかったので、検索ワードを貼ります。
「IMEの変換ウィンドウを表示しないようにする」
(ページタイトルそのまま)
2018/02/25(日) 19:38:41.80ID:eoTI2sxe
>>229
だからWin32APIじゃないってのに
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況