15,979
社区成员
发帖
与我相关
我的任务
分享
void CImgCaptureDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
GetDlgItem(IDC_X)->GetWindowText(StartPoint_X);
GetDlgItem(IDC_Y)->GetWindowText(StartPoint_Y);
GetDlgItem(IDC_WIDTH)->GetWindowText(ROI_Width);
GetDlgItem(IDC_HEIGHT)->GetWindowText(ROI_Height);
x = _ttoi(StartPoint_X);
y = _ttoi(StartPoint_Y);
w = _ttoi(ROI_Width);
h = _ttoi(ROI_Height);
//picture control中直观显示ROI区域
CWnd *m_pWndCap = GetDlgItem(IDC_STATICVIDEO); //IDC_STATICVIDEO为text control控件的ID
CRect rc;
m_pWndCap->GetWindowRect(&rc);
ScreenToClient(&rc);
//绝对坐标,坐标就是相对于视频控件的坐标了,要画多大可以自己修改
int x1 = rc.left+x;
int y1 = rc.top+y;
int x2 = x1+w;
int y2 = y1+h;
//调用矩形框绘制函数
DrawRectangle(m_hWnd, x1, y1, x2, y2);
}
void DrawRectangle(HWND m_HWnd, int x1, int y1, int x2, int y2)
{
TRACE("x1,y1,x2,y2%d,%d,%d,%d",x1,y1,x2,y2);
HDC hdc = ::GetDC(m_HWnd);
PAINTSTRUCT ps;
::BeginPaint( m_HWnd, &ps );
HPEN hPen;
hPen=CreatePen(PS_SOLID,3,RGB(255,255,0)); //创建画笔
SelectObject(hdc,hPen);
SelectObject(hdc,(HBRUSH)GetStockObject(NULL_BRUSH)); //不填充
//画Rect
Rectangle(hdc, x1, y1, x2, y2);
DeleteObject(hPen);
::EndPaint( m_HWnd, &ps );
::ReleaseDC( m_HWnd, hdc );
}
HWND hWnd = m_pWndCap->GetSafeHdc();或者
HWND hWnd = m_pWndCap->m_hDC;
[/quote]
HWND hWnd=m_pWndCap->GetSafeHwnd(); //是不是这样?GetSafeHdc()好像不正确。
另外:
CWnd *m_pWndCap = GetDlgItem(IDC_STATICVIDEO);// IDC_为绘制矩形框控件的ID
HWND hWnd=m_pWndCap->GetSafeHwnd();
if(hWnd == NULL)
{
MessageBox("没有获取到句柄!");
return;
}
CRect rc;
m_pWndCap->GetWindowRect(&rc);
m_pWndCap->ScreenToClient(&rc);
//绝对坐标,坐标就是相对于视频控件的坐标了,要画多大可以自己修改
int x1 = rc.left+x;
int y1 = rc.top+y;
int x2 = x1+w;
int y2 = y1+h;
//调用矩形框绘制函数
DrawRectangle(hWnd, x1, y1, x2, y2);
上面的代码放在OnPaint函数中哪里有问题?怎么还是没有矩形框显示,真是要哭瞎了。[/quote]
GetSafeHdc()怎么会不对呢!HWND hWnd = m_pWndCap->GetSafeHdc();或者
HWND hWnd = m_pWndCap->m_hDC;
[/quote]
HWND hWnd=m_pWndCap->GetSafeHwnd(); //是不是这样?GetSafeHdc()好像不正确。
另外:
CWnd *m_pWndCap = GetDlgItem(IDC_STATICVIDEO);// IDC_为绘制矩形框控件的ID
HWND hWnd=m_pWndCap->GetSafeHwnd();
if(hWnd == NULL)
{
MessageBox("没有获取到句柄!");
return;
}
CRect rc;
m_pWndCap->GetWindowRect(&rc);
m_pWndCap->ScreenToClient(&rc);
//绝对坐标,坐标就是相对于视频控件的坐标了,要画多大可以自己修改
int x1 = rc.left+x;
int y1 = rc.top+y;
int x2 = x1+w;
int y2 = y1+h;
//调用矩形框绘制函数
DrawRectangle(hWnd, x1, y1, x2, y2);
上面的代码放在OnPaint函数中哪里有问题?怎么还是没有矩形框显示,真是要哭瞎了。HWND hWnd = m_pWndCap->GetSafeHdc();或者
HWND hWnd = m_pWndCap->m_hDC;
m_pWndCap->ScreenToClient(&rc);
其实你完全可以直接拿客户区就是了,没必要拿窗口区域再去转换m_pWndCap->GetClientRect(&rc)也可以