Win32API質問箱 Build120©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net
2015/04/09(木) 18:16:02.24ID:Rhj0QTuK■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
■過去スレ
Win32API質問箱 Build118
http://peace.2ch.net/test/read.cgi/tech/1407006123/
Win32API質問箱 Build11 (119らしい)
http://peace.2ch.net/test/read.cgi/tech/1418181169/
0175デフォルトの名無しさん
2015/04/24(金) 03:54:40.79ID:cnXdh8tnメニューを追加すると既存のボタン類は自動的にメニューの高さ分下に移動しますが、ウインドウサイズは変わりません。
ウインドウサイズも自動的に大きくはならないのですか?
0176デフォルトの名無しさん
2015/04/24(金) 04:33:58.09ID:xfJFJ7Nc処理が完了するまでウィンドウが動かないものとして
メニュー追加前のクライアント座標0, 0をウィンドウ座標に変える
→メニュー追加後のクライアント座標0, 0をウィンドウ座標に変える
→その差分ウィンドウサイズを変更する
じゃダメなん?
0177168
2015/04/24(金) 04:41:10.43ID:vwT5rXE6参考になるか?
ttp://sumishiro.blogspot.jp/2010/03/blog-post_13.html
0178デフォルトの名無しさん
2015/04/24(金) 05:13:29.62ID:cnXdh8tnGetSystemMetricsなどでメニューサイズの取得やSetWindowPosでのウインドウサイズの変更方法などは分かっているのですが、
最初に書いたようにダイアログベースのウインドウをリソースエディタで作成すると
メニューの有無でボタン類の位置は勝手に上下に動きますが、ウインドウサイズは変わりません。
これは、プログラムでサイズ変更するしかないのかというのが質問です。
0179デフォルトの名無しさん
2015/04/24(金) 06:13:30.70ID:vwT5rXE6vs2013の自動生成コード利用して、ABOUTBOXダイアログに、メニューの追加でサンプルを作ってみたが、
RCのダイアログって、クライアントサイズは固定で、メニュの有無で、ウインドサイズは異なるので正常だと思うが、
ダイアログのウインドサイズを固定で作りたいの?
ダイアログのクライアントサイズを固定で作りたいの?
メニューの追加って、RCのプロパティでmenuってとこで設定するようにしてるよね?
0180デフォルトの名無しさん
2015/04/24(金) 06:44:25.47ID:6TulMhAx糞仕様
0181デフォルトの名無しさん
2015/04/24(金) 08:29:32.10ID:ci039+n8「メニューの有無で」の部分をもっと正確に言わないと回答つかないのでは?
エスパーして例を挙げるなら、表示されているウィンドウにSetMenuなどで
メニューを付けてあげる場合は勝手にリサイズされないから自前でやる必要がある。
0182デフォルトの名無しさん
2015/04/25(土) 08:59:49.51ID:QgsvYozO0183デフォルトの名無しさん
2015/04/25(土) 09:06:53.19ID:QgsvYozO0184デフォルトの名無しさん
2015/04/27(月) 21:27:22.01ID:QwoO9IPFメッセージループは1つのアプリケーションに一つ?
それともそのアプリケーション内のウィンドウごとにおのおの存在するの?
0185デフォルトの名無しさん
2015/04/27(月) 21:35:52.54ID:6f9FfEFl0186デフォルトの名無しさん
2015/04/27(月) 21:39:44.80ID:eeUDpTg4ドラッグで範囲選択するときのWM_LBUTTONDOWNなどで独自にループすることもある
0187デフォルトの名無しさん
2015/04/27(月) 21:47:49.17ID:nicG1Io0そのスレッド内でGetMessageすれば新しいメッセージループが作られるけど
取り立てて役だったことはない
0189デフォルトの名無しさん
2015/04/28(火) 18:13:27.82ID:W6RHswum0190189
2015/04/28(火) 18:26:37.13ID:W6RHswum0191189
2015/04/28(火) 23:01:18.23ID:W6RHswumタッチ操作中に、マウスを動かさない方法ってありますか?
一部の処理で、マウスカーソルの位置をアプリ側で操作する処理で障害になります。
WM_TOUCHでタッチ処理をしているのですが、GetCursorPos();で調べると値が変化しています。
0192189
2015/04/29(水) 02:05:01.53ID:S40E4Ihk0193デフォルトの名無しさん
2015/04/29(水) 12:08:54.67ID:No5D67KY0194デフォルトの名無しさん
2015/04/29(水) 12:53:06.13ID:pThgOoLO0195デフォルトの名無しさん
2015/04/29(水) 13:15:05.63ID:UdtGh3gm0196デフォルトの名無しさん
2015/04/29(水) 14:16:13.91ID:No5D67KY0197デフォルトの名無しさん
2015/04/29(水) 16:24:35.52ID:1y0sk+YZDelegateExecute等から呼び出させるCOMを作成する際、既存COMの動作を
適宜実行させたい場合、どうするべきなのでしょうか。
既存COMのDLLを参照して、コクラスの継承とかが出来るのかと思いましたが、
よくわからないでおります。
HKCU\Software\Classes\Folder\shell\open\commandの場合、
ExecuteFolder(ExplorerFrame.dll)が既存アクションのようなのですが、
こいつをどう呼び出す/継承させるかがわからずにいる状態です。
(そもそもスタンスがあってるのかさえ。。)
0198デフォルトの名無しさん
2015/04/29(水) 18:05:09.67ID:lb5eDrrLIExecuteCommand IInitializeCommand IObjectWithSelection IObjectWithSite
ここらへんのインターフェイスのメソッドで正しい情報を与えてやってExecuteFolderをエミュレートすればできそうな気がするけど
面倒くさそうだから自分なら既得のsiteからIShellBrowserをQueryInterfaceして
IShellBrowser::BrowseObjectで普通にフォルダ開かせちゃうのがいいと思うがどうか
0199デフォルトの名無しさん
2015/04/29(水) 18:38:32.74ID:Bg6ZLegt10年ぶりに聞いたなw
0200デフォルトの名無しさん
2015/04/29(水) 19:59:29.55ID:Ih1x52O1メッセージループがぐるぐる開始する。
ダイアログ中のプッシュボタンをマウスで押すと
このメッセージループがWM_LBUTTONDOWNを受け
WM_LBUTTONDOWNのハンドラ中で別のメッセージループを開始する。
メッセージループはいくつある。
0201デフォルトの名無しさん
2015/04/29(水) 20:23:23.77ID:MPDoLmFP0202デフォルトの名無しさん
2015/04/29(水) 20:58:21.71ID:Bg6ZLegt0203デフォルトの名無しさん
2015/04/29(水) 21:22:01.08ID:pThgOoLO0204デフォルトの名無しさん
2015/04/29(水) 23:20:13.57ID:zwED2fT30205197
2015/04/30(木) 00:27:47.26ID:IOp/sxLAIShellBrowser::BrowseObject実装して、今のところ既存の動きを再現できました。
ありがとうございます!
IShellBrowser::BrowseObjectなんぞ知りも知らなかったので、
ここらへん辿れるようになりたいですね。
0206デフォルトの名無しさん
2015/04/30(木) 07:57:48.27ID:75MO5jun0207デフォルトの名無しさん
2015/04/30(木) 11:21:09.79ID:ztKwqMYg0x91,0x92,0x93のメッセージは何をやっているかわかりません。
Vs2015ってSpyツールありましたっけ?
0208207
2015/04/30(木) 11:23:04.24ID:ztKwqMYg0209207
2015/04/30(木) 11:25:21.36ID:ztKwqMYg0210デフォルトの名無しさん
2015/04/30(木) 13:51:06.64ID:iDcC+qzm0211デフォルトの名無しさん
2015/04/30(木) 21:45:33.01ID:acewAU+4>サンドボックス環境で動き、ネイティブデスクトップアプリの力をそのままにシステムへの影響を減らす。
>アンインストール時にゴミを残さない。ステージでは PhtoShop Elements をデモ。
サンドボックス化は歓迎だけどこんなんストアがマルウェアの万国博覧会になりそうなんだけど
0212デフォルトの名無しさん
2015/04/30(木) 22:36:39.51ID:z7JbgbHOパッケージマネージャーつけろとは前々から思っていたが
chocolatey?
おもちゃに用はないよ
0213デフォルトの名無しさん
2015/04/30(木) 22:54:56.41ID:uI857xi40214デフォルトの名無しさん
2015/05/01(金) 01:12:16.84ID:/Mtkjhpa大きいのが取得したいんだけど、どうすればよい?
ExtractAssociatedIcon と IExtractIcon を試したんだけど、
両方とも48x48が最高みたい。
256x256の綺麗なアイコンはどうやったら取得できますか?
0215214
2015/05/01(金) 01:30:39.80ID:/Mtkjhpa解決しました
0216デフォルトの名無しさん
2015/05/01(金) 16:17:44.56ID:mcLYTm8yCHARFORMAT構造体のdw.yHeightはtwip単位。
twipからpixelへの間には各環境のdpiが絡んでらっしゃると。
てことはGetDeviceCapsとかを呼んでアレコレするしかないってことなんでしょうか。
現フォントの大きさ高さをピクセル単位で保存してるプロパティ的なものって
ないんでしょうか。
昔はだいたい96dpiだったと知りましたが、実際計ってみると確かに
96dpiではおかしい大きさで表示しとりますです。
0217デフォルトの名無しさん
2015/05/02(土) 18:04:37.67ID:wQLon+fDCtrl+FunctionKeyを捕まえたいのですが、どんなメッセージ飛んでくるのですか?
0218デフォルトの名無しさん
2015/05/02(土) 18:43:22.99ID:wQLon+fD0219デフォルトの名無しさん
2015/05/02(土) 19:22:52.25ID:P8FpGVi1グローバルフック周り地味に面倒になってそうだな・・・
0220デフォルトの名無しさん
2015/05/03(日) 01:12:27.12ID:DpPxqG4cしかし、CreateWindowでtooltips_class32を指定したものをShowWindowで表示してみても影しか表示されません
何かしら抜けている手順があったら教えてください
0221デフォルトの名無しさん
2015/05/03(日) 01:20:14.65ID:DGVNwvpl0222デフォルトの名無しさん
2015/05/03(日) 08:38:00.25ID:y99enroxウインドメッセージ、WM_WINDOWPOSCHANGING:の値を書き換えたいのですが、ご教授お願いします。
0223デフォルトの名無しさん
2015/05/03(日) 10:46:37.20ID:jQdh0BE6やりたいなら対象プロセスに潜り込んでWndProcを上書きするしかない
対象プロセスに潜り込む方法はグローバルフックでもいいけどね
0224デフォルトの名無しさん
2015/05/03(日) 10:50:29.30ID:jQdh0BE6確実にWH_CALLWNDPROCではない
ジャーナル何とかだったかな
0225デフォルトの名無しさん
2015/05/03(日) 11:04:16.54ID:p3er52Mk0226デフォルトの名無しさん
2015/05/03(日) 11:47:58.30ID:y99enroxCreateRemoteThreadとか使う感じになるのでしょうか?
case SC_MOVEのタイミングで、SetWindowSubclass(p->hwnd, SubclassProc, 0, 0);だとダメでした。
自分のウインドのみは書き換えは成功していたみたいです。
SetWindowLongは試してないですが、古いAPIなので、使うと不具合ありそうですねよね?
SetWindowLongは、動作しているスレッドが違う場合ので動かないのかな?
WH_CALLWNDPROC 読み出しのみっぽいのでダメ
WH_CBT+HCBT_MOVESIZE 動かしたい内容に近いが、ダメでした。
WH_DEBUG 試してない
WH_GETMESSAGE WM_WINDOWPOSCHANGING:読み出しできず
WH_MOUSE、WH_MOUSE_LL ウインド移動ではだめっぽい。
このあたりは読みましたが…解決してないです。
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/05e13534-8964-4626-b056-06e93a2154d5?forum=vcgeneralja
0227デフォルトの名無しさん
2015/05/03(日) 11:58:39.70ID:DpPxqG4cググってもヒットしないんですが、それは何なんでしょうか?
0228デフォルトの名無しさん
2015/05/03(日) 18:17:35.43ID:LlABLTElなんか不穏な感じ
0229デフォルトの名無しさん
2015/05/04(月) 05:27:30.11ID:LYeSXt0A0230デフォルトの名無しさん
2015/05/04(月) 08:56:17.68ID:80QzrQPL0231デフォルトの名無しさん
2015/05/04(月) 09:36:46.19ID:sKsouBLL0232226
2015/05/04(月) 18:02:24.32ID:q56zhT2ASetWindowSubClassだとうまく動きませんねぇ。なんでだろ?
Win7以降向けで、CreateRemoteThreadEx+LoadLibrary で、サブクラス化のテストはしました。
XPだとCreateRemoteThreadじゃないとだめですね。
とりあえず、CreateRemoteThreadExだと、カスペル先生とかが誤動作しそうなので、
グローバルフック中にSetWindowLongのを使おうかと考えています。
ウインド移動前提で、サブクラス化した場合、
SetWindowLong(サブクラス化)の解除のタイミングは、WM_DESTROY 以外だと、
どのメッセージがよいでしょうか?
WM_EXITSIZEMOVE,WM_DESTROY で破棄コードを動かすようにはしています。
0233226
2015/05/04(月) 18:26:03.85ID:q56zhT2AなにかAPIありましたっけ?
0234226
2015/05/04(月) 18:35:31.12ID:q56zhT2ADWORD processID;
DWORD thID;
BOOL bIsWow64 = FALSE;
thID = GetWindowThreadProcessId(hWnd,&processID);
IsWow64Process(processID, &bIsWow64);
は。。64ビットめんどくさー
0235226
2015/05/04(月) 20:26:27.96ID:q56zhT2A0236デフォルトの名無しさん
2015/05/04(月) 20:58:25.12ID:VqP+6wea作っているアプリ自体が64bitっていうなら良いけど。
0237226
2015/05/04(月) 21:25:39.18ID:q56zhT2A32Bitの環境は、IsWow64Process関数が存在するかどうか調べて判断すれば。。と思ったんですが、甘いかなぁ。。
この辺り参考にしようかとは思ってますがどうなんでしょう。
http://blog.monoweb.info/blog/2009/09/13/64bit-hook/
0238デフォルトの名無しさん
2015/05/04(月) 21:53:00.00ID:MYTXHyrO事足りるんじゃないの?
0239デフォルトの名無しさん
2015/05/04(月) 23:36:23.21ID:VqP+6weaWindows XP SP2以降はこの関数が存在しているらしい。
「関数が存在していなければ32bitOS」という判断は出来るが「関数が存在していれば64bitOS」という判断は出来ない。
また実機(WindowsXP SP2)でも過去に検証済み。
MSDN
https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms684139.aspx
>If the process is running under 32-bit Windows, the value is set to FALSE.
>If the process is a 64-bit application running under 64-bit Windows, the value is also set to FALSE.
そのサイトに書かれている方法は以下の文が肝。
>始めに利用者が起動するのは32bit版のプログラムです。
32bitアプリ実行環境においてIsWow64ProcessがFALSEを返すということは、ネイティブで実行されている。
逆にIsWow64ProcessがTRUEを返したならそれはWOW64の下で動いているということになる。
だから「必ず最初は32bitアプリを起動させて・・・」という方法を取れるならそのブログのようにIsWow64Processだけで判断も出来る。
>>238
result が FALSEってのがどのレベルで言っているのか分からんが
( IsWow64Processの戻り値ということなら)64bitOSで64bitアプリケーションでも IsWow64Process はFALSE を返す。
つまり32bitOSか64bitアプリなら関数はFALSEを返すので
アプリが何bitかを判断するにはOSが何bitかを知らないといけない。
0240デフォルトの名無しさん
2015/05/04(月) 23:45:54.58ID:VqP+6wea32bitアプリを作っているなら「最初に起動するのは32bitアプリ」なのは当然か。
フック対象が64bitならフックしないか、64bit版を起動させるっていうブログの方法で問題ないな。
ただ「関数が存在するかどうか」だけじゃ不十分だから気をつけてね。
0241デフォルトの名無しさん
2015/05/05(火) 00:15:04.99ID:HP7XiSqu>>240は若干訂正。
自分が32bitアプリだとしても、
・相手が32bitOSで32アプリ → IsWow64Process はFALSEを返す
・相手が64bitOSで32アプリ → IsWow64Process はTRUEを返す
・相手が64bitOSで64アプリ → IsWow64Process はFALSEを返す
OSが何bitかを知りたいだけならそのブログの方法だけでいいが、
相手が何bitかを知りたいなら組み合わせないとダメだな。
自分が32bitアプリだから、自分にIsWow64Processを使いFALSEなら32bitOSでTRUEなら64bitOS。
32bitOS環境なら相手も当然32bitアプリ。
64bitOS環境だと相手が32bitアプリか64bitアプリかの判断が必要なので相手もIsWow64Processで調べる。
FALSEなら64bitアプリ、TRUEなら32bitアプリ。
「動いているアプリの」ってのが相手のことならこうしないとダメだな。
あとは相手が64bitアプリならフックしないか、64bitアプリを立ち上げてフックするか。
0242デフォルトの名無しさん
2015/05/05(火) 00:55:10.80ID:JPFk61nlint a = 0xffffffffffffffff;
でなぜ警告がでるの?
0243デフォルトの名無しさん
2015/05/05(火) 01:08:32.87ID:WXcigvGrintを32ビットで扱っているから
整数型のサイズはCPUのビット数に合わせなければならない
とかいう規定があるわけではない
shortのサイズ以上であればintが2048ビットでも
24ビットでもそれはコンパイラの自由なんだよ
0244デフォルトの名無しさん
2015/05/05(火) 01:16:06.47ID:q10zsNFn0245デフォルトの名無しさん
2015/05/05(火) 01:21:24.52ID:AH7UBQjvsizeof(int) がいくつになるか試してみたら
0246デフォルトの名無しさん
2015/05/05(火) 05:07:51.68ID:V9xQwQO9マウス入力などを遮らないアニメーションをデスクトップ上に表示したいんですが
0247デフォルトの名無しさん
2015/05/05(火) 09:29:14.26ID:8cBYwRXK0248226
2015/05/05(火) 09:29:18.47ID:20DP2R/2サンキュー助かります。
最初に32ビット版で起動して、64ビットOSであれば、
64ビット版を起動して、ウインド情報を調べてフックするようにするつもりです。
実行ファイル2つと、DLLが2つになるのは仕方ないですね。
メモリー共有って32ビットと64ビットの混合ってできましたっけ?
32ビットウインドと64ビットのウインド間のメモリー共有って
CreateFileMappingでできるのかな?
SendMessage(WM_USER や WM_COPYDATAでやりとりしたほうがいい?
0249デフォルトの名無しさん
2015/05/05(火) 10:51:06.10ID:V9xQwQO9ありがとうございます
確かにAeroの処理を考えるとダブルバッファリングが必須ですね
よく考えたらやりたいこととダブルバッファリングはあまり関係がありませんでした
すでに知っているのはGetDC+BitBltで書き換えるやり方ですが、
描画した画像の下に無効リージョンが発生すると
勝手に塗り直されてちらつきが発生するのでそれを防ぐ方法が知りたいです
デスクトップの内部バッファが後は反映するだけというところまで描画を終える
↓
そこにすかさず割り込んで表示したいアニメを描き足す
↓
その後OKサインを送ったらようやく実際にデスクトップが描画される
具体的に書くときっとこういう流れになると思うんですが、特に真ん中を実現するためのAPIがあったら教えてください
0250デフォルトの名無しさん
2015/05/05(火) 10:59:46.29ID:qvOIJ9mb0251226
2015/05/05(火) 11:04:35.43ID:20DP2R/2自分でダブルバッファーしてるんであれば、あとはやることといえば、NULLブラシの設定くらいか?
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);を
wcex.hbrBackground = (HBRUSH)NULL;にしてみたら?改善しないか?
0252デフォルトの名無しさん
2015/05/05(火) 11:17:14.87ID:kyGf+mJm0253デフォルトの名無しさん
2015/05/05(火) 11:21:04.64ID:V9xQwQO9これが実現できるならダブルバッファリングは一回で済むんじゃないかと思います
自分ではウィンドウは作らずにデスクトップに直描きしたいってことです
理由は最前面になっている他のウィンドウを非アクティブにしたくないのが一つと
カーソル下にウィンドウがあるときにマウス入力が遮られて邪魔になるのが一つ
(例えばスタートボタンの上に画像が被さっていても意に介せずホバーやクリックの反応をしてほしい)
協力してくださってありがとうございます
0254226
2015/05/05(火) 11:24:14.70ID:20DP2R/2LPDATA pData = MapViewOfFile(hShare, FILE_MAP_WRITE, 0, 0, sizeof(MyShareData));
32/64ビット間のメモリー共有ですが、特にコードいじることなく共有できました。
0255デフォルトの名無しさん
2015/05/05(火) 12:56:34.32ID:kyGf+mJmデスクトップのハンドルからプロシージャのアドレス得て>>252だけ捕まえるとか
0256226
2015/05/05(火) 13:46:31.14ID:20DP2R/2デスクトップの直書きって、WM_PAINT直後に描画するてこと?
試してないけど、デスクトップのウインドハンドルをフックしたとして、
WM_PAINTを先に描画させて、任意の画像を上からBitBltとかする感じかな?
普通にちらつきそうではあるが。。?
0257デフォルトの名無しさん
2015/05/05(火) 14:07:36.70ID:q10zsNFn0258デフォルトの名無しさん
2015/05/05(火) 14:39:05.37ID:3fPyNIFJwm_paintのendpaintの直前に描画命令を割り込ませられれば。。。あるいは。。。
0259デフォルトの名無しさん
2015/05/05(火) 16:58:43.47ID:PARG4dys0260226
2015/05/05(火) 18:36:30.71ID:20DP2R/2これ通るか不明ですが。
case WM_PAINT:を動かす時って、通常、hdc = BeginPaint(hWnd, &ps);EndPaint(hWnd, &ps);がセットですよね?
と、いうことは、hWndのhdcの値を任意の情報に書き換えられれば、バッファリングできるかもしれないですよね?
だめで元々と思ってください。
予め、自分のウインドハンドルに、hdc=GetDC(hWnd);でHDC取得して、 バッファに、SelectObject(hdc,hMyBmp);で関連付けしておく
それと、ダブルバッファ用のメモリーDC(myDC)を作っておく
んで、GetDesktopWindow() とか必要に応じて、グローバルフック+サブクラス化して、 WM_PAINTの本来受け渡す、HookPrc( hWnd,rParam,lParam); のhWndを書き換えてバッファリングして描画するっていう方法はどうでしょうか?
case WM_PAINT:
myWndDC =GetDC(hMyWnd); // 自分のウインドハンドルのDCを取得
// myBmpはCreateCompatibleBitmapで本来のhWndのDC, 所属のhBitmapなどからサイズとか取得したほうが良いと思う
hdc =GetDC(hWnd);myBmp = 略;ReleaseDC(hdc);
oBmp=(HBITMAP)SelectObject(myWndDC,myBmp); // myWndDCにバッファ用のビットマップをセット
// 先に描画、描画対象を自分のウインドのhDCに描かせることが成功すればチラツキは抑えられるはず?
HookPrc(hMyWnd,wParam,lParam);
hdc = BeginPaint(hWnd, &ps);
BitBlt(myDC,略,myWndDC,略); // 背景として、本来の描画内容をmyDCに転送(バッファリング)
SelectObject(hMyDC,oBmp); // 本来のビットマップに戻す
ReleaseDC(hMyWnd, myWndDC); // リリース
DeleteObject(myBmp); // myBmpを破棄
FillRect(myDC,略)など // ここで自分で上書き描画
BitBlt(hdc,略,myDC); // 実際のウインドに描画する
EndPaint(hWnd, &ps);return 0;
0261226
2015/05/05(火) 18:38:32.93ID:20DP2R/20262デフォルトの名無しさん
2015/05/05(火) 23:47:02.11ID:V9xQwQO9とても親切に説明していただいて恐悦至極です。ありがとうございます!
BeginPaintが返却するhdcを自分のメモリDCに挿げ替えるなんてのは思いつかなかったので非常に参考になりました
背景, アニメABCDコマがあるとすると(背景はGetDC(NULL)で取得できる内容そのもの)
1, 背景が描画される(表示状態:背景のみ)
↓
2, Aコマを描画する(表示状態:背景+Aコマ)
↓
3, 次のコマを表示するために背景を再描画させる(表示状態:背景のみ)
↓
4, Bコマを描画する(表示状態:背景+Bコマ)
となり、AコマとBコマの間に一瞬だけ背景のみの状態になることがちらつきの原因と思われるので、
1と2,3と4を同一のタイミングで描画するための何かしらの方法を探していましたが、
皆さんの書き込みを拝見する限りではBeginPaintやEndPaint等のAPIフックが必須っぽいので、
それで試して上手く行かなかったらそのときは諦めようかと思います
ありがとうございました
0263デフォルトの名無しさん
2015/05/06(水) 22:24:13.55ID:OlUhBFHFMessageBoxIndirectを使ってダイアログを表示する際に、例えば
IDCANCELボタンを表示すると、日本語Windows7なら[キャンセル]、
英語Windows7なら[Cancel]と表示されますが、それをOSの言語と関係無く
自分で好きな文字列を指定して表示させたいのですが、どうやっても
出来ません。どうにかして出来ませんか?
0264デフォルトの名無しさん
2015/05/06(水) 22:35:05.51ID:ROM3ZfOK(1)自分でダイアログを自作する。
(2)メッセージボックスをフックする。
0265デフォルトの名無しさん
2015/05/06(水) 22:46:36.25ID:OlUhBFHFレスありがとうございます。
(2)の方法でやりたいのですが、どうすれば自作のcallback関数に
置き換えられるのか分りませんでした。
0266デフォルトの名無しさん
2015/05/06(水) 22:51:27.95ID:ROM3ZfOKSetDlgItemText
0267デフォルトの名無しさん
2015/05/06(水) 22:55:01.18ID:lk9KI/EaLRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HCBT_ACTIVATE)
{
HWND hWnd = reinterpret_cast<HWND>(wParam);
0268デフォルトの名無しさん
2015/05/06(水) 23:54:06.74ID:OlUhBFHF情報ありがとうございました。
試してみたいと思います。
0269デフォルトの名無しさん
2015/05/07(木) 00:56:21.78ID:CSFF77Jn分からないことはヤフレカスってのは常套手段ですねw
0270デフォルトの名無しさん
2015/05/07(木) 01:05:23.21ID:xpfh09H00271デフォルトの名無しさん
2015/05/07(木) 03:35:20.66ID:+yI4RSPEどこのスレで口喧嘩に負けてきたんだ?
荒らしてきてやるから書け
0272デフォルトの名無しさん
2015/05/07(木) 22:56:17.61ID:uDHc9Yu6が取得出来たとして、
Postmessage(hwnd, , ,) ;
で何かメッセージを送って、そのボタンの背景色を赤色に変えるなど
できますか?
0273デフォルトの名無しさん
2015/05/07(木) 23:10:50.13ID:XdEP7Lb2用意されていればいいのだが、あいにくボタンにはそういうメッセージがない。
なので、他のアプリのボタンの背景色を変えようと思えば、そのボタンのスタイルを変え、
なおかつプロシージャを乗っ取って WM_DRAWITEM なりを処理する必要があると思う。
ゆえに答えは否。
自分の作ったアプリのボタンの背景色を変えるにはどうすればいいか。
まずはそのあたりを考えてみるといいよ。
0274デフォルトの名無しさん
2015/05/07(木) 23:17:47.32ID:uDHc9Yu6レスありがとうございました。
>他のアプリのボタンの背景色を変えようと思えば、そのボタンのスタイルを変え、
>なおかつプロシージャを乗っ取って WM_DRAWITEM なりを処理する必要があると思う。
なかなかややこしそうですね。
>ゆえに答えは否。
そうですか。困った。
>自分の作ったアプリのボタンの背景色を変えるにはどうすればいいか。
>まずはそのあたりを考えてみるといいよ。
その場合は、
SetBkColor
でやるんですよね?
■ このスレッドは過去ログ倉庫に格納されています