他に解決できない問題がありますので、ご助力をお願いいたします。
環境は、VC2008(C言語・SDK、ダイアログベース)です。
ウィンドウリサイズ時のコントロールなどのちらつきなのですが、
ダブルバッファをすれば大丈夫だろうと思っていたのですがうまくいきません。
具体的には、下のようなソースなのですが、
ダブルバッファするにも、ビットマップを表示するなどの処理をしているわけではないので、
WM_PAINTに何かをすべきなのかもわかりません。
ちらつきをなくす方法、ご教授いただけないでしょうか。
main.c
#include <windows.h>
#include <stdio.h>
#include <math.h>
#include "resource.h"
BOOL CALLBACK WndProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
static HWND hText; //スタティックテキストのハンドル
static RECT init_dlg_rc; //親ウィンドウの初期領域を格納
static RECT cur_dlg_rc; //親ウィンドウの移動後の領域を格納
static RECT text_rc; //スタティックテキストの領域を格納
static POINT mv_pos; //親ダイアログの初期状態からの移動幅を格納
switch (msg){
case WM_INITDIALOG :
{
hText = GetDlgItem(hDlg, IDC_TEXT1);
// 親ウィンドの初期スクリーン領域取得
GetWindowRect(hDlg, &init_dlg_rc);
//スタティックテキストのクライアント領域取得
GetWindowRect(hText, &text_rc);
MapWindowPoints(NULL, hDlg, &text_rc, 2);
}
break;
case WM_SIZING:
{
//現在の親ウィンドウのスクリーン領域を取得
memcpy(&cur_dlg_rc, (RECT*)lp, sizeof(RECT));
//親ウィンドウが初期状態からどれだけ動いた計算
mv_pos.x = (cur_dlg_rc.right - init_dlg_rc.right) + (init_dlg_rc.left - cur_dlg_rc.left);
mv_pos.y = (cur_dlg_rc.bottom - init_dlg_rc.bottom) + (init_dlg_rc.top - cur_dlg_rc.top);
//スタティックテキストを移動
MoveWindow(hText, text_rc.left,
text_rc.top,
text_rc.right - text_rc.left + mv_pos.x,
text_rc.bottom - text_rc.top + mv_pos.y,
FALSE);
//再描画
InvalidateRect(hDlg, NULL, FALSE);
}
break;
case WM_CLOSE: //×ボタン
EndDialog(hDlg, 0);
return TRUE;
default:
break;
}
return FALSE;
}
int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpszArgs,int nWinMode)
{
//ウィンドウ起動
DialogBox(NULL,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)WndProc);
return 0;
}
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Wintest20120816.rc
//
#define IDD_DIALOG1 101
#define IDC_TEXT1 1001
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1004
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// 日本語 resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
#ifdef _WIN32
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
#pragma code_page(932)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_DIALOG1 DIALOGEX 0, 0, 267, 141
STYLE DS_SETFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_WINDOWEDGE
CAPTION "Dialog"
FONT 12, "MS UI Gothic", 400, 0, 0x80
BEGIN
CONTROL "ちらつきが消えません。\nなんとか消せないでしょうか。",IDC_TEXT1,"Static",SS_LEFTNOWORDWRAP | WS_BORDER | WS_GROUP,12,8,246,122,WS_EX_CLIENTEDGE
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_DIALOG1, DIALOG
BEGIN
LEFTMARGIN, 12
RIGHTMARGIN, 258
TOPMARGIN, 8
BOTTOMMARGIN, 130
END
END
#endif // APSTUDIO_INVOKED
#endif // 日本語 resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED