做一个显示图片的项目,鼠标点中的像素颜色与经鼠标坐标换算后从位图中求出的像素颜色总是不一致,之间存在一个固定的位置偏移量,后来发现可能是装图片的静态控件有边框宽度,我在坐标换算时没有考虑这个问题。假设有一个ID为IDC_STATIC的控件,现在我想知道如何获得静态控件的边框宽度?

解决方案 »

  1.   

    遍历所有静态控件,然后getwindowtext()取得他的文字,然后与你要取得的字体做比较。是的话,然后就getclientrect就可以获取了
      

  2.   

    你现在是怎么做的
    GetClientRect就应该是没有边框的
      

  3.   

    你把默认的IDC_STATIC 改成别的ID号。然后GetClientRect就应该可以了
      

  4.   

    GetClientRect可以得到边框的宽度吗?我是指的那个边框的宽,不是整个控件的尺寸啊?
      

  5.   

    其实我要做的事很简单,当鼠标点击控件中的图片时得到一个鼠标的位置,再根据这个位置找到位图中相应的像素点,把这个像素点的值求出来,现在发现一个问题,比如我鼠标的横坐标算出是n,读取的却是位图中横坐标是n+3(或者是n+2,我没有仔细检验,总之是每次都偏移了2-3个像素点)这个点的像素灰度。CPoint   Point_1; 
    GetCursorPos(&Point_1);
    CRect rct1;
    GetDlgItem(IDC_STATIC1)->GetWindowRect(&rct1);//IDC_STATIC1就是我画了图的静态控件
    long temp_distance=Point_1.x-rct1.left;//temp_distance存的是位图中的横坐标位置。我发现temp_distance的值总是有一个2-3像素的误差。写成long temp_distance=Point_1.x-rct1.left-3;好像就对了,我怀疑这个3就是IDC_STATIC1边框的宽度。
      

  6.   

    换句话说,我想求的是一个静态控件的BorderWidth
      

  7.   

    CRect CControlBar::GetBorders();  
    CRect的上下左右分别是上下左右边框的宽度  
    SetBorders(CRect * rc)设置宽度MainFrame的边框宽度可以间接得到,  
    先GetWindowRect(&rc1);  
    再GetClientRect(&rc2);  
    再ClientToScreen(&rc2);  
    然后width = rc2.left - rc1.left;GetSystemMetrics(xxxx)  
    当xxxx=SM_CYFRAME,获得边框宽度