zoukankan      html  css  js  c++  java
  • 一个关于MoveWindow,ScreenToClient,ClientToScreen,GetWindowRect,GetClientRect的简单问题

    好久没做MFC的开发了,最近在研究openCV关于图像处理的东西。

    于是乎用MFC写了一个测试程序。写了一个CStaticPic继承自CStatic,来显示图片。

    问题出来了,我想在CSaticPic的成员函数里显示图片的时候自动判断图片大小,并调整显示控件的大小。

    于是乎调来调去,大约20分钟没出来结果。

    不得不把以前很熟的东西再到网上去查。一查便知,一个低级错误。

    把GetWindowRect与GetClientRect混了,转来转去的不成功。

    GetClientRect的CRect是相对它的窗口的客户区的原点而言的,即它的左上角坐标总是(0,0),大小总是客户区的长宽。GetWindowRect得到的CRect则是相对于屏幕坐标而言的,它的左上角坐标就是窗口在屏幕上的左上角坐标,它的大小就是整个窗口的大小。 
    ClientToScreen,可以把一个CPoint对象或CRect对象的坐标从客户区坐标系(以客户区左上角为原点)变换为屏幕坐标系(以屏幕左上角为原点)。

    而调用MoveWindow的时候总是以ParentWindow容器为参照的坐标系统。

    代码如下:

    void CStaticPic::Draw(IplImage* img)
    {
        RECT rtWin, rtRect = {0};
        GetWindowRect(&rtWin);
        GetParent()->ScreenToClient(&rtWin);
        CvSize size = cvGetSize(img);
        rtWin.right = rtWin.left + size.width;
        rtWin.bottom= rtWin.top + size.height;
        MoveWindow(&rtWin, 0);

        rtRect.right = size.width;
        rtRect.bottom= size.height;

        CvvImage cimg;
        cimg.CopyOf(img);
        cimg.DrawToHDC(GetHdc(),&rtRect);
        Invalidate();
    }



  • 相关阅读:
    httpcontext in asp.net unit test
    initialize or clean up your unittest within .net unit test
    Load a script file in sencha, supports both asynchronous and synchronous approaches
    classes system in sencha touch
    ASP.NET MVC got 405 error on HTTP DELETE request
    how to run demo city bars using sencha architect
    sencha touch mvc
    sencha touch json store
    sencha touch jsonp
    51Nod 1344:走格子(贪心)
  • 原文地址:https://www.cnblogs.com/cplusplus/p/2854626.html
Copyright © 2011-2022 走看看