我是在一控件中显示一jpg图片的,在1024*768下正好是控件框的大小,当在800*600下时,图片就显的小了,没填充满控件,很难看,大家教我怎么解决啊??谢谢!!!

解决方案 »

  1.   

    这方面我恨VC啊~~~一遇到画框框我就用CB。
      

  2.   

    在一对话框中的picture control控件中显示图象bmp格式代码如下:
    bool CDlgViewInfo::ShowInfo(CString cTime)
     {
                       char tmpPath[_MAX_PATH+1]; 
    GetTempPath(_MAX_PATH,tmpPath);//得到临时文件的目录; 
    strFileName.Insert(0,tmpPath);//生成临时文件名 
    CFile outFile(strFileName,CFile::modeCreate|CFile::modeWrite); 
    //向临时文件写数据,数据库中数据读操作时关键是知道数据的长度,这可以从记录集的图像字段对应的长二进制成员变量m_Image的成员dwDataLength得到; 

    var = pRs->GetCollect((_variant_t)_T("Photo"));
    int iLen = pRs->GetFields()->GetItem("Photo")->GetActualSize();        pData=(var.parray->pvData); LPSTR buffer = (LPSTR)GlobalLock(var.parray->pvData); 
    outFile.Write(buffer,iLen); 
    GlobalUnlock(var.parray->pvData); 
    outFile.Close(); 

        CreateStreamOnHGlobal(var.parray->pvData, TRUE, &pStm); CRect rct;
    GetDlgItem(IDC_STATIC_VIEW)->GetWindowRect(&rct);
    ScreenToClient(&rct);
       
    CDC* pDC = GetDlgItem(IDC_STATIC_VIEW)->GetDC();
    IPicture *pPic; 
    //load image from file stream
    if(SUCCEEDED(OleLoadPicture(pStm,iLen,TRUE,IID_IPicture,(LPVOID*)&pPic))) 

    OLE_XSIZE_HIMETRIC hmWidth;  
    OLE_YSIZE_HIMETRIC hmHeight;  
    pPic->get_Width(&hmWidth);  
    pPic->get_Height(&hmHeight);  
    double fX,fY;  
    //get image height and width
    fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);  
    fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);  
    //use render function display image
    if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) 
    {
    pPic->Release();
    return false;
    }
    }  
    else  
    {
    return false;  
    }
    }
    return true;
    }由于显示图片的对话框是以刷卡的形式显示出来的。代码如下:
    if(刷卡进来)
    {
    if(ShowInfo(cTime))
    {
             CMainFrame * pMainFrm = (CMainFrame *)AfxGetApp()->m_pMainWnd;
    this->SetWindowPos(pMainFrm,rc.left,rc.top,0,0,SWP_SHOWWINDOW|SWP_NOSIZE);
             }
      

  3.   

    为何要用picture control啊?干吗不直接创建位图,然后用内存拷贝帖在对话框上或者任意CWnd的派生窗口上不就成了?我想和控件大小不匹配应该是因为Windows的CDC绘图映象模式问题,通常的模式(MM_TEXT)是直接针对监视器物理像素操作的,如转换改变分辨率后这个控件会和实际尺寸有出入.可以先转换成逻辑像素模式(比如MM_HIENGLISH),通过该位图的BITMAPINFOHEADER结构中记录的参数LONG   biXPelsPerMeter; LONG   biYPelsPerMeter; 和图片本身的分辨率可换算出位图实际物理尺寸,再将换算后的实际位图尺寸大小,根据对应的映像模式进行逻辑像素到设备像素的转换后计算出监视器的实际像素值大小进行绘制.
      

  4.   

    估计你的问题是显示的比例不协调吧!
    fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);  
    fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);  这里有问题,改成下面试一下
    factor = (double)pDC->GetDeviceCaps(HORZRES)/(double)pDC->GetDeviceCaps(HORZSIZE); 
     
    fX = hmWidth/100.0 * factor;  
    fY = hmHeight/100.0 * factor;  
      

  5.   

    你在OnSize里用SetWindowPos重设一下图片框大小就行了
      

  6.   

    显示jpg的图像的大小安装图片框的大小来设置