我有一個位圖,將要全屏顯示,但在800*600下是比屏幕大!在1024*768時正好!這個位圖是貼在對話框上的,請問如何設置才能使位圖不受分辨率的影響和對話框一樣大?
謝謝,我機等者解決!!!!

解决方案 »

  1.   

    利用api函数获得屏幕的大小、分辨率等参数,在以这些参数生成一个系数调整你的位图显示
      

  2.   

    GetSystemMetris
    {
    SM_CXSCREEN[SM_CYSCREEN]}orGetWindowRect( GetDesktopWindow->FormHandle(), ... );    在放大或缩小图像时,如何能最好的保持图像原态比例来显示呢?下面提供一个涵数可帮你来实现,调用它后,返回的矩形区域既为最佳显示图像大小。
        函数中的第一个参数rcScreen为图像要被显示的矩形大小,第二个参数sizePicture为图像自身大小,第三个参数bCenter为是否居中显示,返回值CRect既为图像最佳显示大小。
    涵数如下所示:
    CRect RectSizeWithConstantRatio( CRect* rcScreen,
                                           CSize sizePicture,
                                           BOOL bCenter)
    {
      CRect rect(rcScreen);
      double dWidth = rcScreen->Width();
      double dHeight = rcScreen->Height();
      double dAspectRatio = dWidth/dHeight;  double dPictureWidth = sizePicture.cx;
      double dPictureHeight = sizePicture.cy;
      double dPictureAspectRatio = dPictureWidth/dPictureHeight;  //If the aspect ratios are the same then the screen rectangle
      // will do, otherwise we need to calculate the new rectangle  if (dPictureAspectRatio > dAspectRatio)
      {
        int nNewHeight = (int)(dWidth/dPictureWidth*dPictureHeight);
        int nCenteringFactor = (rcScreen->Height() - nNewHeight) / 2;
        rect.SetRect( 0,
                      nCenteringFactor,
                      (int)dWidth,
                      nNewHeight + nCenteringFactor);  }
      else if (dPictureAspectRatio < dAspectRatio)
      {
        int nNewWidth =  (int)(dHeight/dPictureHeight*dPictureWidth);
        int nCenteringFactor = (rcScreen->Width() - nNewWidth) / 2;
        rect.SetRect( nCenteringFactor, 
                      0,
                      nNewWidth + nCenteringFactor,
                      (int)(dHeight));
      }  return rect;
    };
    此涵数的使用方法如下:
    {
    ……(部分省略)
    //得到屏幕大小
      CRect rcScreen( 0, 0, 
                      GetSystemMetrics(SM_CXSCREEN),
                      GetSystemMetrics(SM_CYSCREEN));  //得到图像尺寸
      CSize sizePicture(picture.m_Width, picture.m_Height);   CRect rcNewPictureRect = 
            SizeRectWithConstantAspectRatio(&rcScreen,
                                            sizePicture,
                                            TRUE);
      picture.Show(&dc, rcNewPictureRect);
    }
      

  3.   

    dominolili(domino)講的對!我也是這樣想的!可是怎樣操作呢?jennyvenus(JennyVenus)你的貼字是在別人網站上copy下來的,我早就看過了!,不是解決這個問題的方法!不過,還是謝謝你!:)就是在1024*768時大小真好!可是在800*600時,介面就只有原來的一部分了!我是在對話狂上貼了這樣的一副圖!對話框只要全屏就行了,可怎麼楊才能使貼上去的圖也跟著分辨率的不同也全部貼在對話框上呢?用StretchBlt ( )行嗎?
    可是,我還要在對話框上加控件!如何使這些控件的大小與位置也跟著改變呢?
      

  4.   

    再得到了分辨率之后,处理OnSize就行了
    ::SetWindowPos
    ::MoveWindow
      

  5.   

    jennyvenus(JennyVenus)
    ??
    能不能解釋的清楚一點好嗎?我用了stretchblt(),幕的是達到了,可是,顯示的效果很差!,沒有在1024*768下的清晰!