图形恢复问题,谢谢

lgytj 2004-01-04 10:22:09
我在dialog的一个picture控件上绘图,图形能正常显示,但如果有其他窗口遮蔽图形就被擦掉了,我也用了Invalidate();但没用,请问应该怎么办?该用onpaint()吗?在哪里用?怎么写?谢谢
...全文
23 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
huanyun 2004-01-04
  • 打赏
  • 举报
回复
在OnPaint里面写 你的绘图要先放到一个内存兼容DC中
然后Bitbit出来
lgytj 2004-01-04
  • 打赏
  • 举报
回复
兄弟,又是你,呵呵,谢谢,上次没仔细看:(
lambochan 2004-01-04
  • 打赏
  • 举报
回复
晕,放OnPaint()呀..(那个帖后面有呀,再贴一次吧~~,修改过的)

void COKDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
if(m_bIsShow)//位图已输出的话,遮住就重绘
Draw();
CDialog::OnPaint();
}
}

/*void COKDlg::OnButton1()
{
// TODO: Add your control notification handler code here
Draw();

}*/

void COKDlg::Draw()
{
CWnd *pWnd = GetDlgItem(IDC_XXXX);
CDC *pDC = pWnd->GetDC();

CDC dcMem;
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(pDC,300,300);
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOld = dcMem.SelectObject(&bitmap);

dcMem.FillRect(CRect(0,0,300,300),(CBrush *)dcMem.SelectStockObject(WHITE_BRUSH));
RECT *pRect=new RECT;
pWnd->GetClientRect(pRect);//这样GetClientRect
dcMem.Rectangle(pRect);
POINT *pP=new POINT;
pP->x=(pRect->bottom+pRect->top)/2;
pP->y=(pRect->left+pRect->right)/2;
//ClientToScreen(pP); //这两句需要吗?//这两句不需要
//ScreenToClient(pP);
dcMem.LineTo(*pP);
dcMem.TextOut(pP->x,pP->y,"111111");
pDC->BitBlt(0,0,pRect->right,pRect->bottom,&dcMem,0,0,SRCCOPY);

pWnd->ReleaseDC(pDC);//这样释放..
dcMem.SelectObject(pOld);
bitmap.DeleteObject();
dcMem.DeleteDC();

m_bIsShow = TRUE;//加个标记,初始化是FALSE,=TRUE为位图已输出;
}

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