1:如何用VC在客户区加载硬盘上的BMP图象?
2:如何用VC调用EXCEL页中的数据?
3:如何使EXCEL里的数据自动更新?
(前两个问题最好给出源代码)

解决方案 »

  1.   

    1. LoadImage
    2. 用EXCEL关键字搜索一下,有很多
      

  2.   

    HBITMAP hBmp;
    hBmp = (HBITMAP)LoadImage( NULL,
    "C:\\pig.bmp",
    IMAGE_BITMAP, 
    0,
    0,
    LR_DEFAULTCOLOR |LR_LOADFROMFILE |LR_CREATEDIBSECTION
    );
      

  3.   

    void COleadoDlg::ShowPhoto()
    {
    // CClientDC hdc(this);
    HDC hdc;
    // CDC *hdc;
    hdc=::GetDC(m_Show.m_hWnd); 
    CRect m_picture;
    m_Show.GetClientRect(m_picture); 
    // ::GetClientRect(m_Show.m_hWnd,m_picture);
    int xpos=m_picture.left;
    int ypos=m_picture.top;
    int Widthpos=m_picture.Width();
    int heightpos=m_picture.Height(); 
    int bmpwidth,bmpheight,size,nclr;
    long filesize;
    CFile f;
    CFileException e;
    long count;
    HGLOBAL hfilemem;
    HGLOBAL hpalmem;
    char *lmem;
    LPBITMAPINFO lpbmi;
    LPLOGPALETTE lplogpal;
    HPALETTE hpal;
    const void *lpbit; if(!f.Open(m_PhotoPath,CFile::modeRead,&e))
    {
    AfxMessageBox("打开文件错误!");
    return;
    }
    f.SeekToBegin();
    filesize=f.GetLength();
    hfilemem=GlobalAlloc(GMEM_MOVEABLE,(filesize));
    if(!hfilemem)
    {
    ::AfxMessageBox("内存不够!");
    return;
    }
    lmem=(char *)GlobalLock(hfilemem);
    if(lmem==(LPSTR)NULL)return;
    f.SeekToBegin();
    if(filesize<64*1024)
    {
    count=f.Read(lmem,filesize);
    }
    else
    {
    count=f.Read(lmem,filesize);
    }
    if(count!=filesize)
    {
    ::AfxMessageBox("数据错误");
    return;
    }
    f.Close();
    size=*(LPINT)(lmem+10);
    lpbit=lmem+size;
    lpbmi=(LPBITMAPINFO)(lmem+14);
    bmpwidth=(lpbmi->bmiHeader.biWidth);
    bmpheight=lpbmi->bmiHeader.biHeight;
    RECT Rectangle;
    Rectangle.left=0;
    Rectangle.top=0;
    Rectangle.right=bmpwidth;
    Rectangle.bottom=bmpheight;
    switch(lpbmi->bmiHeader.biBitCount)
    {
    case 1:
    nclr=2;
    break;
    case 4:
    nclr=16;
    break;
    case 8:
    nclr=256;
    break;
    case 24:
    nclr=0;
    break;
    default:
    nclr=16;
    break;
    }
    hpalmem=GlobalAlloc(GMEM_MOVEABLE,sizeof(LOGPALETTE)+(sizeof(PALETTEENTRY))*nclr); if(!hpalmem)
    {
    ::AfxMessageBox("内存不够!");
    return;
    }
    lplogpal=(LPLOGPALETTE)GlobalLock(hpalmem);
    lplogpal->palVersion=0x300;
    lplogpal->palNumEntries=nclr;
    for(int i=0;i<nclr;i++)
    {
    lplogpal->palPalEntry[i].peRed=lpbmi->bmiColors[i].rgbRed;
    lplogpal->palPalEntry[i].peGreen =lpbmi->bmiColors[i].rgbGreen;
    lplogpal->palPalEntry[i].peBlue =lpbmi->bmiColors[i].rgbBlue;
    }
    hpal=CreatePalette(lplogpal);
    GlobalUnlock(hpalmem);
    GlobalFree(hpalmem);
    SelectPalette(hdc,hpal,0);
    RealizePalette(hdc);

    if(!StretchDIBits(hdc,xpos,ypos,Widthpos,heightpos,0,0,bmpwidth,bmpheight,lpbit,lpbmi,DIB_RGB_COLORS,SRCCOPY))
    {
    ::AfxMessageBox("展开图形时出错!");
    }
    DeleteObject(hpal);
    GlobalUnlock(hfilemem);
    GlobalFree(hfilemem);
    // ReleaseDC(&hdc);
    }
      

  4.   

    用用ACTIVEX中的自动化技术太长了,在VC++技术内幕第四版
      

  5.   

    ahr(电磁波)说的很对
    第一个问题,先读出文件的数据,然后画在客户区。
    第二个问题,创建一个EXCEL对象。
    第三个问题,通过第二个问题解决。