- 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とかで動いてるアプリには、上記の方法は効果なさそうですね
|
|