小弟我的OnDraw函数里双缓冲的有关问题,
我的OnDraw函数里双缓冲的问题,急!
这是OnDraw函数,我想先用MemDC画一个虚拟的图,然后再用BITBLT复制给pDC,但这样怎么我的视图里都是白色的了?什么都没画出来,各位帮忙看看.
我这么做的目的是,这样做可以避免客户区频繁闪烁的问题,大家帮我看看问题出在哪吧.谢谢
void CCalendarView::OnDraw(CDC* pDC)
{
CCalendarDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
RECT rect;
GetClientRect(&rect);
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
//设置默认焦点为今天
m_btnDateChange[m_iTaborder].SetFocus();
//创建设置字体
CFont m_font,*m_pOldFont;
m_font.CreateFont(int(20 * m_fSizeY),
int(7 * m_fSizeX),
0,
0,
FW_BOLD,
FALSE,
FALSE,
0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS,
_T( "Arial "));
m_pOldFont = pDC-> SelectObject(&m_font);
CString strDate;
strDate.Format( "%4d年%2d月 ", m_odtCurrentDate.GetYear(), m_odtCurrentDate.GetMonth());
MemDC.TextOut(int(320 * m_fSizeX), int(BUTTONTOTOP * m_fSizeY), strDate);
//根据视口变化动态调整按钮控件大小
int i_Size[5] = {50, 105, 520, 610, 665};
for(int j=0; j <5; j++)
{
m_btnDateChange[j].MoveWindow(
int(i_Size[j] * m_fSizeX),
int(BUTTONTOTOP * m_fSizeY),
int(BUTTONWIDTH * m_fSizeX),
int(BUTTONHEIGHT * m_fSizeY),
true
);
}
/* 绘制日历第一行 */
CString str[7] = { "Sun ", "Mon ", "Tue ", "Wed ", "Thu ", "Fri ", "Sat "};
CBitmap m_bmBackGround;
CBrush m_brBackGround;
CBrush *m_pbrBackGround;
m_bmBackGround.LoadBitmap(IDB_BITMAP5);
//位图背景作为画刷
m_brBackGround.CreatePatternBrush(&m_bmBackGround);
m_pbrBackGround = MemDC.SelectObject(&m_brBackGround);
//绘制星期矩形
for (int i = 0; i < 7; i++)
{
MemDC.Rectangle(int((RECWIDTH * i + WEEKTOTOP - 1) * m_fSizeX),
int(WEEKTOTOP * m_fSizeY),
这是OnDraw函数,我想先用MemDC画一个虚拟的图,然后再用BITBLT复制给pDC,但这样怎么我的视图里都是白色的了?什么都没画出来,各位帮忙看看.
我这么做的目的是,这样做可以避免客户区频繁闪烁的问题,大家帮我看看问题出在哪吧.谢谢
void CCalendarView::OnDraw(CDC* pDC)
{
CCalendarDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
RECT rect;
GetClientRect(&rect);
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
//设置默认焦点为今天
m_btnDateChange[m_iTaborder].SetFocus();
//创建设置字体
CFont m_font,*m_pOldFont;
m_font.CreateFont(int(20 * m_fSizeY),
int(7 * m_fSizeX),
0,
0,
FW_BOLD,
FALSE,
FALSE,
0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS,
_T( "Arial "));
m_pOldFont = pDC-> SelectObject(&m_font);
CString strDate;
strDate.Format( "%4d年%2d月 ", m_odtCurrentDate.GetYear(), m_odtCurrentDate.GetMonth());
MemDC.TextOut(int(320 * m_fSizeX), int(BUTTONTOTOP * m_fSizeY), strDate);
//根据视口变化动态调整按钮控件大小
int i_Size[5] = {50, 105, 520, 610, 665};
for(int j=0; j <5; j++)
{
m_btnDateChange[j].MoveWindow(
int(i_Size[j] * m_fSizeX),
int(BUTTONTOTOP * m_fSizeY),
int(BUTTONWIDTH * m_fSizeX),
int(BUTTONHEIGHT * m_fSizeY),
true
);
}
/* 绘制日历第一行 */
CString str[7] = { "Sun ", "Mon ", "Tue ", "Wed ", "Thu ", "Fri ", "Sat "};
CBitmap m_bmBackGround;
CBrush m_brBackGround;
CBrush *m_pbrBackGround;
m_bmBackGround.LoadBitmap(IDB_BITMAP5);
//位图背景作为画刷
m_brBackGround.CreatePatternBrush(&m_bmBackGround);
m_pbrBackGround = MemDC.SelectObject(&m_brBackGround);
//绘制星期矩形
for (int i = 0; i < 7; i++)
{
MemDC.Rectangle(int((RECWIDTH * i + WEEKTOTOP - 1) * m_fSizeX),
int(WEEKTOTOP * m_fSizeY),