[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 11/11 09:49 / Filesize : 261 KB / Number-of Response : 1032
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build122



1 名前:デフォルトの名無しさん(dion軍) 転載ダメ mailto:ageteoffagete [2016/01/05(火) 19:03:39.12 ID:IesHwkgH.net]
Win32APIについての質問はこちらへどうぞ。

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

■過去スレ
Win32API質問箱 Build121 [転載禁止](c)2ch.net
peace.2ch.net/test/read.cgi/tech/1438695290/

876 名前:デフォルトの名無しさん mailto:sage [2016/09/19(月) 17:17:06.88 ID:K5hghQdn.net]
>>850
>どうしてこうなった。
自己顕示欲を満たすだけの気色の悪い>>850みたいなのがいるからじゃね

877 名前:デフォルトの名無しさん mailto:sage [2016/09/19(月) 17:26:33.45 ID:x6oYh1MF.net]
じゃあウザいだけです時代に戻そうか

878 名前:デフォルトの名無しさん mailto:sage [2016/09/19(月) 17:43:22.23 ID:VrFlYlJN.net]
Win32APIが枯れていて、不具合が発生していない。
使用ユーザーも熟知していて、質問する必要がない。

理想的な状態?

879 名前:デフォルトの名無しさん [2016/09/19(月) 18:57:36.68 ID:4df2MR9Z.net]
倦怠期

880 名前:デフォルトの名無しさん [2016/09/20(火) 01:18:12.66 ID:0Myqw3Nm.net]
>>852
そこだけ戻したところでまともな回答者はもう戻ってこないだろw

881 名前:デフォルトの名無しさん mailto:sage [2016/09/20(火) 08:34:28.90 ID:KnjyA1F8.net]
>>849
こっちでも再現できたわ
Terminal 14が画像と同じになった
他の等幅フォントでも再現されたけど
MS ゴシック、MS 明朝なら大丈夫みたい

メモ帳では再現されないのは謎だけどな

882 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 18:38:12.75 ID:2/iKekT4.net]
>メモ帳では再現されないのは謎だけどな
メモ帳のソースコードに書いてある

883 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 20:53:42.44 ID:WRzjrZbQ.net]
>>841
c#使い始めたら便利なのでもうwin32でgui作成する気にはなれないんですが今でもwin32使う理由は何?

884 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 21:03:14.46 ID:O8zsEtDk.net]
GetMessageループで小細工をしたい時など
C#でGetMessageループにフック噛ます方法があるなら教えてよ
とても興味深い



885 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 22:56:28.21 ID:SIQDhLUp.net]
>>859
小細工って、ウインドウププロージャの書き換えで

886 名前:はできないこと? []
[ここ壊れてます]

887 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 23:19:35.96 ID:O8zsEtDk.net]
GetMessageじゃなくてPeekMessageにするとか
TranslateMessageの呼び出しを止めるとかはウィンドウプロシージャからでは不可能

888 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 23:43:59.21 ID:VY6IcR6g.net]
>>861
そういうのって、どういう時に使うの。

889 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 23:46:34.12 ID:YZL270gC.net]
メインとループなんて毎回コピペだが、
いざとなったら書き換えられるという安心感がある
そして永遠に書き換えない

890 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 02:22:17.57 ID:BRx1Bv8g.net]
win32でGuiが大変とか言ってる人ってリソースファイル使わずに作ろうとしてるとか?

891 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 02:24:52.16 ID:ds9UeOri.net]
>>864
ばーか

892 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 02:30:08.84 ID:saKRBDTg.net]
>>864
誰が大変なんて言った?
情報が多い分、楽だよな

893 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 02:39:21.74 ID:mitwVgUL.net]
C#が便利でwin32に戻れないって、かつてVBやMFC使いも言ってましたね

894 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 05:33:10.99 ID:gyLxLatL.net]
かつてのVBはおまじない宣言してAPI叩かないと使い物にならなかったわけだが



895 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 06:00:54.98 ID:saKRBDTg.net]
>>867
そうか?
お前さんだけじゃね?

c#の何が便利なの

896 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 09:08:20.92 ID:enqfOrPh.net]
>>858
win32使ってないのにこのスレにいる理由は何?
便利(win32は難しすぎた)だろw

897 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 11:54:27.95 ID:wKjxcHVF.net]
>c#使い始めたら便利なのでも
使い始める前まではWin32API使っていたんだろ

>今でもwin32使う理由は何?
C#を使い始めていないということだ

898 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 12:50:29.63 ID:ad+iWZXx.net]
>>858
Win32でリソーススクリプトを直叩きしてGUIを作るの楽しいよ
あとWin32API使える俺スゲーと思えるとかしょーもないアホな理由

と言いつつ最近はGUIのアプリやツールの制作ではC#ばかり使ってるわ
やっぱ動けばいいものをサクッと手早く作りたいときはC#だな

899 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 13:06:17.33 ID:enqfOrPh.net]
メインとループ毎回コピペって
プロジェクト作成時に最少構成自動で作成するようにしてないんか?
VC++Expressですらできるのに

900 名前:デフォルトの名無しさん [2016/09/22(木) 13:36:00.69 ID:ad+iWZXx.net]
>>873
俺は.NETのFormクラス風のWndクラス作ってあるからそれ使う
そのほかバージョン情報クラスとかいろいろ簡単に使えるクラスを作って置いてる

901 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 14:14:25.34 ID:sh3eyHdy.net]
俺はむしろ反対で
中途半端なラップなぞ要らないという判断

定型文を登録しておいて
いつでもクリップボードに転送できる系のアプリ
とか使うとよいと思うよ

902 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 15:03:14.08 ID:Ob4qBdWH.net]
>プロジェクト作成時に最少構成自動で作成

コピペでも対して手間変わらんし
VS/VC++でGUIからlibpathとかいじるの面倒だし

903 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 15:17:17.17 ID:enqfOrPh.net]
>>876
いやプロジェクト作成時に選択するテンプレート自体を自分で作るから
path変更すらいらん

904 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 16:40:58.43 ID:c0uylKlH.net]
>>871
C#でもクラスライブラリが用意されていない機能で必要ならWin32API使うぞ。
GUI作るだけならほとんど出番はないけど。



905 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 19:59:29.23 ID:jmlT4pdX.net]
カスタムウィザードって作れなかったか?

906 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 08:44:30.83 ID:hdVg5emL.net]
>>879
それはExpressじゃ無理だな
Expressは自分でフォルダ構成してテンプレート保存場所に配置する必要がある
言い換えればExpressでも自分でやれば後はカスタムウィザードみたいな事ができる

907 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 11:49:16.53 ID:Bla+oVr/.net]
>>862
俺の質問に答

908 名前:えたら答えてやるよ
C#でできるのか?できないのか?
[]
[ここ壊れてます]

909 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 11:51:09.00 ID:Bla+oVr/.net]
Pythonスレにも書いたけど、リモートプロセスに侵入してウィンドウをサブクラス化するなんてのも
C#ではやれない芸当でしょうね

910 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 13:08:18.98 ID:rYmTtd8q.net]
>>881
それ(>>861)は出来ないかな。


>>882
出来るけど。

Cross Process Subclassing
www.codeproject.com/Articles/5264/Cross-Process-Subclassing

911 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 13:28:57.30 ID:cTcmD9zg.net]
C#ちゅーかどのGUIフレームワーク使うのかにもよるんじゃね
WinFormsならMFCライクな挙動のApplication.Idleがあるからその中で
PeekMessage呼び出しつつアクティブなゲームループ回したりとか

912 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 14:32:50.11 ID:1AYxo37g.net]
>>883

他人が作ったものをドヤ顔で「出来るけど」ってwwww

913 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 14:39:27.60 ID:laz5P8lZ.net]
Cross Process Subclassing
www.codeproject.com/Articles/5264/Cross-Process-Subclassing

これ見えてるコードはC#に見えないけど、C#のプロジェクトなのか?

914 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 14:50:27.96 ID:e3KOFFwu.net]
>>886
どうしてC#だと思った?



