怎么才能使窗体的大小随着打开的bmp文件图象大小而改变?
要使客户区和图象大小一样大
请写具体点,在那个函数中实现
高手请赐教 thx.......

解决方案 »

  1.   

    在窗体创建之前,先取得图片的尺寸。在precreatewindow()里实现
      

  2.   

    我是菜鸟,还请高手多多发表意见。我的想法是这样的,
    CBitmap *pback = new CBitmap;
    pback->LoadBitmap(IDB_BIT);再用int GetBitmap( BITMAP* pBitMap )得到BITMAP,从BITMAP里面可以得到位图的宽高等值,用这个值做为客户区的值,改变窗口的大小,MoveWindow一把窗口应该就能实现了吧,这可能有闪烁。也许在你建立窗口的时候用这些值直接构建窗口效果会好些吧。
      

  3.   

    讀出圖象的大小 ,然後調整你的窗口大小:
    1。
    Image tmpImage(filename);DWORD fw=tmpImage.GetWidth();
    DWORD    fh=tmpImage.GetHeight();
    得到了圖象大小
    2。
    根據上邊的兩值設定你的Rect,然後 MoveWindow.
      

  4.   

    BOOL GetBitmapDimensionEx(
      HBITMAP hBitmap,     // handle to bitmap
      LPSIZE lpDimension   // dimensions
    );  得到图片的大小
    BOOL SetWindowPos(
      HWND hWnd,             // handle to window
      HWND hWndInsertAfter,  // placement-order handle
      int X,                 // horizontal position
      int Y,                 // vertical position
      int cx,                // width
      int cy,                // height
      UINT uFlags            // window-positioning options
    );  设定窗口的大小,cx & cy就是图片的大小;
      

  5.   

    我是菜鸟,请高手多多讲讲。我觉得可以用CBitmap::GetBitmap( BITMAP* pBitMap )来获得位图的宽高等值。再创建窗口的时候用这些值去建立窗口。没有试过,不知行不?
      

  6.   

    我现在知道图象的bmWidth,bmHeight
    怎么使窗口的客户区和图象一样大小
    用什么实现?
    在那个函数中实现?
      

  7.   

    movewindow函数可以在任何函数中改变窗体的大小!
      

  8.   

    GetClientRect(&ctRect);
    ctRect.right=ctRect.left+bmWidth; //bmWidth为图像的宽度
    ctRect.bottom=ctRect.top+bmHeight; //bmWidth为图像的高度
    MoveWindow(&ctRect,true);我是在OnDraw()中用的
    不行,没有窗体大小改变,你有没有可以通过的源程序给我 : [email protected]
      

  9.   

    设置滚动条,对于bmp图片的处理操作很多书上都有可去看一下直接拿过来用
      

  10.   

    设置滚动条,对于bmp图片的处理操作很多书上都有可去看一下直接拿过来用
      

  11.   

    在文档类中添加两个参数cx,cy存储bmp的width,height,
    然后,在视图类初始化的函数中添加代码,初始化用户窗
    口尺寸与bmp同尺寸(用文档类中的参数),再调用
    invalidate();函数,再修改视图类重画的OnDraw();
    用文档类的cx,cy重画窗口。
      

  12.   

    我这儿没有资料,有没有源程序,发给我/[email protected]
      

  13.   

    有没有通过的例子,发给我:[email protected]
    thx...........
      

  14.   

    还是我告诉你吧。
    看看这个例子,对你有什么帮助吧。
    void CView::OnDraw(CDC* pDC) 
    {
    CBitmap bmp, *obmp ;
    CDC mdc ;
    mdc.CreateCompatibleDC( pDC);
    bmp.CreateBitmap( m_n, m_m, 4, 8, m_frame_image ) ;
    if( (obmp = (CBitmap*)mdc.SelectObject( &bmp )) == NULL ){
    AfxMessageBox( "message" ) ;
    } CRect rect;
    pDC->GetClipBox(&rect); 获取完全包含指定设备场景剪裁区的最小矩形。 pDC->StretchBlt(0,0,(int)rect.right, (int)rect.bottom, &mdc, 0,0, m_n, m_m,SRCCOPY);
    if( mdc.SelectObject( obmp ) == NULL ) {
    AfxMessageBox( "message" ) ;
    }
    }
          语句CRect rect;
    pDC->GetClipBox(&rect); ,是求客户区的大小。
          函数pDC->StretchBlt()是对bitmap进行缩放。具体用法看帮助。
         代码放到onDraw()中。
      

  15.   

    兄弟,这个就是随你的客户区的大小变化的。而且,很敏感呢!:)
    你要知道OnDraw()的工作机制阿。
      

  16.   

    刚才自己按照大家讨论的方法试了一下,结果是在ONDRAW里加入
    GetClientRect(&ctRect);
    ctRect.right=ctRect.left+200; //主要是测试MOVWINDOW的作用
    ctRect.bottom=ctRect.top+150; 
    MoveWindow(&ctRect,true);
    后运行程序,客户区是变了,但是GetClientRect函数得到的是整个客户区(包括工具拦在内),不知道怎么得到空白客户区(即除去工具栏)。另外,主框架大小
    没有变,可能还要对客户区的父窗口调用一次MoveWindow函数,不过我这个菜鸟
    因为好久没碰VC了,连怎么得到父窗口句柄都忘了。大家知道的试着作个完整的测试吧,希望把源代码共享出来哈。