在对话框上加了一个控件,想用它来定位,在它内部再切分成若干个小矩形,用来模拟窗口的切割分屏:
![VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 加菲-高清视频会议软件 VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 加菲-高清视频会议软件](http://img.ph.126.net/tx3lQB0TE8P5QmSwoJ6gtw==/3399091818758809561.jpg)
![VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 加菲-高清视频会议软件 VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 加菲-高清视频会议软件](http://img39.ph.126.net/HlFWCMEwEt_FW43jSYRKZA==/3145764339720290529.jpg)
暂时放到搜索按钮的响应函数中吧:
void CDlgControl::OnButtonSearch()
{
// TODO: Add your control notification handler code here
CRect rectStaticScreen;
this->GetDlgItem(IDC_STATIC_SCREEN)->GetWindowRect(&rectStaticScreen);
CString str;
str.Format("%d,%d;%d,%d",rectStaticScreen.left,rectStaticScreen.top,rectStaticScreen.right,rectStaticScreen.bottom);
// AfxMessageBox(str);
CClientDC dc(this);
dc.Rectangle(rectStaticScreen);
CBrush fillBrush(RGB(122,122,122));
dc.FillRect(&rectStaticScreen,&fillBrush);
dc.TextOut(rectStaticScreen.left,rectStaticScreen.top,"123",sizeof("123")-1);
}
运行得到如下效果:
![VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 加菲-高清视频会议软件 VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 加菲-高清视频会议软件](http://img.ph.126.net/y9JWUzMDyAN0okPB9WDm0w==/2320198233026349521.jpg)
很明显歪到了一边,把主对话框拉动一下,再单击搜索按钮,会发现一个很有意思的事情:
![VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 加菲-高清视频会议软件 VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 加菲-高清视频会议软件](http://img1.ph.126.net/ncpDU8LsWkI08dzs9_7_Rg==/3197274260458472129.jpg)
看到灰色块的位置有了变动,因为一开始就猜到是坐标转换的原因,所以找到一个函数,来试一下:
ScreenToClient(&rectStaticScreen);//转换坐标
把代码重新改写:
void CDlgControl::OnButtonSearch()
{
// TODO: Add your control notification handler code here
CRect rectStaticScreen;
this->GetDlgItem(IDC_STATIC_SCREEN)->GetWindowRect(&rectStaticScreen);
CString str;
str.Format("%d,%d;%d,%d",rectStaticScreen.left,rectStaticScreen.top,rectStaticScreen.right,rectStaticScreen.bottom);
{
// TODO: Add your control notification handler code here
CRect rectStaticScreen;
this->GetDlgItem(IDC_STATIC_SCREEN)->GetWindowRect(&rectStaticScreen);
CString str;
str.Format("%d,%d;%d,%d",rectStaticScreen.left,rectStaticScreen.top,rectStaticScreen.right,rectStaticScreen.bottom);
ScreenToClient(&rectStaticScreen);//转换坐标
CClientDC dc(this);
dc.Rectangle(rectStaticScreen);
CBrush fillBrush(RGB(122,122,122));
dc.FillRect(&rectStaticScreen,&fillBrush);
dc.TextOut(rectStaticScreen.left,rectStaticScreen.top,"123",sizeof("123")-1);
CClientDC dc(this);
dc.Rectangle(rectStaticScreen);
CBrush fillBrush(RGB(122,122,122));
dc.FillRect(&rectStaticScreen,&fillBrush);
dc.TextOut(rectStaticScreen.left,rectStaticScreen.top,"123",sizeof("123")-1);
}
再次运行一下:
![VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 加菲-高清视频会议软件 VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 加菲-高清视频会议软件](http://img305.ph.126.net/fSnnyj7Wtb7MoNAPLEuDuw==/3757972414064107528.jpg)
哇,刚刚好!
接下来,就可以在这个灰色块的内部创建新的矩形了,具体的实现放到下一个文章里,一会儿给出链接
更详细的坐标转换放到其它文章里吧,这个是我实际遇到的一个例子,所以记录下来了,高手们不要拍砖
再比如,下载了个代码,动态创建了一个控件,但是它的位置是用数字指定的,如果要改位置,只能改数字。我就想,创建一个static,用它来定位。
原来的代码:
CRect rcx(50,280,100,300);
m_ShowTextProgressCtrl.Create(WS_CHILD|WS_BORDER|PBS_VERTICAL,rcx,this,55000);
如果要移动它,要修改50,280,100,300这些数字。
![VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 视频会议 - 加菲 VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 视频会议 - 加菲](http://img8.ph.126.net/owRlO87_PFRTkAEjEgKyxg==/647673921428282618.jpg)
现在我创建了一个static,把它拖动到合适的位置:
![VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 视频会议 - 加菲 VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 视频会议 - 加菲](http://img6.ph.126.net/w1Di-TGCiJJNm-pPw1g89g==/2888496211021816996.jpg)
CRect rcx(50,280,100,300);
GetDlgItem(IDC_STATIC_P)->GetClientRect(&rcx);
m_ShowTextProgressCtrl.Create(WS_CHILD|WS_BORDER|PBS_VERTICAL,rcx,this,55000);
结果移动的位置不理想:
![VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 视频会议 - 加菲 VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 视频会议 - 加菲](http://img5.ph.126.net/UyisQVQr-56t061euCc1uw==/98797716842503215.jpg)
CRect rcx(50,280,100,300);
GetDlgItem(IDC_STATIC_P)->GetWindowRect(&rcx);
m_ShowTextProgressCtrl.Create(WS_CHILD|WS_BORDER|PBS_VERTICAL,rcx,this,55000);
这样就对了:
![VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 视频会议 - 加菲 VC6.0,矩形的坐标转换ScreenToClient(rectStaticScreen); - 加菲 - 视频会议 - 加菲](http://img0.ph.126.net/KeEhM0QVG44Fu3JMlpJsiA==/2793639143870319640.jpg)