915 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 15:23:09.32 ID:laz5P8lZ.net]
>C#ではやれない芸当でしょうね
と言ってる>>882に対してドヤ顔で
>出来るけど。
ってるじゃん

916 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 18:14:16.83 ID:MUYZ+xZC.net]
なんだ?
Win32板がC#板になってる。

まあいいけど。

917 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 18:14:40.82 ID:MUYZ+xZC.net]
板じゃなくってスレだった、すまん。

918 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 20:00:27.86 ID:laz5P8lZ.net]
ID:rYmTtd8qは逃亡?

919 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 20:03:46.92 ID:GYZZDVTI.net]
>>881
WinFormsのメッセージループはそもそもC#で実装されてるので、同じことを実装すればできるはず
それをやる意味があるかは知らん

>>882
C#だけではおそらくできない(プロセスメモリに直に機械語を書き込むとかならできるかもしれんが・・・)
C++/CLIを経由するか、C言語でDLLを書けばできる

C#は高レイヤー用だから、低レイヤーな部分はC言語が必要になってくる
ただ、低レイヤーを扱うソフトでもGUI部分はC#を使ったほうが楽な場合も多いと思う

920 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 21:06:06.73 ID:rYmTtd8q.net]
>>886,887
ご指摘通り、それ全部Nativeだった。orz

C#で直接他プロセスをフックするコードは書けないので、Nativeコードを経由する必要があるけど(>>892)、
その部分で上記サンプルコードで作るDLLが使用できるよ。

C#側はこんな感じ。(フックされる側もする側も、32bitじゃないと多分動かない)
ideone.com/I6CQGj

921 名前:デフォルトの名無しさん mailto:sage [2016/09/23(金) 21:14:04.51 ID:laz5P8lZ.net]
>>893
3行目以降はみんなわかってるから書かないで良いよ

922 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 21:52:53.12 ID:M/J9F64h.net]
まあまあ、そこまで書かなくても・・・

923 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 14:31:52.90 ID:OBYZqfWW.net]
IPAddressコントロールのメニューってどうやったら消せる?
サブクラス化してもWM_CONTEXTMENUが来ない

924 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 22:48:08.03 ID:TukXLw2X.net]
つDisappearMenu()



925 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 00:13:33.87 ID:/Yg2QTqO.net]
>>896
Spy++

926 名前:デフォルトの名無しさん [2016/09/27(火) 12:46:31.44 ID:uV/py0I0.net]
win32apiはCで使うもの、それともC++でやってる?

猫レベルなので、次が不明でさまよっています。

927 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 12:53:47.21 ID:lZ2V1Ihe.net]
>>899
CでやってるとC++のクラスを使いたくなるけど
レールに沿ってやるより自分がやってみたい事を実現するために必要な事を1つ1つやっていった方がいい気もする

928 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 13:09:24.50 ID:8ZLpHgGV.net]
>>899
C++でやんなきゃCOMでウザい事になるぞ

929 名前:デフォルトの名無しさん [2016/09/27(火) 13:10:17.87 ID:pAYH5Jb4.net]
ならないよ

930 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 13:48:32.20 ID:cO8I5ivP.net]
C++をBetter Cとして使ってりゃそのうち使い分ける

931 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 17:00:00.51 ID:JUhPFI9j.net]
>>902
俺もなると思うが?
生のCはやっちゃダメせいぜい教育用くらい

932 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 17:37:41.25 ID:lPJarC9l.net]
C++なんてウンコ言語はCOM使う時くらいだな
何通りも初期化記法があったり黒魔術が多過ぎる

933 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 17:37:44.77 ID:PAHsg1th.net]
C#のが楽 Win32で十分

くらいの差であって、ウザいかどうかはその人と仕事内容次第

934 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 18:29:05.45 ID:bFdF3zA0.net]
>>906
COM は C# の方が面倒だわ
microsoft.office.interop.* をもっと真面目に作ってくれ



935 名前:デフォルトの名無しさん [2016/09/27(火) 18:30:49.38 ID:uV/py0I0.net]
898です。
独学で猫の本程度、作れるようになりました。

