设置客户区的长和宽,并去掉滚动条。请指点!谢谢!

解决方案 »

  1.   

    CWnd::CalcWindowRect
    CWnd::SetWindowPos至于去掉滚动条是什么意思我就不知道了
      

  2.   

    SetWindowPos( HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );
    uFlags = SWP_DRAWFRAME |SWP_FRAMECHANGED;
      

  3.   

    我能设置窗体的大小和位置,我想知道的是 client area 怎样设置或计算。拜托各位不吝赐教!    系统生成的窗体下面有 scrollbar 而我不想要这个东东,请问怎样去掉它?
      

  4.   

    RECT rc;
    AdjustWindwRect(&rc. WS_CHILD, FALSE);
    SetWindowPos(hWnd, HWND_TOP, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_SHOWWINDOW);
    可以将客户设置为想要的大小。
      

  5.   

    如下即可:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    if( !CFrameWnd::PreCreateWindow(cs) )
    return FALSE; cs.cx=624;  //根据你的窗体大小进行调整
    cs.cy=520;  //根据你的窗体大小进行调整 cs.style&=~FWS_ADDTOTITLE;
    return TRUE;
    }
      

  6.   

    重载CView;;OnCreate或CDialog::OnCreate
      

  7.   

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    { if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    return -1;
    CRect rc;
    rc.left=lpCreateStruct->x;
    rc.top=lpCreateStruct->y;
    rc.right=700;//设置客户区的宽度
    rc.bottom=300;//设置客户区的高度 CalcWindowRect(&rc);
    MoveWindow(&rc);         //... return 0;
    }
      

  8.   

    我来给大家解释以下,ClientArea的区域设置原理。
    1、查看
    CYourFrameWnd::OnSize(UINT nType,int x,int y)
    {
        CFrameWnd::OnSize(..);//设置的过程在此
    }
    将该行注释掉,就变成了
    CYourFrameWnd::OnSize(UINT nType,int x,int y)
    {
       // CFrameWnd::OnSize(..);
       YourToolbar.MoveWindow(..);
       YourStatusbar.MoveWindow(..);
       YourView.MoveWindow(..);
    }
    至于ScrollBar的存在不是Frame里面的,是YourScrollView的。
    换成CYourView:public CView即可。
      

  9.   

    你现在正打开的IE窗口就是SDI,明白了就记得给分啊??
      

  10.   

    搞笑!
    楼上的各位:楼主要的是定制sdi的client的size,而不是sdi的window size
    不知道各位是没有看明白,还是不会呢?mapping the message:WM_GETMINMAXINFO
    ----------------------------------------------------
    void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
    {
    // 1 - Let the default window proc fill the MINMAXINFO structure
    CFrameWnd::OnGetMinMaxInfo(lpMMI);

    // Calculate the "non-client overhead" of the frame window
    CRect rectClient;
    GetClientRect( &rectClient ); CRect rectWindow;
    GetWindowRect( &rectWindow ); int nWidthOverhead = rectWindow.Width() - rectClient.Width();
    int nHeightOverhead = rectWindow.Height() - rectClient.Height(); // 2 - Modify the MINMAXINFO structure to reflect our
    // size limits // Here we want a minimum CLIENT size of 200x50 pixels
    // and a maximum CLIENT size of 400x200 pixels lpMMI->ptMinTrackSize.x = 200 + nWidthOverhead;
    lpMMI->ptMinTrackSize.y = 50 + nHeightOverhead; lpMMI->ptMaxTrackSize.x = 400 + nWidthOverhead;
    lpMMI->ptMaxTrackSize.y = 200 + nHeightOverhead;

    }
      

  11.   

    回复人: richmain(吕起民) ( ) 信誉:95  2003-03-05 22:08:00  得分:0 
     
     
      你现在正打开的IE窗口就是SDI,明白了就记得给分啊??
      
     
    ------
    我现在用myie2的外壳浏览器,那还是SDI吗?:)
      

  12.   

    to  psusong(人类失去指针,世界将会怎样?):
    楼主只是要设置客户区的大小,这关WM_GETMINMAXINFO什么事了?不明白
      

  13.   

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    { if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    return -1;
    CRect rc;
    rc.left=lpCreateStruct->x;
    rc.top=lpCreateStruct->y;
    rc.right=700;//设置客户区的宽度
    rc.bottom=300;//设置客户区的高度 CalcWindowRect(&rc);//####请大家注意这个函数,它将非客户区的大小加到rc这个结构上,也就是说调用这个函数后,rc里的值就不再是上面指定的客户区的大小了,而是加上了非客户区的大小,于是下面就可以用MoveWindow来搞定了. MoveWindow(&rc);         //... return 0;
    }
      

  14.   

    不知道是否跟下面这个消息有关?嘻嘻.....WM_NCCALCSIZE
      

  15.   

    回复人: suprwx(想飞) ( ) 信誉:100  2003-03-04 16:30:00  得分:0 
     
     
      我能设置窗体的大小和位置,我想知道的是 client area 怎样设置或计算。拜托各位不吝赐教!    系统生成的窗体下面有 scrollbar 而我不想要这个东东,请问怎样去掉它?
     
     
      

  16.   

    TO: kingcom_xu(杀不了人的刀,郁闷!) 
    请仔细分析一下需求好不好啊????
      

  17.   

    回复人: slwqw(四大名捕之追杀令) ( ) 信誉:100  2003-03-06 09:50:00  得分:0 
     
     
      不知道是否跟下面这个消息有关?嘻嘻.....WM_NCCALCSIZE
      
     
    --------
    您可是以前的bcb_fans????????????????????我想跟这个消息没关吧,虽然MSDN上说这个是设置client的大小,我试过后发现其实更正确的说法应该是设置非客户区的大小才对,不过这本来就是相对的,呵呵
      

  18.   

    楼上的两位,你们争吵什么?
    用WM_GETMINMAXINFO就行了
    用别的方法都是走了弯路
      

  19.   

    To : Kingcom_xu我就是BCB_FANS,老大还记得小弟,深感荣幸!:)To : 楼主上面各种方法都给出来了,还是不能解决你的问题。估计是大家都没有完全理解你的意思(包括我!),不防把你的需求说得更详细一点,免得大家做无用功,如何?最好是提供一幅现成的你所看到的已经存在的程序的界面图片。
      

  20.   

    我大概试了一下,楼上各位讲的,除了 psusong(不要问我任何问题,因为我根本就不存在!)说的,其它的似乎都不管用。
    psusong(不要问我任何问题,因为我根本就不存在!):
    通过你的方法,把MIN值和MAX值设为一个值,可以达到直接设置客户区大小的目的。
    但是,采用你的方法,也会有一个缺点:
    程序刚出来时,大小不会是自己想要的,这时,用鼠标轻轻点一下程序的边框(就是调节大小那种方式,但不用拉,也拉不动,只需要点一下),客户区就设置为想要的大小了。
    有办法解决这个问题吗?
      

  21.   

    回复人: psusong(不要问我任何问题,因为我根本就不存在!) ( ) 信誉:120  2003-3-6 0:04:17  得分:0 
     
    搞笑!
    楼上的各位:楼主要的是定制sdi的client的size,而不是sdi的window size
    不知道各位是没有看明白,还是不会呢?mapping the message:WM_GETMINMAXINFO
    ----------------------------------------------------
    void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
    {
    // 1 - Let the default window proc fill the MINMAXINFO structure
    CFrameWnd::OnGetMinMaxInfo(lpMMI);

    // Calculate the "non-client overhead" of the frame window
    CRect rectClient;
    GetClientRect( &rectClient ); CRect rectWindow;
    GetWindowRect( &rectWindow ); int nWidthOverhead = rectWindow.Width() - rectClient.Width();
    int nHeightOverhead = rectWindow.Height() - rectClient.Height();
    //请问psusong(不要问我任何问题,因为我根本就不存在!)
    //我进行单步调试,发现nWidthOverhead和nHeightOverhead居然都为0!!!
    //是否这几句无用?
    // 2 - Modify the MINMAXINFO structure to reflect our
    // size limits // Here we want a minimum CLIENT size of 200x50 pixels
    // and a maximum CLIENT size of 400x200 pixels lpMMI->ptMinTrackSize.x = 200 + nWidthOverhead;
    lpMMI->ptMinTrackSize.y = 50 + nHeightOverhead; lpMMI->ptMaxTrackSize.x = 400 + nWidthOverhead;
    lpMMI->ptMaxTrackSize.y = 200 + nHeightOverhead;

    }