【求助】关于主窗口重绘的问题
我的程序很简单,在子窗口中打开一幅图像并居中显示。
问题1:现在的现象是,图像可以正确打开并居中显示,子窗口默认是最大化的,当点击还原子窗口时,图像也能随之居中。但是,当通过拖拽窗口边框改变窗口大小时,图像可以重绘,但图像不能随之居中显示。
问题2:如果我点击框架主窗口的还原窗口时,子窗口的大小可以随之改变,但是子窗口中的图像不能重绘,拖动主窗口的边框来改变窗口大小时,子窗口中的图像也不能重绘。
求助:这是哪里的问题呀?
部分代码如下:
OnDraw方法代码:
m_pDib->Display方法代码:
拜托各位前辈了
问题1:现在的现象是,图像可以正确打开并居中显示,子窗口默认是最大化的,当点击还原子窗口时,图像也能随之居中。但是,当通过拖拽窗口边框改变窗口大小时,图像可以重绘,但图像不能随之居中显示。
问题2:如果我点击框架主窗口的还原窗口时,子窗口的大小可以随之改变,但是子窗口中的图像不能重绘,拖动主窗口的边框来改变窗口大小时,子窗口中的图像也不能重绘。
求助:这是哪里的问题呀?
部分代码如下:
OnDraw方法代码:
void Cdicomtest1View::OnDraw(CDC* pDC)
{
Cdicomtest1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rectClient;//客户端矩形
CBitmap bitmapTemp,*pOldBitmap;//定义位图对象
CDC* pMemDC=new CDC;//后备缓冲区
GetClientRect(rectClient);
//建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
bitmapTemp.CreateCompatibleBitmap(pDC, rectClient.Width(), rectClient.Height());
//建立与屏幕显示兼容的后备缓冲区
pMemDC->CreateCompatibleDC(pDC);
//将位图选入到后备缓冲区中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
pOldBitmap=pMemDC->SelectObject(&bitmapTemp);
//先用背景色将位图清除干净,这里我用的是黑作为背景,你也可以用自己应该用的颜色
pMemDC->FillSolidRect(&rectClient, RGB(0,0,0));
//绘图
if(!pDoc->m_pDib->IsEmpty())
pDoc->m_pDib->Display(pMemDC, rectClient, rectClient);
else
pMemDC->TextOutA(50, 50, (CString)"pDoc Empty error");
//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0, 0, rectClient.Width(), rectClient.Height(), pMemDC, 0, 0, SRCCOPY);
pMemDC->SelectObject(pOldBitmap);
ReleaseDC(pMemDC);
delete pMemDC;
}
m_pDib->Display方法代码:
BOOL CDib::Display(CDC* pDC, CRect rcDest, CRect rcSrc, DWORD dwRop)
{
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CRect win1;
AfxGetMainWnd()->GetActiveWindow()->GetClientRect(&win1);
int rcDestX=rcDest.Width()/2-GetWidth()/2;
int reDestY=rcDest.Height()/2-GetHeight()/2;
CBitmap* pOldBmp = MemDC.SelectObject(m_pBitmap);
CPalette* pOldPal = pDC->SelectPalette(m_pPalette, TRUE);
pDC->RealizePalette();
BOOL bSuccess = pDC->StretchBlt(rcDestX, reDestY,
rcDest.Width(), rcDest.Height(),
&MemDC,
rcSrc.left, rcSrc.top,
rcSrc.Width(), rcSrc.Height(),
dwRop);
MemDC.SelectObject(pOldBmp);
pDC->SelectPalette(pOldPal, TRUE);
return bSuccess;
}
拜托各位前辈了
...全文
相关推荐
MFC各种重绘漂亮按钮
这里面包含几种有特色的重绘按钮,代码注释清晰容易上手。
QT中动态曲线绘制(已经实现在主窗口中显示)
这个是我根据网上的一个想法编写的,主要是针对在主窗口中显示动态曲线,利用qt编写的!
VC++ MFC 绘图程序 圆 椭圆 多边形 矩形 重绘
VC++ MFC 绘图程序 橡皮筋功能 重绘 保存 绘图 分栏
C#Winform多个子窗口与主窗口之间任意切换不闪烁源码
本例程实现了同一按钮对子窗口的打开和关闭,多个子窗口与主窗口之间通过相应按钮任意切换,并且完美解决了切换窗口时引起的闪烁问题,在源代码中有详细的注释说明,希望对您有帮助。
vc6重绘的一个combo,可以显示超过combo长度的文本
vc6重绘的一个combo,可以显示超过combo长度的文本,用于当限制控件长度的时候,combo下拉选项显示不全的情况


界面