生産性を考え、C#,C++,Java,python,rubyとかを次に考えています。

拡張子がcppで、comも少しやっています。

おすすめ言語ありますか?
ついでに本も。

ソフト屋じゃないのに、やっつけデータ処理が、必要なんです。

936 名前:デフォルトの名無しさん [2016/09/27(火) 18:34:20.96 ID:uV/py0I0.net]
日本語変ですね。

お礼もない。

若くないので、コストを考えました。

937 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 18:41:58.58 ID:w5gpFchP.net]
Win32APIについて聞きたいならこのスレでいいが
やっつけ仕事に適した言語が知りたいならこのスレより
スレ立てるまでもない質問はここで〜
の方が適切

938 名前:デフォルトの名無しさん [2016/09/27(火) 18:48:19.76 ID:uV/py0I0.net]
ホントですね。
失礼しました。

win32apiから、C++なら便利?と考えておるうちにずれていました。

939 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 19:17:10.39 ID:+Hq6Z55/.net]
>>905
バカ

940 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 20:18:13.60 ID:lCQO94l1.net]
Win32は修羅の道
思いとどまれ踏み込むな
迷い込んだら覚悟を決めろ

941 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 21:33:50.34 ID:w5gpFchP.net]
覚悟完了

942 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 22:01:03.88 ID:G7SFDpUA.net]
戦略的撤退

943 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 01:56:16.40 ID:JU45VBWv.net]
>>905
GDI+「私を忘れてないかな?」

944 名前:デフォルトの名無しさん [2016/09/29(木) 18:41:10.44 ID:M0rjTDUo.net]
win32apiならC++よりCからの方が使い易い



945 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 19:45:58.02 ID:LDkzfJUX.net]
SkyTelコワイ

946 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 08:23:59.69 ID:LRewiCIS.net]
>>916 ラッパ

947 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 13:09:10.02 ID:4o4y3Pue.net]
のマークの

948 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 13:29:05.78 ID:GxRMdu/c.net]
まさつゆまる

949 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 13:59:01.98 ID:GX41vvMR.net]
虫歯に効くのは木クレオソートが強い防腐作用や殺菌作用があるため
神経に対して初めは少し刺激が起こりますが次第に知覚麻痺して痛みを感じなくなっていきます

950 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 17:17:41.77 ID:2/1u9rrl.net]
隠しAPIのDwmGetDxSharedSurface()ってGetDesktopWindow()のハンドル指定してもテクスチャ取得できないのかな?
例えばIEとかのハンドル指定すれば問題なくテクスチャ取得まで行けるんだが・・・

951 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 17:52:00.53 ID:GX41vvMR.net]
DwmGetDxSharedSurface(NULL)

952 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 08:03:39.04 ID:2kYP0kDB.net]
.NETは.NET Frameworkがいる上に起動が遅いのが難点
特に頻繁に起動・終了するツールの開発には向かない

953 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 08:13:43.59 ID:y1wzqO45.net]
20年近く前はそう言われてたな

954 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 08:44:16.97 ID:LW7zvFbD.net]
>>925
よお老害



955 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 09:53:11.69 ID:BiGan9Dw.net]
>>925
Windows Updateをきちんと適用していれば、.Net Frameworkはインストールされてるぞ。
もはや、インストーラーに含める必要もなくなった。
起動時間は、事前コンパイルしとけば大幅に改善される。

956 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 10:01:20.19 ID:BiGan9Dw.net]
>>928の起動時間は1回目のね
元々2回目以降の起動はコンパイル結果がキャッシュされてるからそんなに遅くない。

957 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 10:33:07.96 ID:kdCvlbXg.net]
なんで急にこんな話になったのか分からんが、とりま20年近くも歴史ないわ。
あと、.NETがうんこじゃなくなったのはWin8に搭載された4.5から。
ここ4年の話で、それ以前はクソ&クソ。

958 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 12:27:21.91 ID:LW7zvFbD.net]
>>930
具体的によろしく

