プログラミングメモ →目次

子ウィンドウのちらつき防止(VC++)

ウィンドウが周期的にInvalidate()などの関数を呼び出して、絵やグラフなどのオーナードローを行う場合は、このウィンドウ上に配置されているコントロール、子ウィンドウがちらついて見えることがあります。

ウィンドウ スタイルについて、マイクロソフトのMSDNに下記の記述がありす。

WS_CLIPCHILDREN
親ウィンドウの内部で描画するときに、子ウィンドウが占める領域を除外します。親ウィンドウを作成するときに使います。


 従って、ウィンドウのスタイルに、WS_CLIPCHILDRENを加えれば、子ウィンドウのちらつきが防げます。

使用例:


BOOL CAboutDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    SetTimer(1, 10, NULL);
 
    ModifyStyle(0, WS_CLIPCHILDREN);

    return TRUE; 
}


void CAboutDlg::OnTimer(UINT_PTR nIDEvent)
{
     Invalidate();     //10ms周期で再描画
 
     CDialogEx::OnTimer(nIDEvent);
}