回覆列表
  • 1 # 讓跑步更有力量

    C語言寫控制檯程式是無法加圖片的,只能用命令列輸出,最多就是設定下背景和字型,顏色之類的。如果開發API視窗程式,完全依賴於作業系統的函式庫。C語言本身並不提供這類函式。

    下面是windows系統下實現的函式程式碼,第一個引數是圖片的存放的位置,第二個引數是視窗控制代碼。

    HRESULT ShowPic(char *lpstrFile,HWND hWnd)

    {

    HDC hDC_Temp=GetDC(hWnd);

    IPicture *pPic;

    IStream *pStm;

    BOOL bResult;

    HANDLE hFile=NULL;

    DWORD dwFileSize,dwByteRead;

    //開啟圖形檔案

    hFile=CreateFile(lpstrFile,GENERIC_READ,

    FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

    if (hFile!=INVALID_HANDLE_VALUE)

    {

    dwFileSize=GetFileSize(hFile,NULL);//獲取檔案位元組數

    if (dwFileSize==0xFFFFFFFF)

    return E_FAIL;

    }

    else

    {

    return E_FAIL;

    }

    //分配全域性儲存空間

    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);

    LPVOID pvData = NULL;

    if (hGlobal == NULL)

    return E_FAIL;

    if ((pvData = GlobalLock(hGlobal)) == NULL)//鎖定分配記憶體塊

    return E_FAIL;

    ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把檔案讀入記憶體緩衝區

    GlobalUnlock(hGlobal);

    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);

    //裝入圖形檔案

    bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);

    if(FAILED(bResult))

    return E_FAIL;

    OLE_XSIZE_HIMETRIC hmWidth; //圖片的真實寬度, 單位為英寸 

    OLE_YSIZE_HIMETRIC hmHeight; //圖片的真實高度, 單位為英寸

    pPic->get_Width(&hmWidth);

    pPic->get_Height(&hmHeight);

    //轉換hmWidth和hmHeight為pixels距離,1英寸=25.4毫米

    int nWidth = MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);

    int nHeight = MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);

    //將圖形輸出到螢幕上(有點像BitBlt)

    bResult=pPic->Render(hDC_Temp,0,0,nWidth,nHeight,0,hmHeight,hmWidth,-hmHeight,NULL);

    hmHeight,NULL);

    pPic->Release();

    CloseHandle(hFile);//關閉開啟的檔案

    if (SUCCEEDED(bResult))

    {

    return S_OK;

    }

    else

    {

    return E_FAIL;

    }

    }

  • 中秋節和大豐收的關聯?
  • 清蒸三文魚的做法是怎樣的?