怎么样才能把图画在控件内,不画出界呢

diablon 2003-04-27 09:38:14
我在对话框上有一个frame控件,我想在这个控件上画,
CWnd * pWnd = GetDlgItem(IDC_FRAME_BK);
CDC * pDC = pWnd->GetDC();
但是,很容易就画到这个控件外面去了,怎么样才能
限制它只在控件范围内画呢
...全文
128 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ukyoking 2003-04-29
  • 打赏
  • 举报
回复
pWnd->GetClientRect(&rc);
sorry,sorry, 昨天说错了,不好意思
ukyoking 2003-04-28
  • 打赏
  • 举报
回复
CWnd * pWnd = GetDlgItem(IDC_FRAME_BK);
CDC * pDC = pWnd->GetDC();
CRect rc;
pWnd->GetWindowRect(&rc);
CRgn rgn;
rgn.CreateRectRgnIndirect(&rc);
pDC->SelectClipRgn(&rgn);
rgn.DeleteObject();
diablon 2003-04-28
  • 打赏
  • 举报
回复
我用的是pDC->MoveTo(0, 0);
pDC->LineTo(x, y);
这里的x和y是变化的,有时x或y就是负值,我希望把超过
控件外的不见,而不只是简单地不画这条线
diablon 2003-04-28
  • 打赏
  • 举报
回复
可我不是画图片,我是画线
body 2003-04-28
  • 打赏
  • 举报
回复
利用CRegion(HREGION)就行了吧?会自动剪切的。如果是粘贴图片的话。
yuga 2003-04-28
  • 打赏
  • 举报
回复
void CNewDlg::PaintFingerImg(CStatic *pFingerImg, BYTE *pImg,int nWidth,int nHeight)
{
CRect rcDIB,rcDest;
int DestW,DestH;

ASSERT(pImg);
CDC *pDC1=pFingerImg->GetDC();

CDC MemDC;
MemDC.CreateCompatibleDC(pDC1);

HBITMAP hBitmap1 = CreateDdb(pDC1->m_hDC, nWidth,
nHeight, pImg, 1);

ASSERT(hBitmap1);
CBitmap *pBmp1=CBitmap::FromHandle(hBitmap1);
CBitmap *pOldBmp=(CBitmap *)MemDC.SelectObject(pBmp1);

DeleteObject(hBitmap1);

rcDIB.left=0;
rcDIB.right=nWidth;
rcDIB.top=0;
rcDIB.bottom=nHeight;

rcDest.left=0;
rcDest.top=0;

CRect TstRect;
pFingerImg->GetClientRect(&TstRect);

DestW=TstRect.Width();
DestH=TstRect.Height();

float rate,rate1;
if(DestW>=nWidth&&DestH>=nHeight)
{
rcDest.right=nWidth-1;
rcDest.bottom=nHeight-1;
}
else if(DestW>=nWidth&&DestH<nHeight)
{
rate=DestH*1.0/nHeight;
rcDest.right=(int)(nWidth*rate-1);
rcDest.bottom=DestH-1;
}
else if(DestW<nWidth&&DestH>=nHeight)
{
rate=DestW*1.0/nWidth;
rcDest.right=DestW-1;
rcDest.bottom=int(nHeight*rate-1);
}
else
{
rate=DestW*1.0/nWidth;
rate1=DestH*1.0/nHeight;
if(rate>rate1)
rate=rate1;

rcDest.right=nWidth*rate-1;
rcDest.bottom=nHeight*rate-1;
}

pDC1->StretchBlt(1, 1, nWidth, nHeight,
&MemDC, 0, 0, nWidth, nHeight, SRCCOPY);

MemDC.SelectObject(pOldBmp);
pFingerImg->ReleaseDC(pDC1);

return;
}
diablon 2003-04-28
  • 打赏
  • 举报
回复
那个应该是GetClientRect,现在果然画出来了,多谢
ukyoking 2003-04-28
  • 打赏
  • 举报
回复
no problem,just do it!!!
diablon 2003-04-28
  • 打赏
  • 举报
回复
呵,别来气,我会去试的,主要是现在上网的地方不是我自己的地方,
除了上网的东西,其它什么都没装。所以我一次问清楚了,回去
仔细试。
ukyoking 2003-04-28
  • 打赏
  • 举报
回复
ft,难道你不会去试试
diablon 2003-04-28
  • 打赏
  • 举报
回复
是说这样设定了区域之后,就已经关联了?

19,469

社区成员

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

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