在MFC单文档程序编程过程中怎么获取View类窗口的大小?
框架窗口大小又如何获取?
急求教育!
谢谢热心人了!
在线等!
QQ:490959278

解决方案 »

  1.   

    GetWindowRect就行了,在View中调用得到View的大小,在框架类中调用得到框架的大小。
      

  2.   

    /*RECT rect;
    GetCurronWindowRect(&rect);btXiaoditu.Create("小地图",WS_CHILD|BS_DEFPUSHBUTTON,
    CRect(rect.right-100,rect.bottom-100,rect.right,rect.bottom),this,1);
    btXiaoditu.ShowWindow(SW_SHOWNORMAL);*/
    我想通过上面代码让一个按钮控件始终停靠在窗口右下角,执行结果是按钮居无定所
      

  3.   

    GetCurronWindowRect(&rect);
    =======\
    有这个API吗?
      

  4.   

    GetWindowRect(&rect);btXiaoditu.Create("小地图",WS_CHILD|BS_DEFPUSHBUTTON,
     CRect(rect.right-100,rect.bottom-100,rect.right,rect.bottom),this,1);
    btXiaoditu.ShowWindow(SW_SHOWNORMAL);是我不小心拷贝错了。应该是GetWindowRect(&rect)。
      

  5.   

    我想通过上面代码让一个按钮控件始终停靠在窗口右下角,执行结果是按钮居无定所
    =======
    一个可能是你得到是相对于屏幕的尺寸,所以可以试试ScreenToClient将它先转过来再用。
      

  6.   

    我是初学者,不知道用ScreenToClient怎么转,麻烦给例子代码看看。
      

  7.   

    这个函数放在哪啊?怎么组合利用啊?不要GetWindowRect(&rect)的话button不能显示。
      

  8.   

    btXiaoditu.Create("小地图",WS_CHILD|BS_DEFPUSHBUTTON,
     CRect(rect.right-100,rect.bottom-100,rect.right,rect.bottom),this,1);
    btXiaoditu.ShowWindow(SW_SHOWNORMAL);
    ========================
    你这段代码加在什么地方的啊,另外按钮最后创建的位置在什么地方啊?
      

  9.   

    具体怎么用,说详细一点,谢谢!
    我试了用GetWindowRect(&rect)获取屏幕大小之后直接用ScreenToClient(&rect)重复运行结果和还是一样button没固定位置。
      

  10.   

    代码是在CZF1View里面的:
    int CZF1View::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CView::OnCreate(lpCreateStruct) == -1)
    return -1; RECT rect;
    //ScreenToClient(&rect);
    GetWindowRect(&rect);
    btTouxiang.Create("头像",WS_CHILD|BS_DEFPUSHBUTTON,
    CRect(rect.right-100,rect.bottom-100,rect.right,rect.bottom),this,1);
    btTouxiang.ShowWindow(SW_SHOWNORMAL); return 0;
    }void CZF1View::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    a=point.x;
    b=point.y;
    str.Format("x:%d,y:%d",a,b);
    /*((CMainFrame*)GetParent())->*/btTouxiang.SetWindowText(str);
    CView::OnMouseMove(nFlags, point);
    }
      

  11.   

    我想应该是在OnCreat函数中视类的窗口还没有创建完成,所以用GetWindowRect得到的数值是不确定的,所以造成你所说的问题。
      

  12.   

    给你一个成功的例子,不过是用自定义消息完成的,你注意红色部分。
    #define WM_MY WM_USER+100 //自定义消息
    IMPLEMENT_DYNCREATE(CZF1View, CView)BEGIN_MESSAGE_MAP(CZF1View, CView)
    // 标准打印命令
    ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
    ON_WM_CREATE()
    ON_MESSAGE(WM_MY,OnMyMessage)//加自定义消息的映射
    END_MESSAGE_MAP()int CZF1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CView::OnCreate(lpCreateStruct) == -1)
    return -1;
        PostMessage(WM_MY);//在OnCreate中向自己发送WM_MY消息
    return 0;
    }LRESULT CZF1View::OnMyMessage(WPARAM, LPARAM)
    { RECT rect;
    GetWindowRect(&rect);
    ScreenToClient(&rect);
    m_Button.Create(_T("kkkk"),WS_CHILD|BS_DEFPUSHBUTTON,CRect(rect.right-100,rect.bottom-100,rect.right,rect.bottom),this,1);
    m_Button.ShowWindow(SW_SHOWNORMAL);
       return 0;
    }

    //上面是自定义消息的处理,在里面创建,ScreenToClient还是要的。public:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg LRESULT OnMyMessage(WPARAM,LPARAM);
    //这个加在视图类的头文件中,主要是下面红色的那个
      

  13.   

    经过修改,编译没报错,运行时出现问题了:Debug Assertion Failed。
      

  14.   

    经过修改,编译没报错,运行时出现问题了:Debug Assertion Failed。
    =========
    你怎么改的啊?
    我上面贴的代码应该没有问题,我试过的。
      

  15.   

    我错了,漏了增加消息映射导致的内存泄漏。
    谢谢你了!
    不过你的方法设置的bottom位置是固定在窗口初始大小的当前屏幕的右下角的,通过拖动边框改变窗口大小之后bottom的位置没跟着边框移动。
    怎样弄一个不可调边框的窗口?
      

  16.   

    不过你的方法设置的bottom位置是固定在窗口初始大小的当前屏幕的右下角的,通过拖动边框改变窗口大小之后bottom的位置没跟着边框移动。
    怎样弄一个不可调边框的窗口?
    =========
    不可调边框窗口你要改属性。
    建议你处理一下WM_SIZE消息,在WM_SIZE消息中用MoveWindow移动按钮,让按钮始终放在你想要的那个位置。
      

  17.   

    用VC6向导生成的MFC当文档应用程序,怎么修改边框属性?