959 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 12:53:11.51 ID:+tO9yjwe.net]
.NETの思想って、利用者の端末機に負担をかけない様に
サービス可能なサーバーに情報を渡して、答えを貰うんだった。
回線の高速化や端末機の普及で、ローカルホスト通信で済ませる様になり
現在に至っている。

もう少しマイクロソフトがIISに力を入れてくれれば
ローカルホスト通信を使わなくなるのだろうね。

960 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 19:11:09.40 ID:2kYP0kDB.net]
>>929
ネイティブなら一瞬で起動するようなアプリでも.NETだとNgen使っても体感できるレベルで(数百msec以上)待たされる
起動に数秒かかることが許される規模のアプリであれば.NETでもいいけど
インタプリタでも一瞬で終わるような処理を.NETで実装したら実行時間の無駄
Javaも同じ事が言えるけどね。動き出せば速いけど動くまでが遅い

これは2年ほど前に配布を考慮した気軽に使えるGUIツール開発プラットフォームを探した時に出た結論

961 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 21:06:40.44 ID:JthKKgNo.net]
ふーん
お宅の言う結論ってケツの穴の論理と大差なさそうだね

962 名前:デフォルトの名無しさん mailto:sage [2016/10/07(金) 04:23:54.50 ID:HwYDbl3n.net]
もう新規案件をWin32ネイティブで開発することは少なくなったな
WTL/ATLを気に入ってよく使ってた

963 名前:デフォルトの名無しさん mailto:sage [2016/10/07(金) 17:22:23.22 ID:lKepYBPc.net]
#include <ws2tcpip.h>
しても inet_pton が宣言されてねぇと叱られる('兪)

964 名前:デフォルトの名無しさん mailto:sage [2016/10/07(金) 17:27:35.32 ID:nw13XKq1.net]
ユニコードビルドしてると使えないとか?もしくはInetPton



965 名前:デフォルトの名無しさん mailto:sage [2016/10/07(金) 17:51:19.48 ID:ah4nbj/y.net]
#include <ws2tcpip>

966 名前:デフォルトの名無しさん mailto:sage [2016/10/07(金) 19:03:39.31 ID:lKepYBPc.net]
お、反応してくれてありがとう

VC2015 Windows Kit 8.1 デフォルトのままUNICODE使用
#include <winsock2.h>
#include <ws2tcpip>
#include <ws2tcpip.h>
#include <arpa/inet.h>
統合環境のプロジェクトの外部依存関係にある ws2tcpip.h を開くと inet_pton InetPtonW 宣言部分はカラー表示されていて
#if で無効化されてる気配も無い けど
'inet_pton' 識別子が見つかりませんでした
x86 x64 Release Debug 全部
(ってのを最初に書けよって話だな すんません

コンパイラオプション /P でプリプロセス後の状態を見たら inet_pton InetPtonW 宣言部分は無かった

なんでやねんと思ったら

#if 0 //[
#include <windows.h>
  ・・・
#include <ws2tcpip.h> //ここに足してた
#else //][
#include <windows.h>
  ・・・
#endif //]

よそ様のコードの保守は大変ですな
外部依存関係 に表示しないで欲しいのですが

ごめんなさいごめんなさい 吊ってきます

967 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 12:28:41.20 ID:0jaJMPXG.net]
自分の無能をよそ様のせいにすんなボケ

968 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 12:34:16.03 ID:0jaJMPXG.net]
次です

Win32API質問箱 Build123
echo.2ch.net/test/read.cgi/tech/1475897582/

969 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 16:41:23.69 ID:WucPD6lR.net]
縦書きのAPI(CreateFont、GetTextMetrics、GetGlyphOutline)で質問です。

CreateFont第三引数に回転値2700を設定後、
GetGlyphOutlineを使うとき、描画座標位置と、送り幅と送り高さの取得の値はどうなるのでしょうか?
フォントは、"@MS ゴシック"を使っています。

