我想在范围为(0,0,300,300)的一个静态文本上作图,我的思路是这样的:
CDC MemDC;//定义设备对象
MemDC.CreateCompatibleDC(NULL);//建立与屏幕兼容的内存显示设备
MemBitmap.CreateCompatibleBitmap(pDC,m_iClientW,m_iClientH);//建立与屏幕兼容的位图
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
CRect clientRect;
CWnd *pwnd = GetDlgItem(IDC_STATIC1);//获得静态文本的ID
MemDC.Rectangle(clientRect); //在这个静态文本中显示
希望前辈帮看看还有哪些地方不妥,小弟谢过了!40分送上
CDC MemDC;//定义设备对象
MemDC.CreateCompatibleDC(NULL);//建立与屏幕兼容的内存显示设备
MemBitmap.CreateCompatibleBitmap(pDC,m_iClientW,m_iClientH);//建立与屏幕兼容的位图
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
CRect clientRect;
CWnd *pwnd = GetDlgItem(IDC_STATIC1);//获得静态文本的ID
MemDC.Rectangle(clientRect); //在这个静态文本中显示
希望前辈帮看看还有哪些地方不妥,小弟谢过了!40分送上
这句话写进来没有用上。。
HWND hWnd = GetDlgItem(IDC_STATIC1)->m_hWnd; //static控件的窗口句柄
HDC hDC = ::GetDC(hWnd); //得到窗口的设备内容句柄
RECT rect;
::GetClientRect(hWnd, &rect); //static控件的大小
HBRUSH hBrush = CreateSolidBrush(RGB(255, 0, 0)); //创建一红色画刷
::FillRect(hDC, &rect, hBrush); //填充static控件 DeleteDC(hDC);
DeleteObject(hBrush);
要在Static控件上绘图,那么就要考虑两个东西
1.绘制时需要的hDC或者dc
2.绘图区域的范围。
清楚之后,参看lizhigang34的代码这个问题就很简单了。
试试啊
void CNetWatcherViewerView::DrawCurve(CDC* pDC, unsigned int channelIndex)
{
CDC MemDC;
CRect clientRect; CBitmap MemBitmap;
MemDC.CreateCompatibleDC(pDC);
CWnd* pWnd = GetDlgItem(IDC_STATIC1);
pWnd->GetClientRect(&clientRect);
pDC=pWnd->GetDC();
MemBitmap.CreateCompatibleBitmap(pDC,m_iClientW,m_iClientH);
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
MemDC.FillSolidRect(0,0,m_iClientW,m_iClientH,RGB(0,0,0));
CPen newPen(PS_ENDCAP_ROUND , 2, RGB(255,255,255));
CPen* pOldPen = MemDC.SelectObject(&newPen);
-----------------画图部分略------------------
pDC->BitBlt(30,30,clientRect.Width(),clientRect.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldPen);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}
现在运行之后画好的图不在静态文本中,而是在窗体上,为什么没装到静态文本中呢?谢谢