篮球直播员柚子和晴子:VC中rect VC 控件及屏幕坐标获得设置
来源:百度文库 编辑:偶看新闻 时间:2024/10/06 01:22:33
rect和rgn有什么差别
RECT是结构体,表示一个矩形区域,里面有两个坐标信息,分别是左上角和右下角的两个点的信息,在这两个点之间形成一个矩形区域。
RGN 也是代表一个区域,默认情况下是一个矩形区域,但在程序使用时,有时候不想它是一个矩形区域,可以使它成为任意的一个区域,这时就要用到RGN 1、GetClientRect()得到的是:{top=0 bottom=110 left=0
right=364得到的是控件内部的可绘制区,加上边框的大小就是整个控件的大小
GetWindowRect()得到的是:{top=63 bottom=177 left=182
right=550}//这个是控件相对于对话框的位置和大小
2、资源里用字体单位来表示大小,窗口函数中用像素来表示。其关系可以用
MapDialogRect
来转换。或者用GetDialogBaseUnits获得对话框单位大小。
3、ClientToScreen 和 ScreenToClient
函数功能:
ClientToScreen函数将指定点的用户坐标转换成屏幕坐标
ScreenToClient把屏幕上指定点的屏幕坐标转换成用户坐标。
例如:想要得到文本框在对话框中左上角的坐标(即文本框左上角到对话框左上角的距离)
CRect rectEdit,rectDlg;
CWnd *pWnd=GetDlgItem(IDC_EDIT1);//获得文本框指针
pWnd->GetClientRect(rectEdit); //获得文本框矩形,左上角坐标(0,0)
pWnd->ClientToScreen(rectEdit); //转换到屏幕坐标,左上角坐标为文本框在屏幕的坐标
GetClientRect(rectDlg);//获得对话框矩形,左上角坐标(0,0)
ClientToScreen(rectDlg);//转换到屏幕坐标,左上角坐标为对话框在屏幕的坐标
int x=rectEdit.left-rectDlg.left;//他们的差即为文本框在对话框中的X坐标
int y=rectEdit.top-rectDlg.top;//他们的差即为文本框在对话框中的Y坐标
再如:
ClientToScreen( )是把窗口坐标转换为屏幕坐标
ScreenToClient( )是把屏幕坐标转换为窗口坐标
屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的
VC下,有些函数使用窗口坐标,有些使用屏幕坐标,使用时要分清。
一个窗体分为两部分:系统区和客户区
象标题和菜单之类的是系统区,由系统来控制,客户区就是你的地盘喽!!!
Width, Height 是指整体的,ClientWidth, ClientHeight是指客户区的,两者相减就是
系统区的啦!!!
ClientToScreen是把坐标从当前窗体转化成全屏幕的!!!
ScreenToClient是把屏幕坐标转化成相对当前窗体的坐标!!!! bool m_bIsLButtonDawn =false; void CDrawDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CWnd *pwnd=GetDlgItem(IDC_EDIT1);
CDC *pdc=pwnd->GetDC();
CRect rect;
this->ClientToScreen(&point);
pwnd->ScreenToClient(&point);
pwnd->GetClientRect(&rect); // HCURSOR hcur=::LoadCursorFromFile("pen.cur");
// SetClassLong(GetSafeHwnd(),GCL_HCURSOR,(LONG)hcur); // CPen pen(PS_INSIDEFRAME,-1,RGB(255,255,255));
// CPen* olePen=pdc->SelectObject(&pen);
if(rect.PtInRect(point) && m_bIsLButtonDawn )
{ pdc->DPtoLP(&m_fp);
pdc->MoveTo(m_fp);
pdc->DPtoLP(&point);
pdc->LineTo(point); }
m_fp=point;
// pdc->SelectObject(olePen);
ReleaseDC(pdc);
CDialog::OnMouseMove(nFlags, point);
} void CDrawDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bIsLButtonDawn =false;
// TODO: Add your message handler code here and/or call default
/**//*
CWnd *pwnd=GetDlgItem(IDC_EDIT1);
CDC *pdc=pwnd->GetDC();
CRect rect;
this->ClientToScreen(&point);
pwnd->ScreenToClient(&point);
pwnd->GetClientRect(&rect);
if(rect.PtInRect(point))
{
pdc->DPtoLP(&m_fp);
pdc->MoveTo(m_fp);
pdc->DPtoLP(&point);
pdc->LineTo(point);
}
ReleaseDC(pdc);*/
CDialog::OnLButtonUp(nFlags, point);
} void CDrawDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CWnd *pwnd=GetDlgItem(IDC_EDIT1);
CDC *pDC=pwnd->GetDC();
CRect rect;
this->ClientToScreen(&point);
pwnd->ScreenToClient(&point);
pwnd->GetClientRect(&rect);
if(rect.PtInRect(point))
{
m_fp.x=point.x;
m_fp.y=point.y;
}
ReleaseDC(pDC);
m_bIsLButtonDawn =true;
CDialog::OnLButtonDown(nFlags, point);
}
RECT是结构体,表示一个矩形区域,里面有两个坐标信息,分别是左上角和右下角的两个点的信息,在这两个点之间形成一个矩形区域。
RGN 也是代表一个区域,默认情况下是一个矩形区域,但在程序使用时,有时候不想它是一个矩形区域,可以使它成为任意的一个区域,这时就要用到RGN 1、GetClientRect()得到的是:{top=0 bottom=110 left=0
right=364得到的是控件内部的可绘制区,加上边框的大小就是整个控件的大小
GetWindowRect()得到的是:{top=63 bottom=177 left=182
right=550}//这个是控件相对于对话框的位置和大小
2、资源里用字体单位来表示大小,窗口函数中用像素来表示。其关系可以用
MapDialogRect
来转换。或者用GetDialogBaseUnits获得对话框单位大小。
3、ClientToScreen 和 ScreenToClient
函数功能:
ClientToScreen函数将指定点的用户坐标转换成屏幕坐标
ScreenToClient把屏幕上指定点的屏幕坐标转换成用户坐标。
例如:想要得到文本框在对话框中左上角的坐标(即文本框左上角到对话框左上角的距离)
CRect rectEdit,rectDlg;
CWnd *pWnd=GetDlgItem(IDC_EDIT1);//获得文本框指针
pWnd->GetClientRect(rectEdit); //获得文本框矩形,左上角坐标(0,0)
pWnd->ClientToScreen(rectEdit); //转换到屏幕坐标,左上角坐标为文本框在屏幕的坐标
GetClientRect(rectDlg);//获得对话框矩形,左上角坐标(0,0)
ClientToScreen(rectDlg);//转换到屏幕坐标,左上角坐标为对话框在屏幕的坐标
int x=rectEdit.left-rectDlg.left;//他们的差即为文本框在对话框中的X坐标
int y=rectEdit.top-rectDlg.top;//他们的差即为文本框在对话框中的Y坐标
再如:
ClientToScreen( )是把窗口坐标转换为屏幕坐标
ScreenToClient( )是把屏幕坐标转换为窗口坐标
屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的
VC下,有些函数使用窗口坐标,有些使用屏幕坐标,使用时要分清。
一个窗体分为两部分:系统区和客户区
象标题和菜单之类的是系统区,由系统来控制,客户区就是你的地盘喽!!!
Width, Height 是指整体的,ClientWidth, ClientHeight是指客户区的,两者相减就是
系统区的啦!!!
ClientToScreen是把坐标从当前窗体转化成全屏幕的!!!
ScreenToClient是把屏幕坐标转化成相对当前窗体的坐标!!!! bool m_bIsLButtonDawn =false; void CDrawDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CWnd *pwnd=GetDlgItem(IDC_EDIT1);
CDC *pdc=pwnd->GetDC();
CRect rect;
this->ClientToScreen(&point);
pwnd->ScreenToClient(&point);
pwnd->GetClientRect(&rect); // HCURSOR hcur=::LoadCursorFromFile("pen.cur");
// SetClassLong(GetSafeHwnd(),GCL_HCURSOR,(LONG)hcur); // CPen pen(PS_INSIDEFRAME,-1,RGB(255,255,255));
// CPen* olePen=pdc->SelectObject(&pen);
if(rect.PtInRect(point) && m_bIsLButtonDawn )
{ pdc->DPtoLP(&m_fp);
pdc->MoveTo(m_fp);
pdc->DPtoLP(&point);
pdc->LineTo(point); }
m_fp=point;
// pdc->SelectObject(olePen);
ReleaseDC(pdc);
CDialog::OnMouseMove(nFlags, point);
} void CDrawDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bIsLButtonDawn =false;
// TODO: Add your message handler code here and/or call default
/**//*
CWnd *pwnd=GetDlgItem(IDC_EDIT1);
CDC *pdc=pwnd->GetDC();
CRect rect;
this->ClientToScreen(&point);
pwnd->ScreenToClient(&point);
pwnd->GetClientRect(&rect);
if(rect.PtInRect(point))
{
pdc->DPtoLP(&m_fp);
pdc->MoveTo(m_fp);
pdc->DPtoLP(&point);
pdc->LineTo(point);
}
ReleaseDC(pdc);*/
CDialog::OnLButtonUp(nFlags, point);
} void CDrawDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CWnd *pwnd=GetDlgItem(IDC_EDIT1);
CDC *pDC=pwnd->GetDC();
CRect rect;
this->ClientToScreen(&point);
pwnd->ScreenToClient(&point);
pwnd->GetClientRect(&rect);
if(rect.PtInRect(point))
{
m_fp.x=point.x;
m_fp.y=point.y;
}
ReleaseDC(pDC);
m_bIsLButtonDawn =true;
CDialog::OnLButtonDown(nFlags, point);
}
怎样在vc中添加mapobject控件
VC++中,微调控件SPIN的问题?
vc中关于combo box控件问题
vc++中怎么加入Clist view控件
关于VC中控件变量的问题
VC中如何使用Winsocket控件?
VC中获得网络IP地址
VC++中,如何获得硬盘卷标号?
opengl 控件 vc
vc picture控件
VC++ CListCtrl控件问题!
vc++中的控件调用
VC没有控件面板?
VC++中怎样在CMainFrame或Cview上显示控件?
请问java中如何调用vc写成的.ocx控件?
VC中使用DBGrid和Mecrosoft RemoteData控件的问题!
在vc中如何修改按钮等控件的颜色??
vc++中,如何控制焦点在某个按钮控件上
在VC中,如何调用Date Time Picker控件
在VC中,如何调用Date Time Picker控件
VC中如何实现鼠标单击树形控件节点操作
vc编程中,combox控件不能接受某些字母
请问VC中怎么判断一个控件拥有焦点?
VC 中CEdit控件如何取得其中的字符