我想要找到一个static 控件所在的矩形范围~
把矩形染成紫色。
如下:
     CClientDC dc(this);
     CBrush a;
     a.CreatSolidBrush(RGB(255,0,255));
     Crect rect;
     CStatic *p=(CStatic*)GetDlgItem(IDB_STATIC1);  //IDC_STATIC1为对话框里的一个控件
     p->GetClientRect(&rect);
     dc.FillRect(rect,&a);以上代码编译通过了,矩形也被染成了紫色~
但是所求的矩形不是static1的矩形的位置!!
位置不对啊~~~怎么解决呢??
请大家给出代码 帮帮我。谢谢~在线等................

解决方案 »

  1.   

    p->GetClientRect(&rect);
      dc.FillRect(rect,&a);
    =>
      p->GetClientRect(&rect);
    p->ClientToScreen(&rect);
    ScreenToClient(&rect);
     dc.FillRect(rect,&a);
      

  2.   

    CRect rect;
    GetDlgItem(IDB_STATIC1)->GetWindowRect(&rect);
      

  3.   

    CStatic* p=(CStatic*)GetDlgItem(IDC_STATIC1);
    CClientDC dc(p);//取得static控件的DC,否则将在父窗体上操作,static控件覆盖之,看不见了。
    CRect rect;
    p->GetClientRect(rect);
    CBrush a;
    a.CreateSolidBrush(RGB(255,0,255));
    dc.FillRect(rect,&a);
      

  4.   

    用 GetWindowRect():是不行的!!   ->DentistryDoctor(雅克医生<改行做程序员了>)
       谢谢你!!
       你的方法实现了。很好~~再次感谢!!!
      

  5.   

    GetClientRect取得的是static客户区的坐标,而dc是属于主窗口的,得到坐标必须转化为主窗口坐标,而且应该用GetWindowRect来取得static的大小,否则不能改变整个static的颜色。
      

  6.   

    补充:
    如果是在static控件父窗体上操作,则这样获得矩形范围:
    p->GetWindowRect(rect);
    this->ScreenToClient(rect);
    不过,在OnInitDialog函数中操作dc.FillRect(),似乎没有效果