横書き通常だと下記のコードで問題なく値が取得できるのですが、縦書きだとうまく動作しません。
offsetX = gm.gmptGlyphOrigin.x;
offsetY = tm.tmAscent - gm.gmptGlyphOrigin.y;
nextWidth =gm.gmCellIncX;
nextHeight=tm.height;

CreateFont、GetTextMetrics、GetGlyphOutlineを使うコードは次のようにしています。何か設定がおかしいのでしょうか?
hFont = CreateFontW(100,50,2700,0,
FW_REGULAR,FALSE,FALSE,FALSE,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
PROOF_QUALITY,FIXED_PITCH | FF_MODERN,L"@MS ゴシック");
oFont=(HFONT)SelectObject(hdc,hFont);
GetTextMetrics(hdc, &tm);
CONST MAT2 mat = { { 0,1 },{ 0,0 },{ 0,0 },{ 0,1 } };
GetGlyphOutlineW(hdc, wch, GGO_GRAY4_BITMAP, &gm, 0, NULL, &mat);

970 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 17:16:34.58 ID:QeFd4z39.net]
縦書きだとyが変わるんじゃね

971 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 18:16:44.11 ID:WucPD6lR.net]
フォントサイズ100で"あ"を出力した結果
横0/縦0/縦2700
gmBlackBoxX 90 80 80 *
gmBlackBoxY 80 90 90 *
gmptGlyphOriginX 5 13 -1 *
gmptGlyphOriginY 79 81 -5 *
gmCellIncX 10 100 0 *
gmCellIncY 0 0 100 *
tmHeight 100 100 104 *
tmAscent 86 86 88 *
tmDescent 14 14 16 *
tmInternalLeading 0 0 4 *
tmExternalLeading 0 0 0
tmAveCharWidth 50 50 50
tmMaxCharWidth 197 197 197
tmWeight 400 400 400
tmOverhang 0 0 0
tmDigitizedAspectX 96 96 96
tmDigitizedAspectY 96 96 96
tmItalic 0 0 0
tmUnderlined 0 0 0
tmStruckOut 0 0 0
tmPitchAndFamily 54 54 54
tmCharSet 128 128 128
横0は "MS ゴシック"  CreateFontの第三引数 0  
縦0は "@MS ゴシック" CreateFontの第三引数 0 
縦2700は "@MS ゴシック" CreateFontの第三引数 2700
APIは、ややっこしい出力してますねぇ。。
縦2700でTextOutすると右上が文字の原点に移動するっぽいのでそれ考慮して計算するのかなぁ。

972 名前:デフォルトの名無しさん mailto:sage [2016/10/11(火) 20:10:04.56 ID:fRcBIrce.net]
>>928
きちんと無駄に.Netは更新しないようにしてるんだよなぁ…

973 名前:デフォルトの名無しさん mailto:sage [2016/10/12(水) 11:31:26.15 ID:Gd/C/AAX.net]
>>943
縦2700だとtm,gmの概念がわからなかったので、縦0で縦フォント作ってから、画像を270度回転してtm,gm辻褄を合わせて描画したら安定。
XとYの概念が入れ替わって混乱した。

974 名前:デフォルトの名無しさん [2016/10/12(水) 13:51:15.72 ID:MITJcbWv.net]
>>946
無理矢理つじつま合わせすると(例えば縦横の座標入れ替え)うまくいくのは90度単位の回転のみで、
45度とかの場合は破綻するでしょ。
943 の話はベースライン座標をを270度回転させて求めないとうまくいかないと思う。



975 名前:デフォルトの名無しさん mailto:sage [2016/10/12(水) 14:20:20.43 ID:CGbCriuU.net]
>MSはこんなのまで用意してくれているからな
>https://github.com/Microsoft/vcpkg
>低脳のおもりは大変だ

976 名前:デフォルトの名無しさん mailto:sage [2016/10/12(水) 17:31:03.60 ID:Gd/C/AAX.net]
>>947
縦読みだけなら90度回転ベースの270度(上下左右入れ替えと、オフセット計算)で仕様は満たされますが、45度とか要求となると別途手間かかりそうですね。
文字列をテクスチャーとかに描画してから回転したほうが簡単そう。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<261KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef