トップページ > プログラム > 2015年05月05日 > 20DP2R/2

書き込み順位&時間帯一覧

5 位/183 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000001020100002000006



使用した名前一覧書き込んだスレッド一覧
226
Win32API質問箱 Build120©2ch.net

書き込みレス一覧

Win32API質問箱 Build120©2ch.net
248 :226[sage]:2015/05/05(火) 09:29:18.47 ID:20DP2R/2
>>241
サンキュー助かります。
最初に32ビット版で起動して、64ビットOSであれば、
64ビット版を起動して、ウインド情報を調べてフックするようにするつもりです。
実行ファイル2つと、DLLが2つになるのは仕方ないですね。
メモリー共有って32ビットと64ビットの混合ってできましたっけ?
32ビットウインドと64ビットのウインド間のメモリー共有って
CreateFileMappingでできるのかな?
SendMessage(WM_USER や WM_COPYDATAでやりとりしたほうがいい?
Win32API質問箱 Build120©2ch.net
251 :226[sage]:2015/05/05(火) 11:04:35.43 ID:20DP2R/2
>>249
自分でダブルバッファーしてるんであれば、あとはやることといえば、NULLブラシの設定くらいか?
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);を
wcex.hbrBackground = (HBRUSH)NULL;にしてみたら?改善しないか?
Win32API質問箱 Build120©2ch.net
254 :226[sage]:2015/05/05(火) 11:24:14.70 ID:20DP2R/2
HANDLE hShare = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,0, sizeof(MyShareData), strShareName);
LPDATA pData = MapViewOfFile(hShare, FILE_MAP_WRITE, 0, 0, sizeof(MyShareData));
32/64ビット間のメモリー共有ですが、特にコードいじることなく共有できました。
Win32API質問箱 Build120©2ch.net
256 :226[sage]:2015/05/05(火) 13:46:31.14 ID:20DP2R/2
>>253
デスクトップの直書きって、WM_PAINT直後に描画するてこと?
試してないけど、デスクトップのウインドハンドルをフックしたとして、
WM_PAINTを先に描画させて、任意の画像を上からBitBltとかする感じかな?
普通にちらつきそうではあるが。。?
Win32API質問箱 Build120©2ch.net
260 :226[sage]:2015/05/05(火) 18:36:30.71 ID:20DP2R/2
>>253
これ通るか不明ですが。
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;
Win32API質問箱 Build120©2ch.net
261 :226[sage]:2015/05/05(火) 18:38:32.93 ID:20DP2R/2
書いててふと思ったんですが、DirectXやら、OpenGLとかで動いてるアプリには、上記の方法は効果なさそうですね


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。