1

OK、フォームに共通のコントロールを持つメインの親の場合、サイズを変更するとすべてがノンストップでちらつきます。

休閑コントロールは私のフォームにあります:

  1. ボタン
  2. 静的
  3. RTF
  4. ステータスバー
  5. ツールバーといくつかのリバンドを備えた鉄筋

ここで、WM_ERASEBKGNDをtrueに設定して、フォームの背景が消去されないようにします。これにより、ちらつきも発生します。

また、ウィンドウクラスhbrBackgroundを0に設定し、ウィンドウクラススタイルも0に設定しました。

スタイルWS_OVERLAPPEDWINDOWとしての私の親フォーム。

また、WS_CLIPCHILDRENを親フォームに追加しても、ちらつきがあります。

フォームのペイント手順の下で、これを追加しました。

case WM_PAINT:
Temp_Rect=SSMAIN_RECT;
// Get DC for window
hdc = BeginPaint(hwnd, &ps);

// Create an off-screen DC for double-buffering

hdcMem = CreateCompatibleDC(hdc);
hbmMem = CreateCompatibleBitmap(hdc, SSMAIN_WIDTH,SSMAIN_HEIGHT);


hOld   = (HBITMAP)SelectObject(hdcMem, hbmMem);

// Draw into hdcMem here

// Transfer the off-screen DC to the screen
Temp_Rect.left=-200;
Temp_Rect.top=-200;
FillRect(hdcMem, &Temp_Rect, (HBRUSH) (COLOR_WINDOW+7));
BitBlt(hdc, 0, 0,  SSMAIN_WIDTH, SSMAIN_HEIGHT, hdcMem, 0, 0, SRCCOPY);

// Free-up the off-screen DC
SelectObject(hdcMem, hOld);
DeleteObject(hbmMem);
DeleteDC    (hdcMem);

EndPaint(hwnd, &ps);
break;

ちらつき
(出典:phantomworksstudios.com

私は別のフォーラムで尋ねたので、これについてとても迷っています。誰かが私のウィンドウをペイント手順のためにサブクラス化するように言ったので、それは彼が彼のタブコントロールに対してしたことです。

それなしでWM_PAINTにアクセスできるのに、なぜフォーラムをサブクラス化する必要があるので、それは私を少し混乱させましたか?

間違えなければ同じことをする別のWinprocを作成するのではなく、Winprocで編集するのと同じではないでしょうか。

他に何か必要な場合はお知らせください。

その他の注意事項:

また、特定の領域のbitbltのサイズを変更しました。

ここで、bitbltがちらつく領域がちらつきますが、サイズを変更すると、フォームの他のコントロールの痕跡が残るため、残りのウィンドウはちらつきません。

ちらつきエリア
(出典:phantomworksstudios.com

4

0 に答える 0